Аватар

Посмотрел вчера Аватар в 3D. Фильм конечно просто фееричный и нереально красивый, нельзя сказать, что сюжет слишком сложен, эдакая высокотехнологичная сказка, но визуальная составляющая это просто революция. Вроде бы всё уже было по отдельности: и крутые эффекты, и фантастический мир и цифровые актёры. Но Кэмерону удалось всё это настолько объединить в единое целое, что иногда кажется эффектов никаких нет, просто съёмочная группа побывала на настоящей Пандоре.

avatar2

Кэмерон опять порвал всех. Насколько помню себя, все его фильмы чем то по-настоящему удивляли и шокировали. От первого терминатора мне стало плохо прямо в кинотеатре (смотрел в лет десять). Второй терминатор смотрел в 92 году за рубль в пионерском лагере в подпольном видеосалоне, была набитая комнатка людей и маленький телевизор, тогда это было для детского сознания просто шок, настолько фильм казался реальным. Чужие, до сих пор считаю его самым страшным блокбастером. Титаник, за билетами к которому вместо пары в лицее стояли почти два часа. Ещё Бездна, Правдивая ложь. Вот теперь и новое откровение — Аватар. Кэмерон, наверное продал душу дьяволу =)

Хотел посмотреть именно в 3D, поэтому пришлось ждать, когда откроют первый в Минске 3D кинотеатр «Киев». Билеты на полтора месяца вперёд расхватали в течении одной недели. Уверен, если бы кинотеатр принадлежал не государственной конторе, а частнику, то сеансов было бы не два-три в сутки, а ещё утром и поздней ночью (заработали бы лишние $100k+). Что радует, Аватар дал настолько сильный толчок развитию 3D кино в мире, что 3D кинотеатров, фильмов станет больше. Уже почти приняли стандарт 3D для Blu-ray что позволит смотреть трёхмерное кино дома (хотя понадобиться 120 Гц телевизор).

Аватар

В 3D, конечно, погружение в фильм максимальное. Очки уже не просто с сине-красными стёклышками, а с спектральными фильтрами, т.е. изображение полноцветное, только менее яркое (все цвета показываются на экране), хотя у технологии Digital 3D есть определённые недостатки. Во-первых слегка уменьшают эффект рамки экрана. Во-вторых в реальном мире мы неосознанно фокусируемся на нужном нам объекте, а в 3D нужно подстраиваться под фокус камеры, иначе изображение размывается, особенно это чувствуется в очень динамичных сценах. Впрочем ко всему этому быстро привыкаешь в процессе просмотра. Особенно, в Аватаре удались всякие мониторы и интерфейсы будущего, внутри них изображение тоже трёхмерное! =).

Кстати расскажу один секрет, как увидеть любое изображение или обычный фильм (не 3D)  — по-настоящему трёхмерным. Вычитал из книжки Перельмана «Занимательная Физика» ещё в детстве. Всё очень просто, нужно сесть поближе и просто… посмотреть одним глазом! Если смотреть одним глазом, то наш мозг не получит никакой информации о объёме, наше зрение будет двухмерное, и мы увидим ровно ту трёхмерную проекцию которую запечатлел «одноглазый» объектив фотоаппарата или кинокамеры. Т.е. всю информацию о трёхмерности наш мозг получит из картинки (по теням и положению объектов) и изображение станет по настоящему трёхмерным! Правда смотреть одним глазом кино совсем неудобно и непривычно т.к. поле зрения уменьшится почти в два раза, но объёмность картинки на какое то время ощутить удастся.

Adobe Reader = дырка в безопасности

Во как, из-за популярности PDF и медлительности Adobe в плане закрытия уязвимостей, Adobe Reader является причиной 80% всех взломов:

http://soft.compulenta.ru/507427/

«В первом квартале прошлого года вредоносные PDF-файлы фиксировались в 56% случаях всех эксплойтов, отслеживаемых ScanSafe. Этот показатель вырос до 60% во втором квартале и до 70% в третьем. Последняя четверть года показала 80-процентную популярность Acrobat-взломов из всех ПО-атак.»

Так что, самым лучшим советом для понижения уязвимости системы будет совет не ставить антивирусы и файрволы, а не устанавливать Adobe Reader вообще. Я когда перешёл на Win 7, установил альтернативу — Foxit Reader, делает то же что и Adobe Reader, но быстрее работает и меньше памяти жрёт.

