пятница, 18 апреля 2014 г.

Переключение кодировки

Решил я, что пришло время изменить кодировку страниц своего сайта «Заливная рыба», по крайней мере, начать эту работу. Хорошо бы, конечно, для таких случаем иметь Большую Красную Кнопку — голубую мечту Доктора Кто. Написа́л предыдущее предложение, прочитал его и осознал двусмысленность: то ли мечта Доктора голубая из–за её несбыточности, то ли вследствие изрядной (хотя не вполне явной) «голубизны» самого Доктора. Осторожнее нужно быть с эпитетами…

В общем, кнопки нет и в обозримом будущем не предвидится, а процесс перевода предыдущей версии сайта из кодировки CP-1251 в более прогрессивную UTF-8 нужно начинать. Первым делом, взялся за базу данных: в ней уже накоплено сведения о 80 давно подготовленных статьях и таблицы словарей (теги, категории, рубрикаторы). Сначала, с помощью встроенной в панель управления моего хостинг–провайдера утилиты phpMyAdmin скопировал всё содержимое базы данных MySQL к себе на компьютер в один файл («экспорт» называется). Затем вычистил БД, то есть удалил все таблицы вместе с содержимым, после чего поменял кодировку базу на вожделенную utf8-general_ci.

Потом нужно было собственно перекодировать данные: ведь из базы данных они выгрузились на мой жёсткий диск в кодировке cp1251.

Долгое время я пользовался старым добрым Macromedia Homesite+ версии 5.5 — старичок натужно пыхтел, жрал немилосердно внушительные объёмы ресурсов, гадёныш, но привык я к нему (всё–таки 10 лет вместе!), несмотря на некоторые неудобства. Буквально месяц тому назад я вынужден был с ним «распрощаться навеки»: взялся я ваять новый сайт, непременно в кодировке UTF-8, а мой «старикашка» ни сном, ни духом не знает что это такое.

Пришлось искать альтернативу, и она нашлась довольно быстро — Notepad++. Редактор простой, мощный и, что немаловажно, бесплатный (мой старый Homesite без таблэтки работать отказывался). А главное — понимает любые кодировки и, будучи дополнительно укреплён–усилен плагинами (я установил Emmet, QuickText и некоторые другие) оказался не менее функциональным и исполнительным, чем привычная софтина.

В общем, открыл я в NPP (Notepad++) файл экспорта из БД и запустил перекодировку в «UTF-8 без BOM» — секунда дела! Перед тем, как сохранить перекодированный файл пришлось порихтовать свойства таблиц: вместо

) ENGINE=MyISAM AUTO_INCREMENT=148 DEFAULT CHARSET=cp1251;

прописать

) ENGINE=MyISAM AUTO_INCREMENT=148 DEFAULT CHARSET=utf8;

Мне пришлось это сделать 7 раз и только потом сохранить файл. Следующий шаг — загрузка данных обратно в БД («импорт» называется и производится всё через ту же phpMyAdmin)

После этого всё стало гораздо хуже: к неудачному дизайну добавились совершенно нечитаемые «крокозяблы» (Дальний Восток и весь запад их называют моджибакой: mojibake) на всей поверхности страницы — простые вопросительные знаки (мол, что за хрень творится?!) и вопросительные знаки в чёрных ромбиках (навевают какие–то тревожные и угрюмые ассоциации).

Перекодировка всё в том же NPP файлов шаблонов и скриптов, а также замена кодировки страниц с


на


проблему не решили, хотя и принесли некоторое облегчение: кое–какие надписи стали читаемыми. Однако, всё, что «пришло» на страницу из базы данных, представляло собой одни вопросы, то есть, состояло сплошь из вопросительных знаков (моджибака, прости Господи!).

Тогда решил посмотреть, что вообще творится с переменными MySQL. Запустил запрос, получил ответ:

SHOW VARIABLES LIKE 'character_set%'
имя переменной значение
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8
character_set_filesystem binary
character_set_results utf8mb4
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

Оказалось, что кодировка utf8mb4 введена в MySQL начиная с версии 5.5.3 (в начале 2010 года) из–за того, что ранние версии MySQL могли сохранять только 5,88% символов Юникода, в то время как UTF–8 (Unicode Transformation Format, 8-bit — «формат преобразования Юникода, 8-битный») в состоянии отображать все 100%. Проблема в том, что UTF–8 использует для кодировки символов от 1 до 6 байтов (это теоретически, на практике же — от 1 до 4), а MySQL умела сохранять только трёхбайтовый UTF–8.

