программирование
Opera File I/O
Вышел билд «Оперы» поддерживающий File I/O (файловый доступ
Тем не менее на «Хабре»
Издревле повелось на Руси, что
вэб-приложения имели очень ограниченный доступ к ресурсам дисковым компьютеров юзерских, что есть оправдано, с точки зрения безопасности. Это существенно ограничивало возможности Оперовских виджетов, которые и являются этими самымивэб-приложениями. Но времена меняются, и с помощью системы File I/O теперь есть возможность безопасно работать с файлами на клиентском компе…
На Руси издревле имеется Scripting.FileSystemObject, доступный из IE, LiveConnect (позволяющий вызывать
Три решения для доступа к файлам! Единственные, кто не имели интерфейсов для доступа к файловой системе — это «Опера» и «Сафари».
Надёжные CSS-хаки для браузеров
Итак, у нас, оказывается, есть надёжные
<style type="text/css">
/* только для Opera 9.50 и выше */
noindex:-o-prefocus, tag { display: none; }
/* только для FireFox */
noindex:-moz-anylink, tag { display: none; }
/* только для FireFox /all/1623 */
@-moz-document url-prefix()
{
tag { display: none }
}
/* только для Safari */
@media screen and (-webkit-min-device-pixel-ratio:0){
tag { display: none }
}
xxx\:*, tag { display: none } /* только для IE */
</style>Скруглённые углы на чистом CSS для Opera 9.5, FF 1.5, IE 5, Konqueror и Safari3
Всё, надоело. Никто не использует VML и SVG? Почему все делают скруглённые углы только кучей картинок или через
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- подключаем пространство имён VML для IE -->
<!--[if vml]>
<xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v"/>
<style> v\:* { behavior: url(#default#VML); display: block; } </style>
<![endif]-->
<title>Скруглённые углы</title>
<style type="text/css">
* { padding: 0; margin: 0; }
body { background: white; color: black; font: 12px Arial, sans-serif; }
.rounded { margin: 100px auto; text-align: center; width: 50%; position: relative; padding: 10px; }
/*
Нижеприведённые background-image работает только в Opera 9.50 и представляет собой закодированный алгоритомом base64
код SVG-картинки:
<svg xmlns="http://www.w3.org/2000/svg">
<mask id="mask">
<rect width="100%" height="100%" rx="10" ry="10" fill="white" stroke="black" stroke-width="2"/>
</mask>
<rect stroke="black" fill="white" stroke-width="4" mask="url(#mask)" width="100%" height="100%" rx="10" ry="10"/>
</svg>
В этой картинке подготавливается бакграунд со скруглёнными углами
*/
noindex:-o-prefocus, .rounded-svg {
background-image: url(data:image/svg+xml;base64,cюда нужно положить base64-кодированную картинку);
border: none !important;
}
/* для разных браузеров указываем rounded corner через CSS3-свойство */
.rounded-css3 {
border: 1px solid black;
-moz-border-radius: 1em; /* mozilla 1.5 */
-webkit-border-radius: 1em; /* safari 3 */
-khtml-border-radius: 1em; /* Konqueror */
border-radius: 1em; /* CSS3 */
}
</style>
</head>
<body >
<!--[if vml]><v:roundrect class="rounded" strokecolor="black" strokeweight="1px" arcsize="0.25" ><![endif]-->
<!--[if !vml]>--><div class="rounded rounded-css3 rounded-svg"><!--<![endif]-->
<p>Вот эти ребята!</p>
<!--[if !vml]>--></div><!--<![endif]-->
<!--[if vml]></v:roundrect><![endif]-->
</body></html>В коде есть несколько хаков. В частности, для «Оперы» я использую background, вставленный как
Далее. Для IE включается VML, это, если кто не знает, появившаяся ещё до SVG технология построения векторных изображений. Более мощная, чем SVG, кстати. Весь VML включается через условные комментарии и другие браузеры этого безобразия не видят, в том числе их не увидит и валидатор (хотя ему и без VML тут есть на что поругаться).
Для остальных браузеров используются их префиксное свойство
Селекторы в Mozillaw
Движок Gecko содержит массу интересных селекторов. Вот несколько интересных селекторов, о которых мало кто знает:
For what it’s worth, development versions of Gecko have:
:-moz-broken (which would cover your :missing and :corrupt, which are not exactly easy to tell apart).:-moz-user-disabled (user has turned off all images):-moz-suppressed (images from the server involved are blocked):-moz-loading :-moz-type-unsupported (for <object>s)
Юзерпики на моём сайте
У меня на сайте, в комментариях широко используются юзерпики. Я уже неоднократно писал как я их показываю. Естественно, каждый сервис выдаёт юзерпики своего размера, у меня на сайте принят размер 41×41 пикселей. Ранее я ставил ширину и высоту картинки в 41 пиксель, многие неквадратные картинки искажались. Теперь этого не происходит, благодаря небольшому изменению
.avatar { max-width: 41px; max-heigth; 41px }
.avatar, x\:* { max-width: auto; max-height: auto; zoom: expression(41 / Math.max(this.width, this.height)) }Для всех браузеров, кроме IE выставлены максимальная ширина и высота картинки, в IE используется нестандартное свойство zoom, позволяющее масштабировать элемент.
WDDX в PHP и русские символы
У меня ощущение, что никто никогда не пробовал гонять национальные символы через WDDX из PHP в другие языки и обратно. Задача: получить от демона Perl сериализованные данные и десериализовать их. Был выбран формат WDDX, вроде как хорошо описанный стандарт и всё такое. JSON сначала не подошёл, модуль в Perl
Всё было хорошо, пока
В общем, оказалось, что
if (!strcmp(atts[i], EL_NAME) && atts[++i] && atts[i][0]) {
char *decoded;
int decoded_len;
decoded = xml_utf8_decode(atts[i], strlen(atts[i]), &decoded_len, "ISO-8859-1");
stack->varname = decoded;
break;
}Соответственно, когда PHP получает из Perl нормальный
В итоге, мы перешли на JSON. Всем хорошего дня.
Кодирование национальных символов в Cyrus IMAP
На днях пришлось столкнуться с кодированием русских символов в папках сервера Cyrus IMAP. Выглядит это примерно так:
folder.BC8EPQQ0BDUEOgRBBDAALQRBBDUEOgRABDUEQg-
Мне повезло, я догадался, что это модифицированная
// Cyrus IMAP modified UTF-7 decode
function decodeCyrus($str)
{
return preg_replace_callback('!&([a-z0-9+/=,]*)-!is', 'decodeCyrusHelper', $str);
}
function decodeCyrusHelper($m)
{
if ($m[1] == '') return '&';
return iconv('ucs-2be', 'utf-8', str_replace(',', '/', base64_decode($m[1])));
}Способ использования:
<?php
$decoded = decodeCyrus('folder.BC8EPQQ0BDUEOgRBBDAALQRBBDUEOgRABDUEQg-');PHP cURL и проблема HTTP/HTTPS запросов в nginx и lighttpd
У cURL есть неприятная, в некоторых случаях, особенность: при установке поля CURLOPT_POSTFIELDS, cURL устанавливает в заголовке «Expect:
Lighttpd выдаёт код ответа 417, а nginx (по крайней мере на HTTPS запросах) даёт паузу примерно в две секунды. Решение простое: убрать «Expect» из заголовков. В PHP это делается вот так:
curl_set_opt($connection, CURLOPT_HTTPHEADER, array('Expect:'));На поиск этого решения ушло полдня работы, так как мы не знали что именно вызывает проблему.
PHP SOAP
В режиме
Есть ещё nuSOAP (написанный на чистом PHP), но этот монстр занимает более полуметра. В общем, выкинул всё, взял cURL и SimpleXML. Сам запрос — 40 строк, ещё примерно столько же — разбор ответа через SimpleXML, меньше сотни строк. Так и живём.
CSS3 и FireFox3, IE — «копейка» среди браузеров
FireFox3 хорошеет на глазах. Не знаю насколько он хорош как средство для сёрфинга (выйдет — обязательно скачаю и посмотрю), но как браузер он, безусловно, становится всё лучше. На днях FireFox 3.1 стал проходить тесты селекторов CSS3. Хорошие новости, теперь все три основных браузера — Opera, Safari и FireFox поддерживают CSS3.
Как вы думаете, на фоне Mini Cooper «копейка» является автомобилем? С этого дня я называю «Оперу», FireFox и «Сафари» «основными браузерами», поскольку именно они и являются браузерами, а IE — «альтернативным», поскольку это политкорректное название для «куска говна с окошками», да и понимание новых стандартов у него «альтернативное». При этом я не умаляю заслуг специалистов из компании Microsoft, создавших IE6 — шедевр для тех лет, и положивших начало многим современным стандартам. Спасибо, ребята, надеюсь IE9 будет достоин тех же похвал.
Стандарты кодирования PHP
Друзья, ай нид хепл.
Какие документы по стандартам кодирования PHP (кроме PEAR) вы знаете?
Аватары на сайте, OpenID, Pavatar.
Многие знают, что у меня на сайте поддерживается OpenID — удобная система, позволяющая использовать логин одного сайта на других сайтах без дополнительно регистрации. Система не новая, были и более ранние аналоги, мы с другими разработчиками популярного некогда движка блогов «Регистр» задумывались о такой, но так и не сделали.
Вкратце, предположим вы зарегистрировались на любой сайте, поддерживающем OpenID, к примеру, в той же «Яруше». Чтобы оставить комментарий у меня, вам достаточно написать адреса вашей страницы на ya.ru. Т. е. ваш адрес
Просто адреса для идентификации — это скучно, на помощь приходят аватары, маленькие картинки, идентифицирующие пользователя. В комментариях у меня теперь поддерживаются: аватары ЖЖ, аватары Яруши, Gravatar и Pavatar.
Т. е. если вы используете адрес из ЖЖ или «Яруши», то мой сайт возьмёт аватару оттуда. Gravatar и Pavatar — это два решения проблемы единых аватаров на всех сайтах. Первый — централизованный, для идентификации используется ваш адрес
Завести свой pavatar («Personal Avatar»), если у вас есть блог, очень просто. Самый простой способ — положить в корень сайта картинку pavatar.png. Картинка должна быть размером 80x80 пикселей, не более 4Кб. Есть два способа указать альтернативное расположение —
<link rel="pavatar" href="URL">или
<link rel="pavatar" href="URL" />Pavatar должен быть изображением в форматах JPEG, GIF или PNG.
Кривой веб-клиент от Motorola
Заинтересовало изменение в новой (0.7.0) версии nginx (это довольно хороший
Вопрос: А в каком случае клиент может послать несколько заголовков Host?
Ответ: В случае кривого клиента. Такие, к сожалению, есть — цитата
из баг-репорта: Так вот,
Java-машина на ряде аппаратов Motorola (например, K1) имеет свойство указывать в заголовкеHTTP-запроса два поля Host. Причём, один из этих заголовков корректный, а второй содержит значение localhost.
Гадский IE8 в strict-режиме
Дома на ноуте у меня стоит Internet Explorer 8.0beta1. Принёс домой наш новый сайт, посмотреть как он будет смотреться под этим браузером. Гадский, гадский «Майкрософт»! Сайт (естественно) свёрстан в strict, так в этом браузере в strict режиме не работают фильтры! Естественно,
Кроме этого, не работают custom tags, что очень странно —
Ну и чтоб два раза не вставать — SVG в IE8 не будет.
Дополнение: переключение режима при помощи meta не дало результатов.
Сжатие JavaScript с использованием PNG и Canvas
Jacob Seidelin в своём блоге «Nihilogic» опубликовал небезынтересную статью, где он рассказывает о своих экспериментах по сжатию кода JavaScript при помощи Canvas и PNG.
Идея простая, из разряда «как мне раньше не пришло это в голову». JavaScript переводится в последовательность байт, которая записывается как изображение. Изображение сохраняется
Далее
Единственный недостаток метода — скорость. Извлечение скрипта в 255Кб может занять несколько секунд, что, впрочем, не всегда является проблемой.
SPL в PHP 5.3
В PHP 5.3 появился новый функционал в SPL: куча, стек, очередь и связанный список. Официальной документации по ним пока нет, но есть запись в блоге Lorenzo Alberton, на примерах показывающая что это такое и как этим пользоваться.
Выровнять блок по горизонтали
Хороший приём, позволяющий выровнять блок по горизонтали (работает даже в IE6,
div { margin: 0 auto; width: 100px }Записываю себе.
Тест для мобильных браузеров
Для «больших» браузеров есть разнообразные
Из «взрослых» моя Opera 9.50b2 частично провалила только один тест (HTTPS), FF 2.0.0.14 — три штуки (CSS media queries, CSS3 selectors и Dynamic SVG), IE7 — 8 (пройдены только CSS2, PNG, GZIP и contenteditable), Safari 3.1 провалил два теста (HTTPS и Dynamic SVG).
Небольшую подборку тестов мобильных браузеров (Blazer 4.3.2.1, PSP Netfront, Opera Mini 4.1b1, Андроид) можно увидеть в блоге Евгения Киселева.
Масштабирование браузерами изображений

Очень полезная ссылочка «Масштабирование картинок в браузерах», позволяет наглядно оценить разницу при уменьшении и увеличении различными браузерами изображений.
Линк на английские тексты

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