Следуй за синей птичкой

В интернете какая-то эпидемия. Многие сломя голову, как малые дети бросились вести свои твиттер мини-дневники. Сейчас к этой истерии присоединился и Google со своим Buzz. В 140 символов можно вставить только одно малоосмысленное предложение. Лента сообщений напоминает бесполезную переписку с помощью эсэмэсок с сокращениями, когда в наименьшее кол-во символов пытаются вставить как можно больше информации.

twitter

Особенно меня бесят эти сокращённые ссылки, по которым не видно на какой сайт переходишь. Всё это напоминает мне маленьких детей, вот для них то наверное и предназначен твиттер: «я покушал кашку», «ух ты, какую?», «вкусную», «а я сходила на горшок», «а сегодня мама купила мне машшшинку..», «а у меня, а у меня.. а у меня вот что есть!». Единственное на что годится твиттер (и ему подобные) так это для анонсов (но это по сути дублирует RSS) и как чат в реальном режиме времени для подростков.

Я провожу в интернете по 8 часов в день, у меня в Google Reader около полусотни интереснейших блогов и RSS лент, но я не успеваю нормально прочитать и трети из них. Я не могу воспринимать эти ленты, хотя каждый день достаточно много читаю. Наверное я уже слишком старый, или наоборот ещё не повзрослел… =)

Command & Conquer

Electronic Arts выложило для бесплатного скачивания полные версии (со всеми видео роликами, как полагается) три первых части Command & Conquer: Tiberium Dawn, Red Alert, Tiberium Sun (+адд-он Firestorm).

Command & Conquer

Качать тут: http://www.commandandconquer.com/classic

Эх были времена. Command & Conquer вышел в 95 году и шокировал своей графикой, игровым процессом, музыкой. Помню, запускался даже на компьютере с 386 процессором (играл у друга, у меня компьютер гораздо позже появился). Вот Westwood умела делать раньше стратегии. До сих пор интересно иногда переигрывать. Не то что сейчас.

Реквием по Windows Mobile

Анекдот. Сегодня появились сообщения, что новая разрабатываемая версия Windows Mobile 7 будет однозадачной, не совместимой с предыдущими версиями и программы можно будет устанавливать только через онлайновую службу. Т.е. по сути полностью содранная с iPhone ОС.

Источник: http://soft.compulenta.ru/503554/

Видимо Microsoft решила задушить своё детище собственными руками. По-моему мнению Windows Mobile (у меня на HTC Diamond стоит версия 6.1) с оболочкой от HTC (заменяющей все основные приложения на свои) не так плоха. Просто юзабилити у этой ОС нужно доработать как следует (в том числе и для управления пальцами).

Рыба дот ком

Сегодня с утра ездили закупаться в рыбный магазин. Увидел лоток с рыбой «СOM» и с минуту стоял, смотрел и тупил, как же может быть так, чтобы рыба называлась интернет-доменом. =) Наверное, я уже потерян для общества =)

История спутниковых снимков в Google Earth

Оказывается теперь можно видеть историю спутниковых снимков для любой местности в Google Earth! Отличная возможность я вам скажу!

Кстати, насчёт даты спутниковой съемки Минска в Google Maps и Яндекс Картах я угадал. В Google Maps Минск за 11 августа 2009, а в Яндексе за 22 апреля. Те и те снимки есть в Google Earth. Самые ранние снимки Минска есть за 2001 год.

Оптимизация MySQL

Да уж, 9 лет занимаюсь веб-разработками, а в оптимизации сайтов и базы данных MySQL в частности, каждый раз нахожу для себя много нового. Проблема в том, что во время разработки сложно оценить все узкие места, они возникают когда в базе появляются тысячи, десятки тысяч или даже миллионы записей в таблицах.  Тут я собрал разные полезные фишки и советы, связанные с оптимизацией MySQL открытые мной в последнее время.


PROCEDURE ANALYSE()

Стандартная функция, которая анализирует поля таблицы в запросе и выводит советы по оптимальной длине/типу полей. Например SELECT * FROM table PROCEDURE ANALYSE().

Известно, что использование типа полей занимающего большую память делает более медленной работу с таблицами. Enum быстрее чем Varchar, varchar быстрее чем text, medium int быстрее чем int и т.д. Часто можно оптимизировать типы в зависимости от данных в таблице.


