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, но быстрее работает и меньше памяти жрёт.

Реквием по Windows Mobile

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

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

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

Оптимизация 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

Странная проблема с Wi-fi

Вчера у моего модема (Zyxel 660 HTW2 EE) вдруг пропал Wi-fi. Ноутбук и коммуникатор просто перестали видеть сеть, хотя до этого никаких проблем не было.

Начал разбираться, потратил два часа — пробовал так и эдак, заново настраивал wi-fi, сбрасывал настройки на заводские, установил три разных прошивки, менял схемы подключения, степень шифрования и частотный диапазон wi-fi, ворочал модем, крутил антеннку в разные стороны. Перепробовал всё, что только можно. Не работает, хоть тресни.  Собирался уже в начале недели везти модем в сервис, а потом решил в последний раз отключить все провода от модема, и подключить заново. Начал подключать постепенно и вдруг чудо, заработало!

Оказывается, каким-то странным образом, на работу Wi-fi влияет сетевой кабель проведённый к телевизору. Когда сетевой кабель от телевизора подключен, то Wi-fi работает нестабильно через раз, когда отключен — работает без вопросов. В общем проблема крайне странная, наверное причина в какой-то хитрой помехе или в каком-то статическом напряжении. Для себя сделал вывод, что к настройке сети нужно подходить по-особому, т.к. ждать можно чего угодно =)

Потенциальная проблема с синхронизацией Windows Mobile

У меня смартфон HTC Diamond Touch на Windows Mobile. Для синхронизации контактов, календаря, фотографий используется Windows Mobile Device Center. Т.е. всё просто, подключаешь телефон, он автоматически синхронизирует все данные с Outlook. В Outlook можно быстро внести новые контакты, задачи и он их закидывает на телефон. Если на телефоне произойдёт сбой, то можно восстановить все данные с компьютера.

Windows Mobile Device Center

Для того чтобы всё это работало, при первом соединении настраивается так называемое «Партнёрство» (Partnership).  В настройках указывается какие данные будут синхронизироваться, и как поступать при возникновении конфликтов, данные обновлять с компьютера или с телефона.

После переустановки системы, я стал настраивать заново, справедливо предположив, что все контакты и календарь я смогу восстановить первоначально с телефона на компьютер, а затем уже постоянно синхронизируясь с базой, как и раньше.  Для того чтобы синхронизация работала заново — нужно настроить новое партнёрство, предварительно удалив старое (по другому нельзя). А вот тут сюрприз, при удалении старого проиходит неожиданное — УДАЛЯЮТСЯ все контакты и календарь на телефоне, т.е. можно в один момент потерять все свои данные. Тут можно только поаплодировать гениальной логике программистов Microsoft, которые наверное считают, что система ставиться на века и пользователь никогда её не будет менять. Мои контакты спасло только то, что на ноутбуке тоже был настроено партнёрство и контакты и календарь (месячной давности) удалось восстановить оттуда.

Т.к. доверие бэкапу через  Windows Mobile Device Center пропало, для дополнительного бэкапа данных на смартфоне на Windows Mobile, можно воспользоваться очень хорошей программкой PimBackup. С помощью неё все контакты, календарь, а также  SMS-сообщения и  лог-звонков. Данные можно сохранить в файл, а затем восстановить обратно, или перенести на другой смартфон. Очень удобно. Скачать можно тут: http://4pda.ru/forum/index.php?showtopic=35872

Windows 7

Обновился до «семёрки». Очень приятная система, наверно такая и должна была быть Vista в задумках разработчиков — быстрая, красивая, удобная. Но как обычно бывает, всё реализовать им удалось только со второго раза. Субъективно, Windows 7 работает заметно быстрее Vist’ы. Установка самой системы заняла 25 минут, все драйвера (кроме принтера) установились автоматически. Я год мучался с регулярными перезагрузками и тормозами. Поменял корпус и блок питания, уверен был что все проблемы в железе, а нет,  оказалось, все проблемы были в  чудо-Vist’e.

Мой рабочий стол Windows 7

