Исправление latin1 в cp1251
Столкнулся с интересной задачкой, в одном из старых проектов база данных оказалась в latin1 при этом соединение с базой данных также устанавливается в latin1. При этом сама база данных содержит русские буквы. Сам проект работает отлично - два бага друг друга компенсируют, но при попытке изменить коллейшн в phpMyAdmin на правильный русские буквы превращаются в вопросики...
Алгоритм решения получился следующий, получаем дамп базы данных в кодировке cp1251, для этого phpMyAdmin нужно заставить думать что он работает в latin1 и в этом режиме сделать дамп нашей базы данных. Для этогого в /libraries/select_lang.lib.php (у меня древний phpMyAdmin в новых может и не то нужно делать...) поменял
'utf-8' => 'utf8',
на
'utf-8' => 'latin1',
phpMyAdmin на главной странице показывает:
MySQL charset: cp1252 West European (latin1)
значит обман удался :)
После этого делаем дамп базы данных называем его например db_cp1251.sql
Открываем дамп и удаляем все где говориться про latin1 (типа DEFAULT CHARSET=latin1)
Забрасываем дамп обратно, но mysql клиенту говорим что файл в кодировке cp1251:
mysql --default-character-set=cp1251 --character-sets-dir="C:\Program Files\MySQL\MySQL Server 4.1\share\charsets" db < db_cp1251.sql
(--character-sets-dir нужен только в Windows)
Не забываем вернуть phpMyAdmin в исходное состояние и, вуаля, файл в правильной кодировке. Ура!.
Автомонтирование раздела ntfs
Убунта вообще то по умолчанию делает это сама. Вернее делает Gnome но только при первом обращении. У меня же на ntfs разделе есть несколько виртуальных доменов и апачу такое обращение явно не нравится поэтому нужно чтобы раздел монтировался при старте системы.
1. находим имя устройства для монтирования - после того как диск подмонтирован запускаем
mount -l
увидим много строчек где есть что то вроде:
/dev/sdb1 on /media/disk type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096) []
значит наше устройство /dev/sdb1
2. добавляем в /etc/fstab следующую строку:
/dev/sdb1 /media/diskc ntfs-3g defaults,locale=ru_RU.utf8 0 1
я специально в качестве точки монтирования указал /media/diskc а не /media/disk - здесь обнаружилась одна тонкость чтобы раздел был успешно подмонтирован папка должна существовать поэтому ее нужно создать.
3. создаем папку:
sudo mkdir /media/diskc/
4. перегружаемся:
sudo reboot
Если все сделано правильно то диск будет подмонтирован автоматически во время запуска.
Как создать скриншот странички на стороне сервера
Встала задачка, сделать скриншет сайта на стороне сервера (Linux).
Обнаружил сразу несколько способов.
Первый способ это воспользоваться khtml2png - консольная утилита которая испольльзует khtml - движек на котором работают Safari и Crome. Утилита требует наличия иксов, чтобы запустить X сервер на сервере, можно воспользоваться Xvfb.
Еще один способ это установить на сервер firefox. При наличии Xvfb он отлично запускается.
Оба способа работают, однако khtml2png работает довольно грустно ибо не поддерживает флеш, firefox работает гораздо веселее, но пока никак не соображу как запустить его из командной строки на fullscreen.
Как сделать картинку без картинки
Обнаружил забавное, оказывается можно на стороне клиента показывать картинку не загружая с сервера бинарник из файла:
<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0 vr4MkhoXe0rZigAAAABJRU5ErkJggg==" alt="Red dot" />
ul.checklist > li.complete { margin-left: 20px; background:
url('data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAA
ABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/5
8ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/A
FGGFyjOXZtQAAAAAElFTkSuQmCC') top left no-repeat; }