Определение не эффективных индексов

Индексы в таблицах — большое благо, но не стоит забывать что кроме того, что индексы ускоряют выборки из таблицы (SELECT) они замедляют обновление таблиц (UPDATE) и добавление новых полей (INSERT), так как при каждом обновлении данных все индексы перестраиваются. Также индексы занимают место на диске. В таблицах где данные часто обновляются/добавляются использование индексов должно быть сбалансированным.

С помощью этого хитрого запроса можно увидеть 10 самых малоэффективных индексов во всей базе данных:

SELECT t.TABLE_SCHEMA AS `db`, t.TABLE_NAME AS `table`, s.INDEX_NAME AS `inde name`, s.COLUMN_NAME AS `field name`, s.SEQ_IN_INDEX `seq in index`, s2.max_columns AS `# cols`, s.CARDINALITY AS `card`, t.TABLE_ROWS AS `est rows`, ROUND(((s.CARDINALITY / IFNULL(t.TABLE_ROWS, 0.01)) * 100), 2) AS `sel %` FROM INFORMATION_SCHEMA.STATISTICS s INNER JOIN INFORMATION_SCHEMA.TABLES t ON s.TABLE_SCHEMA = t.TABLE_SCHEMA AND s.TABLE_NAME = t.TABLE_NAME INNER JOIN (SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, MAX(SEQ_IN_INDEX) AS max_columns FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA != ‘mysql’ GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME) AS s2 ON s.TABLE_SCHEMA = s2.TABLE_SCHEMA AND s.TABLE_NAME = s2.TABLE_NAME AND s.INDEX_NAME = s2.INDEX_NAME WHERE t.TABLE_SCHEMA != ‘mysql’ AND t.TABLE_ROWS > 10 AND s.CARDINALITY IS NOT NULL AND (s.CARDINALITY / IFNULL(t.TABLE_ROWS, 0.01)) < 1.00 ORDER BY `sel %`, s.TABLE_SCHEMA, s.TABLE_NAME LIMIT 10;

Взято отсюда: http://pastebin.com/f6b1c381c. Уберите LIMIT 10, чтобы увидеть статистику по всем индексам.

EXPLAIN — Определение используемых индексов и строк, которые нужно обработать MySQL базе данных для выполнения запроса.

Очень просто, добавляем к нашему запросу слово EXPLAIN. Например: EXPLAIN SELECT * FROM table WHERE var=value ORDER BY field. Очень полезно для просмотра эффективности индексов.

Полный отказ от ORDER BY rand();

Конструкция ORDER BY rand(); отдаёт поля из таблицы в случайном порядке. Основная засада в том, что при выполнении этой конструкции не используются индексы и осуществляется полное сканирование таблицы. Уже при нескольких тысячах записей могут начаться проблемы. Разумно переписать код, чтобы все записи брались из базы данных, добавлялись в массив и сортировались в массиве (shuffle в PHP). Если записей очень много, имеет смысл сделать кеширование — например делать случайную сортировку раз в час.

Отключить InnoDB если он не нужен

Это движки таблиц. MyISAM — быстрее и проще, InnoDB — умеет много полезного, например транзакции, отсутствие блокировок. Если все эти фишки не нужны, то кто-то советует оставаться на MyISAM, кто-то наоборот переходить на InnoDB. Я пока ещё этот вопрос для себя не решил и использую MyISAM.

В любом случае если InnoDB не используется стоит отключить его поддержку, т.к. сервер кушает лишнюю память и работает медленее. Для отключения добавляем skip-innodb в конфиг (/etc/mysql/my.cnf).

Медленные запросы

Некоторые запросы выполняются очень медленно. Скорей всего о большинстве них вы и не подозреваете, т.к. вы тестировали когда в таблице было несколько сотен записей, а сейчас там несколько десятков тысяч и т.д. Найти такие запросы, на которые стоит обратить самое пристальное внимание, можно если включить логгирование Slow Queries. В конфиг файле (/etc/mysql/my.cnf) прописываем:

log_slow_queries = /var/log/mysql/mysql-bin.log
long_query_time = 2

2 — это количество секунд, больше которых выполняемый запрос будет считаться медленным и добавляться в лог. Если добавить ещё строчку log-queries-not-using-indexes в логи будут добавляться все запросы, для которых не использованы индексы.