Windows 7 очень серьёзная работа над ошибками Vist’ы — все спорные моменты грамотно доработаны. Мне непривычна разве перемещение кнопки «очистить рабочий стол» в нижний левый угол и более запутанная настройка сети. Но видно, что разработчики отошли от пути добавления разноцветных фенечек, а пошли по пути функциональности и минимализма. Windows 7 определённо операционная система не на один год, как и Windows XP. Думаю, что следующую ОС, Microsoft будет очень сложно продвигать.

Частенько по качеству программы (системы) хорошо видно, когда основную роль играют технические специалисты, а когда маркетологи. Чудовища маркетинга — программы с переломанным интерфейсом, с глюками, с абсолютно никому не нужными новыми фенечками ( но которые позиционируются как абсолютно нужные). Сделанные по принципу, лишь бы чего добавить, чтобы продать как новую версию. Хороший пример, это программы из пакета Adobe CS4, по сравнению с предыдущим CS3, на новый хитрый интерфейс, скорость работы, и глюки Photoshop’a, Dreamweaver’a и особенно Flash’a без слёз смотреть невозможно.

Wavozaur

Wavozaur (http://www.wavosaur.com) — отличный бесплатный аналог Sound Forge, когда нужно что то вырезать, вставить или зациклить в звуковом файле. Единственный минус (что свойственно всем open source программам), пока не умеет сохранять в mp3 (т.к. до 2010 года формат защищен патентом).

DLNA в телевизоре

Месяц назад купил в зал новый телевизор. Жидкокристаллический Philips 42 дюйма. Телевизор хороший и свои основные функции выполняет просто замечательно — картинка чёткая и эфир отлично показывает.

Я сам эфир смотрю мало, смотрю по телеку в основном фильмы.  Фильмы на большом телевизоре и на мягком диване гораздо удобней смотреть, чем на мониторе. Для этого у меня есть уже как два года DVD плеер Panasonic S52 который умеет кроме самого проигрывания DVD, ресайзить картинку до почти полного FullHD разрешения 1080i и проигрывать фильмы в формате DivX/Xvid (большинство фильмов скачанных с интернета). Правда он  не умеет проигрывать популярный формат mkv (matroska), в котором появляется всё больше хороших фильмов в высоком разрешении, а некоторые фильмы проигрывает с небольшим дёрганием.

Philips

Именно поэтому новый «зомбоящик» я купил с поддержкой DLNA. DLNA — это новый стандарт позволяющий устройствам передавать фильмы, музыку и картинки в режиме реального времени. Телевизор и маршрутизатор (у меня в этой роли ADSL модем Zyxel) соединяются сетевым кабелем, на компьютере устанавливается медиа-сервер, и на телевизоре можно смотреть фильмы с компьютера. В теории всё выглядит просто замечательно, но на практике всё оказалось чуть сложнее…

Кстати в телевизоре также есть USB, и телевизор умеет с него проигрывать видео. Правда mkv формат проигрывать он всё равно не умеет, и ужасно реализована прокрутка. Можно сказать что её нет вообще, чтобы докрутить до середины фильма нужно потратить минут десять. Но это работает, и с USB удобно смотреть фотографии или сериалы.

Итак, на компьютер устанавливается медиа-сервер. Мне очень понравился «Домашний медиа-сервер» www.homemediaserver.ru.  Продукт бесплатный и очень функциональный, но далеко не простой.  Настроек море, и я потратил целый вечер, чтобы разобраться.

Технически это работает следующим образом. Медиа-сервер на лету перекодирует фильм и отдаёт его по сети телевизору в понятном ему потоковом формате (mpg, wmv). Некоторые форматы, понятные телевизору (например тот же mpg) отдаются телевизору напрямую, без перекодирования. Можно настроить разрешение и качество отдаваемого изображения. Такое преобразование нагружает процессор и в случае файла с большим разрешением — мощности процессора может даже не хватить.

С обычными фильмами DVD качества проблем никаких нет. У меня есть несколько фильмов c HD качеством и для них моего процессора (Core 2 Duo E7200 разогнанного на 25%) хватает почти впритык — все фильмы успевают перекодироваться в реальном времени, но для некоторых потребовались танцы с бубном и настройка профиля транскодирования (так называется преобразование). Например, видео с фотографиями с Хаббла (разрешение 1280×720) заработало в реальном режиме времени после выставления правильного разрешения. Это наверное первая ситуация, когда мне действительно не помешал бы четырёхядерный процессор. Можно конечно заранее перекодировать фильм для просмотра (правда это совершенно не удобно).

Резюмирую:

Плюсы:

  • Работает!
  • Видео высокого разрешения на таком экране выглядит просто чудесно и пропускной способности сети хватает для передачи FullHD
  • Проигрывает любые форматы, в том числе и mkv
  • Через медиа сервер можно настроить интернет-телевидение, скачивание различных подскастов и т.д.
  • Удобно — захотел посмотреть фильм, закинул ноги на диван, включил телевизор и смотри

Минусы

  • Сложность настройки
  • Не очень удобный интерфейс в телевизоре для выбора фильма/фотографии
  • Прокрутки удобной нет, можно начать просмотр фильма через промежутки кратные 5 минутам (этот промежуток можно настроить в медиа-сервере).
  • Нет отображения времени длины фильма и времени до окончания проигрывания.
  • При просмотре фильма, процессор компьютера нагружается перекодировкой фильма

Реально всё это работает и относительно удобно, но на данный момент оставляет какое-то ощущение недоделанности и сыроватости. Видно что эти дополнительные функции в телевизоре выполнены по остаточному принципу (хотя после установки последних прошивок ситуация значительно улучшилась). Я добился того, чего хотел, но вполне можно было купить точно такой же телевизор без поддержки DNLA, который стоит на 300 баксов меньше, а за эти сэкономленные деньги купить полноценный медиаплеер, в который можно вставить отдельный винчестер, подключить к сети и смотреть с него фильмы.

Gmail захватывает мир

Использую Gmail с 2005 года, постепенно из резервного почтового ящика, почта на Gmail стала основной. Недавно сделал, чтобы все мои почтовые ящики переадресовывалась в Gmail (включая и почту с моего личного домена).

Я пользуюсь некоторыми сервисами Google, и мне импонирует их политика. Все сервисы имеют уже очень приличную функциональность, которая зачастую на голову выше, чем платные сервисы у конкурентов. А за деньги предлагаются уже решения для компаний. Например, сейчас у Yahoo больше почтовых ящиков в разы, но очевидно, что рано или поздно, часть перебегут на тот же Gmail. Там все основные услуги платные (например, POP и SMTP), интерфейс убогий, и то что меня шокировало, и заставило отказаться полностью от ящика на Yahoo — если не заходишь в аккаунт 4 месяца, то вся почта удаляется (!).

Сегодня обнаружил в Gmail новую функцию — Импорт контактов, достаточно указать аккаунт на другом почтовом сервисе (поддерживаются больше 30) и Gmail сам перетащит к себе все контакты и почту. Хорошо придумали! Скоро захватят мир =) Осталось найти, как перетащить на Gmail старую локальную почту из  Outlook Express за все годы, у меня там её больше чем 2 гигайбайта.

Клонирование виртуальных машин в VirtualBox

Использую в работе для тестирования отличный пакет для создания виртуальных машин — VirtualBox. Прeимуществ у VirtualBox много — он бесплатный, у него небольшой размер инсталлятора, удобный интерфейс, поддержка виртуализации всех основных операционных систем, быстрая работа.

Недостатки следующие: не очень удобная система состояний (так называемых снимков), к которым можно откатить всю виртуальную систему в любой момент. И самый большой минус — невозможно сделать копию установленной виртуальной машины. Удобно один раз поставить, к примеру, WindowsXP, а потом для создания новой виртуальной машины просто сделать её копию.

Оказывается проблема решаема. Копию можно сделать с помощью консольной утилиты vboxmanage (находится в корне папки с установленной программой).

Клонирование VirtualBox машин
vboxmanage clonehd {путь к одному виртуальному hdd} {путь к новому виртуальному hdd}
затем создаём новую машину и подключаем hd

Синтаксис такой:
vboxmanage clonehd {путь к одному виртуальному hdd} {путь к новому виртуальному hdd}

затем создаём новую виртуальную машину и подключаем новый созданный виртуальный hdd.