Логотип Blok

Александр Блок (3.20КиБ)

Как многие наверное знают, движок моего блога называется «Blok». Основные особенности — всё на файлах (никаких баз данных, так интереснее) , никакого интерфейса администрирования через веб, максимальное использование чужих сервисов и RSS как средство оповещения о чём угодно.

У такого замечательного движка до сих пор не было логотипа. Я как-то не озаботился, а сегодня случайно наткнулся на жизнеописание небезызвестного Александра Блока (помните, «ночь, улица, фонарь, аптека…»). Подумал — неплохое лого.

Сейчас придёт Смирнов и скажет, что логотип полная лажа.

10 комментариев

Какие форматы изображений поддерживает Internet Explorer

Цитата из базы знаний Microsoft:

Обозреватель Internet Explorer отображает файлы рисунков с расширениями ART, WMF, EMF, PNG, MOV, XBM, AVI, MPG, GIF, JPG, MPEG и BMP.

MOV, AVI, MPG и MPEG — это, конечно же, не рисунки. Но IE умеет их поддерживать в теге IMG. WMF и EMF — это Windows Media File и Enhanced Metafile, форматы, которые были введены Microsoft ещё в 90x годах. ART — формат графики от America OnLine (похоже не поддерживается с IE7), XBM — текстовый формат графики в X-системах (не поддерживается с IE6SP1).

XBM, кстати, неплохой формат был. Самое смешное, что его можно было внедрять в HTML-код без data URL, в том числе и в Internet Explorer.

Оставить комментарий

Thanks A. Lot

Шутка для умных. Thanks A. Lot.

Лот с родственниками бежит из Содома (71.00КиБ)

9 комментариев

Загрузка изображений в Blok

Проблема с загрузкой изображений через «Semagic» решилась куда проще (напомню, что у меня на сайте нет веб-интерфейса админки, используется API Metaweblog и LJ Flat), чем я расчитывал. Я просто попросил авторов «Семажика» сделать поддержку вставки изображений через data URL.

Мой движок анализирует нет ли во введённых данных тега IMG с data URL, выдёргивает из него данные, кладёт на диск в виде изображения, а обратно отдаёт тег уже с HTTP-ссылкой. Проще некуда.

17 комментариев

MicroSD → Memory Stick

Адаптер TwinMOS для карт памяти Memory Stick Pro Duo с вставленной картой microSD.
MicroSD в MemoryStrick

Нужный для владельцев PSP адаптор появился. Позволяет использовать MicroSD карточки вместо MemoryStick. Удобно, если MicroSD уже есть, не нужно покупать ещё одну для PSP, да и стоят MicroSD чуть дешевле. Правда есть опасения, что будут поддерживаться не более чем 2Гб карточки, так как карты бо́льшего формата называются MicroSD HC.

Оставить комментарий

Cursor CSS

Заношу себе в закладки хорошую статью с сайта QuirksMode, рассказывающую и наглядно показывающую (если поводить мышкой по названиям свойств) какие значения CSS-свойства «cursor» поддерживаются различным браузерами.

В статье есть смешное место — написано, что значение «url» (помечено как «Microsoft», т. е. собственное свойство IE) не поддерживается браузерами Internet Explorer.

На деле Internet Explorer требует указывать курсоры в форматах .cur или .ani, тогда как в редакции CSS3 (где данное свойство заимствовано и расширено) курсор может быть в любом формате, поддерживаемом браузером (для Gecko это BMP, JPG, CUR, GIF, SVG и XBM), плюс должны быть указаны координаты активной точки (hotspot) курсора.

Оставить комментарий

Google AdSense

Решил подержать на сайте месяц Google AdSense. Для интереса — сколько с этого можно получить прибыли. У кого-нибудь есть советы, рекомендации, истории использования? Поделитесь. Может сразу выкину.

23 комментария

Опыт, который получает наёмный работник

Мне понравился коментарий Носика к небольшой заметке про порядки в «Яндексе»:

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

Подпишусь под каждым словом.

21 комментарий

data URL в IE ★