Затем перегружаем MySQL сервер (/etc/init.d/mysql restart) и в /var/log/mysql будут добавлятся файлы логов с медленными запросами за последние 7 дней (по умолчанию).

Кеширование в MySQL

Стоит конечно писать скрпиты так, чтобы запросов в базу данных было как можно меньше, но часть ваших проблем на себя может взять MySQL. Правильная настройка кеширования приведёт к тому, что повторяющиеся запросы будут браться из кеша и выполняться очень быстро. У меня например 75% запросов выполняется из кеша. Конечно, этот процент зависит от типа запросов, от размера самого кеша, от частоты запросов к базе данных и т.д. Обычно стандартная конфигурация не всегда подходит, т.к. для разной нагрузки нужны разные настройки. Чтобы узнать что менять, смотрим следующий пункт.

Автоматический тюнинг

С помощью простой утилитки mysqltuner можно обнаружить самые основные узкие места в конфигурации MySQL.

Выполняем на сервере:

wget http://mysqltuner.com/mysqltuner.pl
chmod u+x mysqltuner.pl
./mysqltuner.pl

Далее нужно ввести root логин и пароль к MySQL серверу, а скрипт проанализирует данные и выведет советы в автоматическом режиме. Я меняю параметры в конфиге, на которые нужно обратить внимание, а затем через несколько дней смотрю опять.

wget http://mysqltuner.com/mysqltuner.pl
chmod u+x mysqltuner.pl
./mysqltuner.pl

Также полезные советы можно посмотреть в phpMyAdmin если нажать ссылку «Текущее состояние MySQL» на главной странице.

Минимизирование изменения таблиц

Добавление или изменения данных в таблицы приводит к тому, что перестраиваются все индексы и сбрасывается кэш таблицы. Хорошо, если в таблице немного записей. У меня в нескольких проектах есть таблицы в которых несколько миллионов записей, благодаря индексам выборки из таблиц происходят быстро, но при изменении таблицы и при одновременном обращении к ней, происходит резкое замедление выполнения выборок (запросы SELECT).

Это я вот к чему, иногда для оптимизации работы с базой данных имеет смысл переделать логику работы скриптов. Например, я сейчас делаю кеширование, чтобы все обновления сохранялись в небольшой временной таблице, а добавление всех данных в большую таблицу (и её изменение) происходило только раз в сутки.

Оптимизация таблиц

Иногда следует выполнять OPTIMIZE TABLE, т.к. таблицы со временем фрагментируются из-за изменения, добавления данных и скорость доступа к ним, со стороны дисковой системы сервера уменьшается.

Полезные ссылки по Оптимизации MySQL:

20 Советов по оптимизации MySQL
Сервер на стероидах
MySQL Optimization

Google Maps vs Yandex Maps

Ну что же. Свершилось. Наконец-то добрались и до Минска.

Google Maps обновил карту пятилетней давности. Раньше снимки были настолько старые, что на них не было множество новых домов. Сейчас спутниковые снимки примерно прошлого лета (2009). Что приятно прописали все улицы и на карте стали появляться номера домов. Но пока далеко не все, примерно процентов 20-30 от общего количества в Минске. Но стоит сразу отметить качество карты выше чем у Яндекса — т.к. в той части где присутствуют дома, есть все дворовые проезды и есть названия различных строений (рынки, школы..).

Сегодня Минск опубликовал и Yandex. Yandex чуть опередил Google, они сразу опубликовали достаточно актуальную карту.  На карте есть все дома и работает поиск по номеру дома. Спутниковые снимки чуть более ранние, чем у Google — примерно середина-конец весны 2009. И там и там снимки примерно одинакового качества, но у Google слегка более чёткие и контрастные (возможно просто потому что больше зелени).

Сводная таблица:

Google Maps Yandex Maps
Завершенность карты 20-30 % от всего города 100 %
Номера домов Да Да
Названия строений Да Нет
Остановки транспорта Да Нет
Прокладка маршрута Частично Нет
Пробки Нет Нет
Дворовые проезды Да Нет
Направление движения на дорогах Да Нет
Спутниковая карта ~ лето 2009 ~ весна 2009

Карта от Google более функциональная и лучше, но не закончена, поэтому пока нужно пользоваться картой от Яндекс. Радует, что теперь для поиска нужного дома можно не пользоваться старой программой CityInfo, с кучей рекламы и кошмарной пародией на карту map.by.