Стало быть, нужно ещё раз базу данных «перековать» в новую диковинку — utf8mb4. Только, вот какая штука: кодировка windows–1251 однобайтовая, а utf–8 — двухбайтова (для кириллицы, иврита, арабского, греческого, армянского, коптского алфавитов и таких экзотов, как тана, использующегося на Мальдивах и нко — в Гвинее и Мали; кстати, для грузинского алфавита требуется трёхбайтный код, как и для китайского, японского, корейского, индийского). Это значит, что для строки из 100 символов потребуется 100 байт в кодировке cp–1251 и 200 (а то и 300) в кодировке UTF–8.

Дальше — больше (в самом прямом смысле): utf8mb4 использует для хранения каждого символа 4 байта, то есть, для ставшего уже милым для нашего сердца примера с сотней кириллических буковок потребуется 400 байт. Поэтому, простой заменой кодировки тут не отделаешься — придётся ещё и увеличивать размер строковых и текстовых полей в таблицах.

В конечном итоге, получилось так (сравните первый вариант, от windows–1251 и второй, для utf–8 с добавкой от MySQL для одной из таблиц базы данных)

CREATE TABLE `vocabular` (
  `sysn` int(11) unsigned NOT NULL auto_increment,
  `ref` int(11) NOT NULL,
  `defen` varchar(100) NOT NULL,
  `lang` enum('en','ru','la') NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `voc_1` (`ref`,`defen`)
) ENGINE=MyISAM AUTO_INCREMENT=521 DEFAULT CHARSET=cp1251;
ALTER DATABASE `zalivryba` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

SET NAMES 'utf8mb4';

CREATE TABLE `vocabular` (
  `sysn` int(11) unsigned NOT NULL auto_increment,
  `ref` int(11) NOT NULL,
  `defen` varchar(400)  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `lang` enum('en','ru','la') NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `voc_1` (`ref`,`defen`(235))
) ENGINE=MyISAM AUTO_INCREMENT=521 DEFAULT DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Таким образом:

  • изменена кодировка всей БД, каждой из таблиц и каждого строкового поля (VARCHAR и TEXT) в таблицах;
  • увеличен в 4 раза размер каждого строкового поля;
  • установлены ограничения на размеры некоторых индексов — поскольку размер индекса не может быть более 1000 байт, то для поля, например, `defen` остаётся не более 989 байт (размер `ref` составляет 11 знаков), а это значит, что индексировать можно только первые 989:4 = 247 символов–знаков (ну, и хватит!)

Потом, как советуют бывалые люди, запустил восстановление (REPAIR) и оптимизацию (OPTIMIZE) всех таблиц, — быстро, из панели управления — и, дрожа от нетерпения, бросился смотреть на результат, а там… Ничего не изменилось: на экране была всё та же печальная моджибяковщина…

Очередная проверка переменных среды нарисовала странную картину:

За разъяснениями пришлось обращаться в службу поддержки хостинг–провайдера. Очень вежливые и обходительные специалисты настойчиво втолковывали мне, что они изменить ничего не могут, поскольку серверные установки могут повлиять на сайты всех остальных клиентов — хостинг–то sharing. В общем, ситуация сложилась тупиковая: впору опять всё возвращать в прежнюю кодировку windows–1251 и плакать по ночам от несбывшейся мечты про UTF–8 — не помогла даже очень хорошая статья толкового программера (то, что он является одним из авторов HTML5 Boilerplate, говорит само за себя).

Но решение нашлось, когда я бросил уже прощальный взгляд на мануал MySQL: там, в разделе «10.1.5 Configuring the Character Set and Collation for Applications»:

Приложениям, использующим базу данных, следует конфигурировать свои соединения с сервером при каждом подключении. Это можно сделать путём исполнения запроса SET NAMES 'utf8' после соединения. Этот запрос может использоваться независимо от способа подключения.

Решил напоследок попробовать ещё и этот вариант (а что я теряю?!), запустил в своём PHP–скрипте такую команду:

