blok
Активность аудитории
Немного статистики.
В среднем на сайта в месяц бывает примерно 90 тысяч человек. Каждый месяц это число может быть меньше или больше. Например, в июне было 108 тысяч, а в августе — 77. Я недавно перелил большинство юзерпиков пользователей на «Яндекс.Фотки» и, делая скидку на людей с одинаковыми юзерпиками и именами (у меня для двух одинаковых имён сгенерируется один юзерпик), активная аудитория сайта порядка 1700 человек.
То есть более чем за 10 лет существования сайта (правда комментарии на сайте появились сильно позже) его посетила толпень народу, но комментрировали всего несколько тысяч. Похожая ситуация, судя по всему, у Экслера на его персональном блоге, в день его сайт посещает столько же народу, как меня за месяц, а комментариев в блоге — только несколько десятков к каждой записи.
Мне бы хотелось, чтобы читатели более активно высказывались, мне сейчас интереснее обсуждать мои мысли с читателями.
Причин низкой активности я вижу две:
Надо думать в сторону почты. Проблема с почтой, что её надо
Увы и подтверждение подлинности через письмо
Идея, которую я сейчас обдумываю такова: пользователю для первого подтверждения адреса почты (что будет доступно только для пользователей, которые авторизовались через OpenID), предлагается нажать на ссылку, сформированную специально для него.
Пользователь жмёт на ссылку, отсылает пустое письмо на этот адрес, с этого момента считается, что он подтвердил свой адрес. «Гмэйл» устроен таким образом, что на часть после плюса он внимания не обращает и эти письма будут попадать на ящик
Не слишком неудобно получается?
Хочу поменять библиотеку для OpenID на сайте
Хочется поменять библиотеку, которую я использую для OpenID на сайте. Я сейчас использую Janrain OpenID, но она давно не обновлялась, генерирует варнинг и только с костылями и патчами работает с реализацией OpenID в ЖЖ
Посоветуйте
Требования — библиотека должна поддерживать OpenID 1.x и 2.x, SREG, предоставлять возможность хранить данные где я укажу (мне нужно на диске, а не в БД) и не должна использовать экзотические модули.
Юзерпики на «Яндекс.Фотках»
Вчера в Татарстане был выходной, поэтому пока мы ехали на машине за город, я сделал заготовку для хранения юзерпиков на «Яндекс.Фотках», а вечером её доделал. Сейчас все юзерпики в фоне переливаются туда в порядке запроса пользователем в закрытый альбом специального пользователя, которого я завёл.
До этого юзерпики по сложным правилам (с использование адреса почты из SRE OpenID или vCard, favatar, gravatar, pavatar, юзерпиков из «Ярушки» и ЖЖ и т. д.) получались для каждого человека в комментариях и загружались каждый раз с совершенно разношёрстных ресурсов.
Это было плохо по трём причинам.
Есть и четвёртая причина, не знаю насколько она значимая. Некоторые юзерпики (побайтно) повторяются, но так как браузер не знает, что с двух разных УРЛов грузится та же картинка, он грузит её два раза. У меня сейчас не так — я хеширую картинку и по хешу ищу совпадение. Есть вероятность совпадения хеша, но юзерпики
Сейчас юзерпики грузятся только в фоне, то есть
У̶д̶о̶б̶н̶о̶е̶ новое цитирование в блоге
Долго думал как упростить цитирование у себя в блоге, наконец придумал. Ещё остались
Сделал две вещи.
О последнем расскажу немного подробнее. Устроено всё несложно, разберём на примере выделения полужирным.

Чтобы звёздочки скопировались вместе с остальным текстом, они должны в этом тексте присутствовать. И они там есть. Вокруг слова, выделенного жирным находятся звёздочки, написанные нулевым шрифтом и прозрачным цветом. Поэтому в тексте и при выделении их не видно, но в буфер обмена они попадают. Так же устроено сохранение остальной разметки — вырезанных частей ссылок, исходных УРЛов картинок.
Фотки можно добавлять ещё и с picplz.com
Внёс важное изменение в движок сайта — фотографии теперь можно добавлять ещё и с сайта «Пикплз». Вообще я переделал весь механизм добавления сайтов с картинками.
Ничего не должно было сломаться, но если будут баги, пишите. В комментариях к предыдущему посту добавил картинку с сервиса «Пикплз»— вид на Казань из окна офиса «Яндекса» в Казани
Какие ещё сервисы картинок добавить? Два жёстких требования — они должны быть с регистрацией (чтобы мне не постили всякую порнуху) и имели АПИ для получения информации о фото (чтобы я мог выбрать подходящие размеры картинки).
Добавлено позже: теперь ещё и «Фликр» работает.
Галереи теперь в трансляциях
Сделал, как многие просили, фотогалереи в трансляциях RSS. Теперь всюду, куда транслируется мой блог («Ярушка», ЖЖ и т. д.), видно бо́льшую часть фотографий (не более десяти). Галереи там, конечно, условные — с миниатюры ссылка ведёт на полное фото.