Пару лет назад я занимался проблемой data URL в Internet Explorer, добился определённых результатов, но то, что получилось, использовать было невозможно. Data URL (иногда его ещё называют «протокол data:») — возможность вставлять ресурсы (графику, CSS, JavaScript и так далее) в HTML код.

Выглядит это примерно так:

<img
src="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
hhx4dbgYKAAA7" />

В Data URL указывает тип содержимого и способ его кодирования. Способа кодирования два — base64 (именно он и указан в примере), увеличивающий содержимое на треть и URL encoding (в этом случае способ кодирования не указывается) — привычный многим способ кодирования при помощи %xx, в лучшем случае вообще не увеличивает размер содержимого, в худшем — увеличивает в три раза.

Кстати, в настоящее время IE8b1 поддерживает data URL, но, увы, длиной не более 32Кб.

Теперь амбула.

Вчера ночью мне пришла в голову идея как можно попытаться корректно совместить data URL и включение картинок через протокол mhtml. То, что у меня не получилось два года назад, получилось сейчас.

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

bolk_data_uri_header();

bolk_data_uri('myjpeg.jpg');
bolk_data_uri('ourpng.png', 'border: 2px dotted red');

Код самой библиотеки:

function bolk_data_uri_header()
{
    echo "<!--\n"
        ."Content-Type: multipart/related; boundary=\"=_NextPart_01C6A9B1.539AB070\"\n\n"
        ."--=_NextPart_01C6A9B1.539AB070\n"
        ."Content-Transfer-Encoding: base64\n"
        ."Content-Type: text/html\n"
        ."-->\n\n";

}

function bolk_data_uri($file, $style = '')
{
    if (!( file_exists($file) && ($data = @getimagesize($file)) )) return false;

    $name = uniqid('', true);

    if ($style <> '') $style = ' style="'.htmlspecialchars($style).'"';

    echo "<!--\n"
        ."--=_NextPart_01C6A9B1.539AB070\n"
        ."Content-Location: {$name}\n"
        ."Content-Transfer-Encoding: base64\n"
        ."Content-Type: {$data['mime']}; -->\n"
        ."<object data='data:{$data['mime']};base64,\n\n";

    echo base64_encode(file_get_contents($file));

    echo "' {$data[3]}{$style} type='\n{$data['mime']}'><img "
        ."src='mhtml:http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}!{$name}' {$data[3]}{$style} /></object>\n\n"
        ."<!--\n"
        ."--=_NextPart_01C6A9B1.539AB070-->";

    return true;
}

У данного метода, по сравнению с обычными data URL есть масса ограничений: необходим специальный заголовок в начале файла, т. е. этот метод невозможно использовать на чужих сайтах, этим методом нельзя воспользоваться (по крайней мере не в таком виде) для включения ресурсов внутрь CSS или JavaScript. В принципе, тут есть достаточно большое поле для экспериментов, возможно все или некоторые из проблем можно решить.

В разделе «храню» есть пример, который можно потестировать на имеющихся у вас браузерах. Уже протестировано на Opera 9.25 и 9.50b, FF 2.0.0.13 и 4 (Minefield), Safari 3.1 (Safari под iPhone — тоже), Internet Explorer 6.0SP2 и 7.0, Sony PSP browser, Opera mini, Netscape Navigator 9.0.0.5.

30 комментариев

PHP 5.3.0 jumps to Basic

В PHP 5.3.0 ввели оператор «jump»: «Added „jump label“ operator (limited „goto“). (Dmitry, Sara)»

Полюбуйтесь:

$n = 1;

L1:
if ($n > 3) jump L2;
echo "$n: okn";
$n++;

jump L1;

L2:

Здравствуй, непонятный запутанный код! Ребят, сделайте «my» как в Perl, а? Куда ведь более полезный функционал.

25 комментариев

CAPTCHA: Я, не робот.

CAPTCHA на LiveInternet (17.30КиБ)

Форма регистрации на сервисе «LiveInternet». Написать простую фразу «Например Иванов» с ошибкой на сервисе такого масштаба, это надо постараться.

10 комментариев

Spesta 2.12 a+b