$db = DbSimple_Generic::connect("mysql://$user:$password@localhost/$name");
$db->query("SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'");

В первой строке кода — подключение к базе данных (я давно использую очень удобную библиотеку Дмитрия Котерова), а во второй — его настройка на utf8mb4 (перешибаются установки сервера character_set_server, collation_connection, collation_server и, наверное, многое другое). После этого всё… заработало!

Всё остальное вообще оказалось детской задачкой: изменил кодировки в заголовках страниц, перекодировал шаблоны, файлы инициализации строковых переменных — деловито и без проблем.

Voilà!

вторник, 15 апреля 2014 г.

Имя, сестра, имя!

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

Кому не хочется обзавестить звучным, коротким и ясным именем для своего сайта? Ещё на заре создания «Заливной рыбы» я твёрдо знал, что имя домена для сайта будет содержать слово «залив». Как вы понимаете, имена zaliv.com, zaliv.org или zaliv.net меня не ждали: первый до сих пор принадлежит судостроительному заводу «Залив» (гор.Керчь), второй — русскоязычной тусовке в Силиконовой долине (видимо, имеется ввиду Калифорнийский залив). Кем или чем были заняты эти же домены на TLD (Top Level Domain — домен верхнего уровня) .net и .info я уж и не упомню.

В общем, уже почти определилось имя 3aliv.info (по–моему, достаточно креативно), но случилось «отклонение от генеральной линии», и работа над сайтом прекратилась на неопределённый срок (как потом оказалось, на три года).

Среди задач, подлежащих решению при возобновлении разработки сайта, регистрация доменного имени, как вы помните, не значилась. А всё потому, что эта регистрация относится к категории архипервоочередных и суперсрочных, на два корпуса опережая все остальные. Выдержка хороша не только для вина, коньяка и виски, но и, как оказалось, для доменов: столь вожделенный zaliv.info уже оказался свободным! И по этой самой причине был немедленно зарегистрирован через самый удобный, на мой взгляд, сервис регистрации доменов — GoDaddy (в своё время перепробовал несколько и остановился на этом, пользуюсь много лет). С хостингом тоже давно определился — все мои проекты давным–давно базируются на WebHostingHub.com (надо бы его порекомендовать, если бы служба поддержки была бы более профессиональной).

После регистрации домена необходимо было активировать (на GoDaddy) его переадресацию на сервер хостинга, на котором размещены файл сайта (WebHostingHub). Процедура весьма проста и необременительна — заняла буквально пару минут, но потом начались долгие часы томительного ожидания. Дело в том, что для вступления в силу сделанных изменений, эти новые установки должны распространиться по всему миру. Обычно на это у моих новых доменов уходило несколько часов, но в случае с zaliv.info прошли сутки (14 апреля), а сайт всё ещё не виден в Интернете.

Обращения в службы поддержки обоих сервисов — и WebHostingHub, и GoDaddy — утешения не принесли: «ждите!». Зато нашлась интересная утилита, позволяющая следить за процессом синхронизации серверов. Непонятно, почему в этот раз процесс идёт так медленно: может быть, эти изменения служба доставки развозит между серверами на улитках?. Ждём–с…

Через двое суток после активации переадресации, сайт продолжает оставаться недоступным: о новых DNS–серверах моего сайта знают только Санкт–Петербург и Пекин из 21 города на планете, выборочно проверенных упомянутой утилитой «Какой у меня DNS». Неужели мой сайт, «Заливная рыба» (zaliv.info), невзначай затянуло в карнавал санкций в отношении России (хотя, об Интернет–санкциях и речи не было)? Более того, мой сайт украинский. Странно…

Тревога за судьбу моего юного домена и нежелание томиться в смутном ожидании заставили меня поискать дополнительные пути к прояснению ситуации. Нашлась ещё одна полезная утилита IntroDNS, которая, проанализировав мой домен, радостно сообщила, что введенные мной DNS–сервера вообще не отвечают. Возник повод снова, с воплями и гиканьем ринуться в службу поддержки WebHostingHub: ведь это их сервера я использую.

Удивительно полезной оказалась это найденная мной утилитка: я вывалил на службу технической поддержки хостинга все выявленные ошибки, поскучал у монитора 15 минут, пока пацаны на том конце наводили порядок в «синусоидах и амплитудах» и, буквально через несколько минут, — вы не поверите — про zaliv.info знали уже 20 DNS–серверов из упоминавшихся 21 (нерасторопным оказался ресурс в Малайзии).