Вот, кстати, о чём совершенно забыли создатели современной версий HTML — это форматирование HTML там, где всё плохо с CSS. В читалках RSS (тут CSS режется из соображений безопасности) и почтовых клиентах (те же соображения, плюс примитивные движки в некоторых приложениях). Я, пока отлаживал трансляции, убедился, что единственный способ всё отформатировать как надо — использовать таблицы и винтажные 0.gif. Но чем дальше, тем меньше можно сделать атрибутами тегов, да ещё и в условиях, когда лента встроена в документ, где уже есть стили (например
Конечно это правильно, разделение данных и представления, но HTML5 не предлагает взамен безопасного внедрения чужого контента в изолированном окружении, что полностью решило бы проблему. Есть специальный режим у IFRAME, но фреймы — это совсем не то, они не ведут себя как часть страницы, скорее как окошко в другой документ. Полосы прокрутки, развыв выделения текста и так далее. Всё не то.
JS CSS в одном файле у меня на сайте
Я
Особых трудностей не встретил, только убрал все комментарии из файлов с JavaScript руками и добавил удаление BOM из файлов, браузеры
Схема,
Вот ещё тонкость, обязательно нужно добавить новый
AddType */* .cssjsОказалось, что последний «Хром» ни в какую не хочет рендерить CSS с таким типом, пришлось заменить на «text/css,*/*» на «text/css», предыдущий вариант не работал в IE9.
Надо посмотреть как отнесётся к этому второй FF, а пока, если у вас «Хром» или IE9 и показывает неправильно, обновите, пожалуйста, страницу, чтобы она не из кеша взялась, всё должно нормально отрендериться.
Посмотрим «в поле» насколько это стабильно работает.
Черновики у меня в комментариях
Мне тут хочется пару проектов на PHP доделать, а я
В том числе сделал то, что давно просили — черновики в комментариях. Работает только в современных браузерах — IE 8.0+, FF 3.5+, Safari 4.0+, Chrome 4.0+, Opera 10.5+, а так же iOS 2.0+ и Андроид 2.0+. Только такой список, так как сохранение происходит в localStorage.
localStorage — это клиентская база данных «ключ и значение», которые есть сейчас уже во всех распространённых браузерах. Преимущество хранения черновиков именно в ней — черновик сохраняется вне зависимости от того рухнул сервер или нет, ведь localStorage сохраняет данные на диске клиента.
Кстати, я делал библиотеку эмуляции localStorage для IE 6 и 7 (используется behavior userData), но у себя использовать не буду, ни к чему поощрять некрофилию.
Работает всё следующим образом (детально можно посмотреть в исходниках любой страницы с комментариями): когда пользователь делает паузу в наборе комментария, мой JS вызывает localStorage.setItem, где ключём является URL страницы плюс имя поля (у меня их три — имя пользователя, сам комментарий и кому этот комментарий был адресова).
После отправки комментария в теле полученной страницы приходят вызовы localStorage.removeItem, которые удаляют сохранённые значения.
Наконец, если страница была загружена не в результате отправки комментария, вызываются localStorage.getItem, чтобы получить сохранённые значения и подставить их в соответствующие поля.
Код, с использованием JQuery, получился вот такой:
// globalStorage — это для FF 2.0, но я не уверен, что это правда работает
var storage = window.localStorage || window.globalStorage && window.globalStorage[location.hostname] || null;
if (storage) {
var savedraft = function s() {
if (s.hnd) {
clearTimeout(s.hnd);
}
var o = $(this);
s.hnd = setTimeout(function() {
try { // если не хватит места, будет исключение
var prefix = location.pathname + '#';
storage.setItem(prefix + o.attr('name'), o.val());
storage.setItem(prefix + '?', +new Date()); // сохраняю время, возможно в будущем буду подчищать старые черновики
} catch (o) {}
}, 500);
}
// каждый элемент, который надо сохранять, имеет класс draft
$.each($('.draft'), function(_, value) {
var o = $(value),
key = location.pathname + '#' + o.attr('name'),
v = storage.getItem(key);
if (savedsuccessfully) { // внешний флаг, что черновик больше не нужен — всё сохранено на сервере
storage.removeItem(key);
} else if (v !== null) {
o.val(v);
}
o.keypress(savedraft).change(savedraft);
})
}localStorage не резиновое, у разных браузеров значения различаются, но в целом, там около 5МБ на домен, да и диск пользователя забивать жалко. Поэтому я сохраняю время записи, возможно
Перевёл свой сайт на PHP 5.3.4
Решил поднять свои старые проекты на PHP под MacOS, чтобы на ноуте их нормально разрабатывать. В том числе, перетащил свой сайт. У меня движок сплошной эксперимент, так что используются различные тонкие вещи (например, ленивые вычисления при помощи __toString), которые в PHP 5.3 (который у меня на «Маке»)
Мелочи вспоминать не хочется, из того что запомнилось — PHP 5.3 нервно,
С веткой PHP 5.3 я почти не работал, когда эта версия стала появляться в пакетах стабильных версий систем, я уже перешёл на «Пайтон».
Почему я использую «Семажик», чтобы постить в блог
Когда я писал движок своего блога (а я его именно писал, а не взял готовый, мне было интересно попробовать
Я просто реализовал протокол ЖЖ (на деле даже два — Flat и Metaweblog) и несколько лет, не зная горя, писал в блог даже с телефонов, где нет ничего, кроме J2ME.
Так что «выкинь „Семажик“ и пиши через веб» — это совет от незнания, чтобы постить через веб, нужно обеспечить такую возможность, а у меня нет времени и желания этим заниматься, мне просто не интересно.
Так что я просто потратил немного времени и нашёл себе клиент, который меня устраивает — это Phoenix. Он не такой удобный, как «Семажик», но, в целом, неплох.
Добавлено позже: не знаю как так вышло, сран… клиент, который меня устраивает, этот Phoenix удалил мне запись вместе с комментариями.
Лайки (не про собак)
Хочу провести эксперимент — поставил под каждым постом «лайки» с трёх социальных сетей («Вконтакте», «Фейсбук», «Твиттер»), посмотрим что получится, если я их правильно настроил, конечно.
Пока меня смущает, что они очень медленно загружаются.
Добавлено позднее:
Логин через OpenID ЖЖ
Ура, появился патч, который исправляет проблему библиотеки OpenID JanRain, которую я использую, с ЖЖ.
Теперь, у меня должно логинить через OpenID и пользователей ЖЖ.
Сменил дизайн сайта
Одиннадцатого ноября 2000 года я запустил свой сайт на бесплатном хостинге chat.ru, дизайн его не сохранился, но это к лучшему. В то время я занимался довольно прогрессивным движком чата (обновление без перезагрузки, оптимизация под узкий канал тогдашних
Он предложил мне хостить сайт у себя. Под сайт потребовался более приличный дизайн и мне его сделала дизайнер Наталия Морозова. Сейчас тот дизайн не выглядит дизайном, но тогда большинство сайтов выглядело похоже.

В октябре блог полностью замещает сайт и становится основным его содержимым. В августе 2004 года я делаю дизайн, который просуществовал более шести лет. Столько же просуществовала и вёрстка, с небольшими изменениями. Месяц назад моему сайту исполнилось 10 лет. Я планировал к этому времени выложить новый дизайн сайта Теперь всё готово. Старые материалы я пока не сконвертировал, но буду работать над этим в будущем. Возможно, Читать эту историю полностью


ЖЖ, OpenID и мой блог
Good news, everyone!
Я взял примеры, которые идут с библиотекой OpenID от JanRain, которую я использую. И оказалось, что OpenID ЖЖ в примерах работает нормально. Это означает, что это я с библиотекой делаю Оказалось, что не все тесты работают нормально. Значит, надо искать ошибку в библиотеке. Ох.
Добавлено позднее: а пока написал в JanRain и ЖЖ по письму с полным описанием бага.
Сконвертировал старые комментарии
У меня тут набралось уже порядочно что можно сконвертировать из старых материалов в этот блог — ЖЖ и заметки первой версии сайта. Мне
Вроде как прошло успешно, теперь у старых заметок есть комментарии.
P.S. Следующим буду конвертировать ЖЖ
Анонимные комментарии включены

Ну и как финальный аккорд изменений этих выходных, я включил анонимные комментарии. Заодно переписал всю написанную вчера часть интеграции с OpenID2, стало логичнее и на один редирект меньше.
Пока решил не делать цвет анонимных комментариев
Естественно, для анонимов недоступен
Добавлено утром: ну вот, спам уже попёр. Придётся делать резалку.
Анонимные комментарии
У меня есть идея
| ш͂к̵̗̤̩͎͇͍̂̒ͦо̺͇͍̯̮̔̑ͯ̈́̂л̱̘̫̗͓̺̟ͮ̚о̼̰̖̦͉̥ͮ͗̑ͣт̰̼̩̑̄ͫ͛ы̛́ͭ͗ͦ̿̔̚, |
которая неинтересна чуть более, чем полностью, и умеет постить только
Очень жаль, но значительное количество умных людей, видимо, не имеет OpenID аккаунта. Читателей у меня около
Впрочем, у меня ощущение, что этого недостаточно. Я подумываю о том, чтобы разрешить вводить в поле для OpenID любой URL. Если OpenID на этом URL не обнаруживается, то комментарий будет считаться анонимным. А само поле будет подписано
Анонимные комментарии, думаю, надо будет
Обновления на блоге
Как многие уже почуствовали, я начал
Сейчас я изменил алгоритм определения и вывода аватаров, а так же заменил библиотеку OpenID с страшной, как смерть, Simple OpenID на огромную (почти полмегабайта!) PHP OpenID от JanRain.
В частности, это значит, что у меня теперь работает OpenID 2, что даёт возможность, например, авторизовываться пользователя Flickr. Кроме того, должна вернуться возможность логиниться тем
Легко
P.S. Нет, не ок. Лучше пока не комментрировать.
P.P.S. Починил, но пока не работают ответы. Работают.
P.P.P.S. Ещё бы библиотеку для разбора hCard на PHP хорошую. hKit глючит, например, профиль на «Хабре» он не разбирает. А ещё в CSS media query нехватает запроса «это мощный компьютер?».
Идея: кнопка добавления в Google Reader
В комментариях к одному из постов, меня попросили сделать кнопку добавления RSS комментариев в «Google Reader» (если я правильно помню суть просьбы).
Мне эта идея не нравится, потому что я не знаю какое количество моих читателей пользуется «Google Reader», остальным, понятно, эта кнопка ни к чему. Я тут подумал — хорошо было бы ставить эту кнопку тем, что этим сервисом «Гугла» пользуется. Но как узнать кто пользуется, а кто нет?
Сейчас меня осенило (впрочем, скоро это не будет работать в Firefox, когда выйдет версия 3.7). Всё просто — надо найти URL по которому заходит только авторизованный пользователь «Google Reader», причём URL этот должен быть инвариантен пользователю, может это
Далее всё просто — у данной ссылки есть то свойство, значит пользователь недавно логинился в «Google Reader», если нет, не логинился. На основании этого можно ставить или убирать кнопку добавления RSS в этот сервис. Можно ещё выставить куку, чтобы в дальнейшем основываться уже на её наличии (если есть — пользователь пользуется «Google Reader», нет — ничего не значит).
Картинки в комментариях на моём сайте
Я тут сделал на выходных, помимо кучи малозаметных улучшений, ещё одну хорошую (как мне кажется) вещь — картинки в комментариях. Пишу «как мне кажется», а не «однозначно», потому что это мне скучно делать как у всех. Я делаю, либо чтобы провести эксперимент, либо чтобы
Итак, вставляются картинки только из сервиса «Яндекс.Фотки». Инструкция: идёте в любой альбом, тыкаете там в публичную фотку, берёте URL, который получился, указываете его в заметке, отправляете комментарий. Всё.

В это время мой сервер просматривает урлы вашего комментария, находит три первых, похожих на урлы «Яндекс.Фоток» (отсюда ограничение — вставляются так только три первых картинки, остальные будут простыми урлами), идёт с ними в API фоток, берёт из присланного обратно XML урл картинки, выставляет формат «не более 500 пискелей в любую сторону» и вставляет полученное как картинку.
Есть способ обойти ограничение, закрою позже, если
Принимаются советы, например, не много ли это — 500 пикселей, может сделать меньше? Доступные размеры есть на сайте документации API «Яндекс.Фоток».
P.S. Расскажу сразу почему «Яндекс.Фотки», а не любой другой сервис? Причин несколько — наличие API, которое доступно (в нужном мне функционале) без регистрации и авторизации.
Второе — неограниченный размер хранимых изображений на сервисе.
Третье — сервис закроется не раньше, чем закроется «Яндекс», то есть это маловероятное событие.
Четвёртое — кража домена исключается, взлом крайне маловероятен, значит с сервиса мне придут данные, которым я могу доверять. Это тоже важно.
К сожалению, есть недостаток — картинки могут заливать только зарегистрированные пользователи. Но если вы знаете другой сервис, где выполняются все четыре условия, скажите мне, я подключу и его.
P.P.S. Это топик добра, в нём можно тестировать как работает вставка этого добра на страницу.