Обновление (файл называется так же) системы стастистики «Spesta 2 a+b». С предыдщего апдейта изменилось следующее:

  • сортировка и подсчёт процентов о отчёте переделаны, теперь они работают более адекватно (сортируют и считают статистику целиком)
  • собственные настройки (например, пароль) можно вынести в файл config-personal.inc.php, формат такой же как в config.inc.php. Т. е. при заливке дистрибутива ваш пароль на админку перезаписан не будет
  • внутри отчётов, в фильтрах можно использовать расширенную грамматику, об этом ниже
    Кто не в курсе, что это за система, прочитайте у меня на сайте соответствующую статью.

Теперь о расширенной граматике. Включается она только тогда, когда в фильтре используется звёздочка («*»). «mozilla*» означает «начинается с mozilla» (регистр значения не играет), «mozilla*windows*» — строка содержит сначала «mozilla», потом «windows». Т. е. «*» — это «любые символы».

Если нужно совпадение и чувствительность к регистру, то можно искать так: «*MSIE*!» — найдёт только строки, где содержится «MSIE» именно в этом регистре.

Если нужно инвертирование поиска, то можно писать так: «!*MSIE*» — найдёт строки, в которых не содержится «MSIE» в любом регистре, «!*MSIE*!» — найдёт строки, где не содержится «MSIE» именно в этом регистре.

25 комментариев

Что такое SEO

Совершенно раскошное определение SEO:

SEO — это «поисковая оптимизация». Это как сделать так, чтобы какой-нибудь говно-блог об обмене утилизированных б/у японских шин на запчасти к пластиковым окнам занимал топ-позиции в тындыксе-гугле и т. п.

то есть, вы создаете текст, состоящий из фраз «ебут пятиклассницу», маркетинг, заработать на блоге, «скачать», маркетинг, заработать на блоге, «супер-анал», маркетинг, заработать на блоге, пластиковые окна, маркетинг, заработать на блоге, японские шины, маркетинг, заработать на блоге, развратные учительницы сосут прямо на перемене, маркетинг, заработать на блоге, скачать Сопроно-6, маркетинг, заработать на блоге, голые участницы Дома-2, маркетинг, заработать на блоге, в переводе Гоблина и т. п. и засираете им всё, что только можно. Все дела.

C СЕО произошло то же, что с языком программирования PHP в своё время — нужная отрасль из-за низкого порога вхождения превратилась в помойку. Сейчас «программирую на PHP», «занимаюсь поисковой оптимизацией» и «занимаюсь уринотерапией» звучит почти неразличимо.

9 комментариев

Яндекс меня шантажирует!

BOLK, 02.04.2008 16:38:47: Ура! Яндекс проиндексировал мой сайт

BOLK, 16:38:49: дело за тиц

Дмитрий Смирнов, 16:39:28: это потому, что мы тебя хотим в разработчики

BOLK, 16:39:41: хотели — уже бы и тиц перевели

Дмитрий Смирнов, 16:39:49: а ты пока не согласился

Некоторое время назад купил новый домен (для новеньких — мой сайт много лет располагался по адресу bolk.exler.ru), всё ждал когда «Яндекс» его проиндексирует, теперь жду когда перенесётся тИЦ.

10 комментариев

BLOK: MetaWeblog API, FotoBuilder API

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

Протокол достаточно простой, но описан очень плохо. Как бы то ни было, я его реализовал. Один недостаток — загрузка изображений. В протоколе flat такой возможности нет. Почесав репку, я посмотрел на обилие описанный протоколов и выбрал очень простой MetaWeblog. Протокол излишне многословен (даже по меркам XML, как мне кажется), но зато реализуется за час.

Наконец-то удалось погонять платный клиент BlogJet, я думал, что он очень удобен, оказалось, это совсем не так. Недружелюбный к пользователю Semagic куда удобнее и падает крайне редко. Кстати, нашёл глюк в BlogJet — ошибки на русском он показывает только в кодировке CP-1251, сколько не меняй encoding в XML и заголовке.