У вас ведь тоже уже грузится «Заливная рыба»?

понедельник, 14 апреля 2014 г.

Битва слоёв с таблицами

Четыре года тому назад уже полным ходом шли кровопролитные бои между сторонниками компоновки страниц сайта, с одной стороны, при помощи таблиц и с использованием слоёв (div'ов) с другой. Моя личная двадцатилетняя история работы с реляционными базами данных и, следовательно, таблицами совершенно предсказуемо и очевидно определила мой выбор в пользу табличной вёрстки. Последующая практика разработки сайтов хоть и внесла некоторые коррективы в концептуальное отношение к слоям, но пламенной любви к ним так и не привила — ну, не чувствую я div'ы так, как чувствую таблицы.

Вместе с тем, создание сложной структуры страницы исключительно «на таблицах» может ввести в ступор даже опытного «табличника» — одно время в Сети ходили леденящие душу истории о сайтах, свёрстанных из четырёх десятков вложенных друг в друга таблиц. Впрочем, не менее страшные ужастики рассказывали и о многократно вложенных слоях, но это не лишало впечатлительных разработчиков сна и не заставляло их пугливо вздрагивать от случайных шорохов в ночной тиши: сегодня полтора десятка вложенных слоёв — нормальное явления, например, для шаблонов Blogger'а.

Жизненный опыт неустанно твердит: никакая крайность не может быть наилучшим решением. Справедливости ради должен заметить, что я никогда не был фанатом–ультрас таблиц, хоть ощущаю определённую духовную близость с ними с ними, а к слоям испытываю некоторую отчуждённость. Тем не менее, провозглашаю приверженность разумной середине (ну, или почти середине) в их применении на практике.

Такая «условная середина» определяется практической необходимостью и целесообразностью: например, неоспоримо лидерство слоёв при устройстве различных эффектов (скажем, полупрозрачных локальных затененеий), всплывающих, разворачивающихся и появляющихся окон. Зато, что касается структурирования какой–либо регулярной информации (в случае с моим сайтом это, например, галерея фотографий с пространными комментариями–описаниями), то разумной альтернативы таблицам вообще не существует (и не надо со мной спорить — всё равно не переубедите!).

В результате, мой новый выбор таков: структурирование страницы на самом высшем уровне осуществляется слоями, формирование колонок — при помощи таблиц, а наполнение ячеек таблиц — снова в div'ах, при необходимости (можно же и непосредственно в ячейку напихивать данные). Примерно так:

[...]
[...]

суббота, 12 апреля 2014 г.

Подключение скриптов и стилей

Не так, чтобы это было крайне необходимо, но неуёмная тяга к прекрасному заставила меня сотворить некоторые усовершенствования и без того очень гибкой блог–платформы Blogger от Google, где мы сейчас, собственно, и присутствуем. Дело в том, что по ходу повествования о своём тернистом пути к возрождению незаслуженно заброшенного сайта, мне предстоит публиковать какие–то фрагменты скриптов и стилей, и хотелось бы делать это так, чтобы это радовало глаз почтенного читателя.

С помощью всё того же Гугла разыскал я JQuery–библиотеку под названием плагин JQuery Sintax Highlight для «красивизации» кодов, написанных на различных языках программирования (мне могут потребоваться Javascript, CSS, PHP и SQL).

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

Среди услуг, предоставляемых Гуглом имеется сервис для размещения и хранения документов — облачное хранилище Google Drive. Если у вас есть аккаунт на Google (например, почта), значит у вас есть и Google Drive.

Запустить этот сервис можно нажав на квадратик из точек в правом верхнем углу панели Google (см. скриншот вверху) и выбрав из выпадающего окна иконку «Диск» После этого можно создать папку для своих скриптов (у меня это папка jquery) — именно для этого и существует красная кнопка «Создать», перейти в созданную папку и, нажав на меньшую безымянную красную кнопку (со стрелкой вверх), примыкающую к кнопке «Создать», загрузить требуемые файлы (в рассматриваемом случае это файл скрипта jquery.highlight.js и сопровождающий его файл стилей jquery.highlight.css, заранее взятые из репозитария).

Следующий этап — «разблокирование» файлов для всеобщего доступа: по умолчанию, при загрузке доступ к файлу имеет только его владелец. На скриншоте вверху для файла установлен наивысший уровень доступа: «Общедоступно в Интернете» (любые другие варианты у моего блога вызывали острое неприятие и скрипт просто не загружался на страницу). Кстати, если вы создаёте отдельную папку для своих скриптов (как моя jquery) и на неё устанавливаете требуемый доступа, то все загружаемые в эту папку файлы тоже будут «общедоступны в Интернете» (нужно будет только подтвердить это в диалоговом окне после загрузки).

Очень важный этап — переделка адреса ссылки на загруженные файлы. Гугл генерирует ссылку примерно такого вида (находится в поле «Совместный доступ»):

https://drive.google.com/file/d/0D-SchqSURoSlR2Mk0Vm12GJSWcy/edit?usp=sharing

Из всей этой загадочной красоты реальное значение для нас имеет только идентификатор файла (выделен в предыдущей строке жирным шрифтом), который следует преобразовать к виду, пригодному для использования в блоге (в следующей строке он тоже выделен жирным шрифтом):

https://googledrive.com/host/0D-SchqSURoSlR2Mk0Vm12GJSWcy

На этом упражнения с Google Drive можно было считать законченными и переходить к водным процедурам, но остался совсем небольшой этап: вставить в шаблон блога ссылки на загруженные файлы (ведь ради этого и затевался весь сыр–бор).

Первым делом, выберите в боковом меню вашего блога позицию «Шаблон». После этого очень многие начинающие (а зачастую и продолжающие) блогеры сразу же, смело и решительно заходят в святая святых, нажимая на кнопку «Изменить HTML». Наш путь, по большому счёту, лежит туда же, но сначала предпримем простой и необременительный шаг для обеспечения собственной безопасности — нужно сделать резервную копию шаблона, для чего и предусмотрена кнопка «Резервное копирование и восстановление» на той же странице.

Последуйте мудрому совету разработчиков платформы Blogger — «загрузите шаблон полностью», как предлагает надпись на кнопке диалогового окна и, если вдруг какие–нибудь ваши камлания над блогом приведут к фатальному перекосу в его работоспособности, вам не придётся в отчаянии рвать на себе пучками волосы, стеная от душевной боли по невосполнимой утрате и физической боли, неизбежно сопровождающей столь варварский способ эпиляции.

Теперь, если вы сохранили шаблон вашего блога, можно заходить в режим «Изменить HTML» и вставить в любое место шаблона между тегами <head> и </head> строки, сконструированные вами на предыдущем этапе, следя за тем, чтобы они не попали внутрь тела какого–либо условного выражения (я это делаю сразу после <title> и </title>):

<title><data:blog.pageTitle/></title>
<script language='JavaScript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js'/>
    
<!-- jquery.highlight.js и jquery.highlight.css -->
<script language='JavaScript' src='http://googledrive.com/host/0B-SczaUpoUUY5SlkhqVm12GJS2g'/>
<link type="text/css" rel="stylesheet" media="all" href="http://googledrive.com/host/0B-SchqVm12GJT2pYaUtJd2UydlU" /> 

Для того, чтобы скрипт заработал, то есть, начал искриться и переливаться своими причудливыми красками, требуется:

  • подключить библиотеку jquery.js (или её уплотнённый вариант jquery.min.js — строка №2 в верхней врезке кода),
  • вставить туда же (между тегами <head> и </head>) ещё один фрагмент кода:
<script language='JavaScript'>
 $(document).ready(function(){
  $('pre.code').highlight({source:1, zebra:1, indent:'space', list:'ol',attribute: 'data-language'});
 });
</script>

Теперь осталось поместить код между тегами <pre class="code"> и </pre> — обязательно нужно указать имя класса и можно указать название языка, который находится в контейнере (допускаются варианты html, js, php, css и sql):

<pre class="code" lang="html"> <p>Привет, мир!</p> </pre>

Как наверняка уже догадался мой проницательный читатель, все примеры отображены уже с помощью плагина подсветки синтаксиса JQuery Sintax Highlight, то есть поставленная в начале статьи задача выполнена. Но в заключение должен сделать несколько замечаний. Во–первых, в первом контейнере указаны произвольные идентификаторы на файлы скрипта и таблицы стилей: вам нужно будет сформировать и свои собственные на Google Drive, поскольку эти — не рабочие.

Во–вторых, перед вставкой в контейнер HTML–кода необходимо предварительно преобразовать символы < и > в HTML–тегах на &lt; и &gt;, соответственно. Для этих целей удобно использовать онлайн перекодировщики, например, этот. В–третьих, кол, приведенный во втором контейнере ($(document).ready(function()…) тоже можно поместить в отдельный файл, загрузить этот файл на Google Drive, сформировать ссылку по изложенному в этой статье алгоритму и включить в заголовок документа в виде <script language='JavaScript' src='http://googledrive.com/host/[идентификатор файла]'/>.

пятница, 11 апреля 2014 г.

Начинаю начинать

Встречают, как говорится, по одёжке, а «одёжка» моего сайта, над которой я долго и старательно корпел, по прошествии бурных лет перестала ласкать мой взор (скриншот бывшей стартовой страницы приведен выше). Другими словами, дизайн придётся переделать. «Однозначно» © В.В.Жириновский.

Тусклые оттенки и неуёмная тяга к градиентам, конечно же, была навеяна вечной дымкой – то ли от невероятно жаркого воздуха, то ли из–за пылеобразного песка поднимающегося при малейшем ветре и долго висящего в воздухе, вызывая «скржет зубовный». Отдохнувший от пустынных пейзажей за пару лет глаз, при новом обследовании дизайна решительно отказался от унылости и было принято решение несколько откорректировать гамму: заменить фон, уйти от грязноватых жёлто–голубых градиентов, слегка перекомпоновать страницу. Впрочем, полностью отказаться от градиентов не получилось и в центральной колонке всё–таки остался бело–жёлтый представитель. На всякий случай, так сказать.

Перво–наперво, предстоит изменить кодировку сайта: четыре года тому назад было совсем нестыдно делать сайт в кодировке CP-1251, а теперь — всё, что не UTF-8 считается чуть ли не признаком дурного тона. Это тенденция понятна, разумна и приемлема, поэтому придётся ей следовать.

Была мысль перенести весь сайт на какой–нибудь популярный движок CMS, например, Joomla, но под каждый раздел сайта в своё время были написаны уникальные скрипты и отказываться от них я не намерен. А вот их «перековка» под неродную систему может вылиться в несоизмеримые трудовые затраты. Тем более, что я настолько комфортно чувствую себя в компании библиотек XTemplate и DBSimple, что буду сильно печалиться и тосковать, если Джумла их не примет в своё лоно.

Ещё нужно будет «вычистить» из PHP–скриптов весь текст, который должен выводиться в браузер. Идеальным является решение с использованием функционала GetText, но затеваться на моноязычном сайте с системой, предназначенной для многоязычных, вряд ли разумно. Гораздо проще завести набор .INI файлов для определения всех требуемых значений. Так и сделаю.

Про систему комментирования статей я уже писа́л — решение почти найдено и его остаётся только воплотить. «Почти» — потому, что нужно дополнительно определиться с системой подключаемых комментариев: например, по Хабрахабру гораздо предпочтительнее (по сравнению с Disqus) смотрится Cackle, а ещё хвалят HyperComments (хотя в бесплатной версии очень скромная функциональность).

Продолжаются раздумья насчёт целесообразности изменения библиотеки для работы с миниатюрами и изображениями реального размера. В первой версии сайта используется Highslide на «чистом» Javascript и «весом» около 275К, но в новой редакции «Заливной рыбы» интенсивно применяется надстройка JQuery (ну, очень мне нравится!), и логично было бы использовать соответствующую библиотеку. Выбор пал на PicBox на JQuery, которая имеет размер около 30К, правда, требует вспомогательную библиотеку JQueryUI (ещё 60К в сжатом виде).

И это — только то, что лежит на поверхности! Хочется надеяться, что пока ещё невидимых подводных камней будет не слишком много. Вам тоже интересно? Тогда, «следите за рекламой»!

четверг, 10 апреля 2014 г.

Сдувая пыль со старых страниц…

Случилось мне ранней весной 2010 года войти в состав рабочей группы, стартовавшей пилотный коммерческий проект в Объединённых Арабских Эмиратах. Проект просуществовал два с половиной года и был закрыт, поскольку не продемонстрировал ожидаемой экономической эффективности: обычная ситуация при недостаточно тщательной проработке предпосылок и игнорировании местных реалий (продвигавшееся на ближневосточный рынок оборудование оказалось, в конечном итоге, невостребованным). Работа велась вахтовым методом, так что каждые полтора месяца мне приходилось около двух недель проводить на бескрайних берегах Персидского залива.

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

Даже не могу объяснить причину, по которой увиденное так меня «зацепило», но с тех пор я начал отдавать своё свободное время (в разумных пределах, конечно) изучению рыб, рыботорговли, рыболовли и рыбоедению. Так, постепенно начал формироваться некий массив знаний, посвящённый всему, что живёт под, над и рядом с водой Заливов — и Персидского, и Оманского. Вскоре этот массив перестал умещаться в отдельных хранилищах и стал настоятельно требовать оформления в какую–либо логическую структуру, что, собственно, и привело к созданию сайта с несколько провокационным названием «Заливная рыба».

И, ведь, этот сайт был уже практически готов около трёх лет тому назад, но искусил меня нечистый идеей «прикрутить» к нему систему комментирования статей, будь она неладна…

На первый взгляд, в этой задаче нет ничего сложного, но я замахнулся на «эпохальное» решение: уйти от собственной регистрации посетителей и полностью переложить ответственность за всякие там пароли и логины на третьи сервисы. Без регистрации, как вы понимаете, никак нельзя — свободная, бесконтрольная система комментариев является идеологическим нонсенсом, поскольку создаёт сверхэффективную питательную среду для безграничного спама.

И работа закипела, буль–булькая от вдохновения и энтузиазма! Были изучены протоколы OpenID и OAuth (более популярно о том же — здесь и здесь, соответственно), собрал API от трёх десятков доверенных сервисов, разработал идеологию полномочий для групп пользователей (даже с расчётом на то, что разграничение доступа со временем не ограничится только комментариями), и начался сладостный этап ваяния скриптов.

Но появились новые срочные проекты (люблю, знаете ли, тихим осенним, летним, зимним или весенним вечером посмаковать волшебный напиток под дольку грейпфрута, а это сто́ит денег, которые нужно зарабатывать), и сайт про рыбу отодвинулся на второй план. Вскоре у меня возникла новое увлечение: затеял стройку загородного дома — нетривиальная инженерная задача, требующая интенсивного напряжения большинства мозговых извилин, и сайт про рыбу отодвинулся на третий план, а через год вообще был заархивирован и уложен на диск для резервного копирования.

Я уже писа́л, что не знаю, почему начал работу над этим сайтом более трёх лет тому назад? Так вот: теперь я не знаю почему я его достал из закромов и решил реанимировать, но в существенно изменённом виде. Наверное, сыграло свою роль прозрение: нужно отказаться от собственной системы комментариев и взять сторонний сервис — на других проектах я успешно использую DISQUS, который пока успешно покрывает все потребности в комментировании статей. То есть, больше не требуется система идентификации пользователей и можно возвратиться к тому светлому и беззаботному периоду в создании сайта, когда он был юн, чист и непорочен и трепетно ждал грядущей публикации.

Тем не менее, не всё так безоблачно и просто: за прошедшие несколько лет изменились мои представление и концепции сайтостроительства, начиная от дизайна и заканчивая внутренней логикой скриптов. В общем, решил я провести кардинальную ревизию «Заливной рыбе», хотя некоторыми решениями почте четырёхлетней давности горжусь до сих пор.

Кроме того, за последние пару лет я ещё приобрёл привычку не просто документировать свою работу, а публиковать дневники в Интернете — наверное, навеяно новой традицией в кинематографической среде снимать фильмы о фильмах. Так что, принимайте сайт о сайте, вернее, блог о сайте — начинаю ремонт, переделку, модернизацию, ревизию, перепрограммирование, перестройку… А я, тем временем, достаю с антресолей тёмно–коричневую папку, развязываю тряпичные тесёмки и начинаю вынимать из её недр слежавшиеся листики, внимательно из рассматривая, сортируя и, при необходимости, переписывая кое–что или всё по–новому.