Теперь ещё хочу посмотреть Windows Live Writer, но через штатный инсталлятор мне поставить его не удаётся, грешу на прокси. В общем, остаюсь пока на Semagic, но с загрузкой изображений надо что-то делать. Вообще говоря, в LiveJournal для этого используется протокол FotoBuilder, придётся реализовывать его.

Попытался сделать это наскоком, не удалось. Видимо (это обычно для документации LiveJournal) пропустили что-то важное, без чего всё не работает. Или я это важное никак не могу найти. После подключения клиентская программа утверждает, что challenge не найден. Буду бороться.

21 комментарий

С первым апреля всех!

Друзья!

Если сегодня прочитаете, что Microsoft выпускает новую версию CSS.2012, а друг говорит вам, что принёс девятую серию «Lost», вспомните, что сегодня первое апреля!

Мики Болкус (46.71КиБ)

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

Коллаж принадлежит перу и плашету Нияза Сайфутдинова.

2 комментария

Яндекс раздаёт антивирус Касперского бесплатно

Яндекс совершенно бесплатно предоставляет вам лицензию на специальную версию антивирусной защиты Касперского. Программа содержит ключ для работы в течение полугода. Потом вы сможете получить и установить новый ключ — также бесплатно.

Отличная новость — «Яндекс» раздаёт «Касперского» бесплатно.

13 комментариев

Вышел публичный билд «Оперы», проходящий ACID3

Пару дней назад «Опера» прошла тест ACID3, но публичного билда, подтверждающего это событие, не было. Сегодня стал доступен специальный билд, который демонстрирует прохождение теста (есть версии для Windows и Linux). Я себе его скачал, посмотрел, тест действительно проходит, но сайты открывает ужасно, видимо, это специальная ветка разработки, патчи из которой будут включены в «Оперу» позднее. Так же эта версия действительно поддерживает web fonts и цвета в виде rgba/hsla.

Кстати, user-agent у этого билда выглядит вот так: «Opera/9.0 (WinGogi; U; en)».

Сегодня же вышел еженедельный снапшот «Оперы», где большое внимание уделено улучшению производительности. Удалось достигнуть ускорения от 2-х до 10 раз на разных тестах.

9 комментариев

Mac OS X: неуловимый Джо

Как известно, пользователи компьютеров «Эпл» гордятся тем, что для него существует очень малое количество вирусов и известно небольшое количество уявзвимостей. Мне эта ситуация всегда напоминала песню про Неуловимого Джо, которого никто не ловит, потому что он никому не нужен.

Помнится, аналогичная ситуация была с браузером FireFox — он был неязвим, пока не стал популярен, как только «Гугл» вложился в рекламу, счётчик найденный уязвимостей завертелся с тахионной скоростью.

Вот и на ежегодном турнире PWN2OWN, уже два года подряд быстрее всех из тройки Windows Vista, Mac OS X и Ubuntu Linux взламывают именно Mac OS X:

Как и в прошлом году, первой и единственной жертвой стала операционная система Mac OS X. В этом году, Чарли Миллер, главный аналитик Independent Security Evaluators, скомпрометировал Apple MacBook с Mac OS X 10.5.2 «Leopard» меньше чем за минуту, воспользовавшись неизвестной ранее ошибкой в браузере Safari. Найденная уязвимость, по мнению специалистов, очень серьезная. Она позволяет злоумышленнику удаленно выполнить произвольный код, что и было продемонстрировано на соревновании.

18 комментариев

CSS IE: -ms-interpolation-mode

У Internet Explorer с 7-й версии, оказывается, есть очень довольно любопытное CSS-свойство: «-ms-interpolation-mode», которое позволяет устанавливать режим масштабирования (интерполяции) для изображений.

У свойства два значения — «nearest-neighbor» (менее качественный режим по ближайшему соседнему) и «bicubic» (более качественный бикубический метод). Кстати, обратите внимание, что новое свойство начинается с префикса, как это рекомендует делать W3C. Пример использования:

img.highqual { -ms-interpolation-mode:bicubic }
img.nearestn { -ms-interpolation-mode:nearest-neighbor }

По-умолчанию, IE масштабирует изображения по ближайшему соседнему, если масштаб страницы 100% и бикубическим методом в остальных случаях.

7 комментариев