программирование
HTML5 VIDEO: кто первый? А так же 3D CANVAS
Вышел браузер «Сафари» версии 3.1,
Safari 3.1 is the first browser to support the new video and audio tags in HTML 5 and the first to support CSS Animations. Safari also supports CSS Web Fonts, giving designers limitless choices of fonts to create stunning new web sites
Что касается тега AUDIO — чистая правда, а с VIDEO — вышла накладка. Специальный билд «Оперы», поддерживающий этот тег, вышел
Кстати, самое интересное, что появилось в том билде «Оперы», это не тег VIDEO, а 3D Canvas — до этого момента тег CANVAS позволял работать только с примитивами на плоскости (отрезками, прямоугольниками, кругами и так далее), знаменитая игра «Canvascape», сделанная с применением этого тега (требует для работы любой браузер, поддерживающий CANVAS), просчитывае
Для 3D CANVAS задача вращения куба с текстурой, например — тривиальная. Примеров работы с этим новшеством пока немного, в оригинально статье упомянута Snake («змейка») в 3D, написанная Mathieu ’p01’ HENRI.
CSS только для Mozilla (в том числе — FireFox)
У верстальщиков до сих пор возникает задача — подключить стили только для определённого браузера. Для IE проблема решаема — всё меньше верстальщиков не знают что такое conditional comments. Но исчезающе малое количество народу знает что такое
Вообще, это правило позволяет подключать стили в зависимости от домена, URL или его префикса. Для нас важно, что эти правила увидит только FireFox.
Простой пример использования, из которого становится понятен общий принцип:
<style type="text/css">
body { background: white; color: black }
@-moz-document url-prefix()
{
body { background: grey; color: white }
}
</style>
<body>White in FireFox</body>Принципы фильтрации по URL и доменам так же могут оказаться полезными, о них можно почитать в архиве W3C.
NOWDOC в PHP 5.3.0
В PHP 5.3.0 появилась новая синтаксическая конструкция: «NOWDOC». Сильно похожа на «heredoc», но с тем различием, что в «nowdoc» нет интерполяции переменных:
Следующий пример выведет в точности тот текст, который находится внутри nowdoc:
echo <<<'EOT'
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': x41
EOT;Второе отличие от heredoc, что nowdoc можно использовать в любом статическом контексте, например так:
class foo {
public $bar = <<<'EOT'
bar
EOT;
}
Чем быстрее всего отрезать строку в кодировке UTF-8
Решил протестировать — чем быстрее всего можно отрезать строку в кодировке
Я взял строку в 700
- хуже всех справилась реализация на чистом PHP — 0.34 сек
- получше — iconv_substr. 0.063 сек
- ещё лучше — mb_substr. 0.0175 сек
- лучше всех — preg_replace. 0.005 сек
Если кому интересно, вот моя функция по проходу по строке в кодировкеUTF-8:
$len = strlen($text);
for ($pos = $cutted = 0; $cutted < $cut && $pos < $len; ++$cutted)
{
$ch = ord($text[$pos]);
// multibyte char
if (0x80 & $ch)
{
for (; $ch & 0x80; ++$pos, $ch <<= 1);
}
else
{
$pos++;
}
}Итак, лучший способ отрезать первые $N символов
preg_replace('/^(.{'.$N.'}).*$/uSs', '$1', $text)Клуб нелюбителей C++
В своё время я посмотрел массу языков программирования (и продожаю смотреть), на некоторых —
Internet Explorer 8.0 beta 1: можно скачать
Вышла первая бета Internet Explorer 8. Уже можно качать и пробовать, доступны версии для Windows XP, Vista, Server 2003. Проходит 17% теста ACID3 (IE7 проходил 13% теста), тест ACID2 — проходит полностью, CSS3 selector test — 335 тестов из 578 пройдено (Opera 9.50b, к примеру, проходит этот тест полностью).
После установки IE8 спрашивает не желаете ли вы его сделать браузером
То, что видно навскидку — режим эмуляции IE7, подсвечивание домена в строке URL, корректная работа с favicon (или это уже в седьмой версии было?), открытие окна в фоновой закладке кликом мышиным колесом, как в остальных браузерах, и встроенные инструменты для разработчика (просмотр DOM, CSS, отладка JavaScript и так далее), а после подения он спрашивает восстанавливать ли закладки.
Появилась технология Web Slices, (между прочим — это микроформат) комментировать которую пока не берусь, но выглядит забавно, очень интересная вещь Activities, обязательно посмотрите ролик, даже если не понимаете английский.
Теперь версия IE на моей машине выглядит так: 8.0.6001.17184. Некоторые глюки, кстати, видны невооружённым глазом —
Чудесный Lua
Язык программирования Lua (переводится с португальского как «луна»), в целом, мне нравится — очень гибкий, красивый, целостный. Программировать на нём приятно, а модель, заложенная в основу, настолько гибкая, что позволяет создавать
Одна из мощных функций языка — метатаблицы, позволяющая переопределить операции для любого типа данных, включая любые составные. Вот например:
mt = {}
function mt.__add (a,b)
return { x = a.x + b.x, y = a.y + b.y }
endЗадаётся метатаблица (mt) у которой ключ __add (функция, отвечающая за сложение) определена как функция сложения вектора с двумя координатами. Например, в следующем примере (все примеры взяты из статьи «Язык Lua и использование скриптов на нём в программах на Си++») я устанавливаю заданную метатаблицу «mt» для переменной «u», причём сложение «u» и «v» работает правильно — поскольку Lua ищет обработчик сложения сначала у второго оператора, в случае неудачи — у следующего.
u = { x = 1, y = 2 }
v = { x = 0, y = 1 }
setmetatable ( u, mt ) -- установить для таблицы u метатаблицу
w = u + v -- осуществить сложение таблиц
print ( w.x, w.y )Самое интересное — дальше. Тут мой мозг не ломается, но без руководства я бы не догадался. Дело в том, что метатаблица «mt», точнее её операция «__add» определена некорректно. Сложение пройдёт великолепно, но у переменной «w» новой операции сложения не будет — метатаблица «mt» для этой переменной не установлена. Правильный способ определения вот такой:
function mt.__add (a,b)
return setmetatable ( { x = a.x + b.x, y = a.y + b.y }, mt )
endТ. е. таблица устанавливается ещё и для получившегося выражения.
Для тех, кто уже ничего не понимает, но знает PHP. Запись { x = a.x + b.x, y = a.y + b.y } на PHP выглядела бы как array('x'=>$a['x']+$b['x'], 'y'=>$a['y']+$b['y']).
sgn(x) на ассемблере
Давненько я не брал в руки ассемблер. Лет так 8, наверное (речь идёт об ассемблере под 80x86, это, кстати,
cwd
neg ax
adc dx, dxВот объяснение как это работает:
Здесь начальный аргумент лежит в ax, значение помещается в dx. Работает следующим образом: сначала cwd расширяет знак ax в dx, после чего в dx лежит -1, если аргумент отрицательный, а иначе 0. neg ax меняет знак ax, но это на самом деле неважно, а важно то, что эта инструкция помещает в флаг carry единицу, только если аргумент был ненулевой.
Наконец adc dx, dx складывает dx с самим собой, добавляет carry от второй инструкции, и помещает результат в dx. В результате выходит:
— если ax<0, то dx вначале -1, carry равен 1, результат равен -1*2+1 = -1 (во как!) — если аx=0, то dx вначале 0, carry равен 0, результат 0*2+0=0 — если ax>0, то dx вначале 0, carry равен 1, результат 0*2+1=1
Программисты на PHP — новые чукчи?
Мне кажется, про программистов на PHP скоро будут складывать анекдоты, как про чукчей. Посмотрите какой чудесный перл из конференции ru_php в ЖЖ:
Пытаюсь сконвертировать .doc файл в .txt , но php не понимает команды без точного объяснения:
$wf=fopen(«myfile.txt»,«w»); $i=0; $f=file(«laplap.doc»); while($i<10) { fwrite($wf,$f[$i]); $i++; } fclose($wf);
может есть другой способ? спасибо
Я очень боюсь поверить, что человек это пишет всерьёз.
PHP 5.3.0: Прощай .htaccess
Я уже достаточно давно работаю в конфигурации nginx + FastCGI PHP (без Apache в качестве backend). Это более эффективно — экономит память и система, в целом, более устойчива, производительна, легче в управлении (приходится конфигурировать один сервер, а не два). Единственное, чего нехватало — настройки PHP для определённого хоста (так называемые «Local Value» в phpinfo).
Так вот, в PHP 5.3.0 ситуация изменится:
— Improved php.ini handling: (Jani)
. Added «.htaccess» styleuser-defined php.ini files support for CGI/FastCGI
. Added support for special [PATH=/opt/httpd/www.example.com/] and [HOST=www.example.com] sections. Directives set in these sections can not be overriddenby user-defined ini-files or during runtime.
Этого мне нехватало куда больше, чем пространств имён и «?:», который там тоже появятся. По правде говоря, там есть ещё более значительное для меня изменение — Late Static Binding вкупе с __callstatic и $foo:myFunc(). Или даже «Improved PHP runtime speed and memory usage: Added garbage collector».
PHP 5.2.5 высыпается в кору
Если у вас PHP 5.2.5 высыпается в кору и gdb показывает, что ошибка произошла в sapi_deactivate, поставьте патч из CVS, должно помочь.
Safari: 80%. ACID3
Как я говорил, Safari (точнее WebKit) движется к прохождению теста ACID3 семимильными шагами. И вот пожалуйста: вчерашняя ночная сборка r30123 проходит 80% (!) процентов теста. Кстати, оказывается многие этого не знают — если кликнуть на букве «A» в слове «ACID3» после прохождения теста, то можно увидеть какие тесты браузер не прошёл.
Safari готовится пройти ACID3?
Вероятнее всего, Safari будет первым браузером, который пройдёт тест ACID3. 30 января, когда я делал замеры прохождения этого теста различными браузерами Safari лидировал, это положение дел сохраняется до сих пор, причём Apple идёт к финишу семимильными шагами.
Ночная сборка «Сафари» на 30 января справлялась с 66% теста, за пять дней эта цифра поднялась до 73%, тогда как «Опера» за неделю поднялась всего на два пункта. Я думаю, «Сафари» справится с тестом ещё до релиза — очень хорошая реклама для браузера, который
CSS3 ::selection

В CSS3 есть замечательный селектор ::selection. Позволяет указать цвет выделения текста мышкой для определённого тега. В исходной статье, например, три абзаца выделяются каждый своим цветом — красным, голубым и розовым.
Фокус прост, в таблице стилей пишем:
p.red::selection { background: #ffb7b7 } /* Safari, Opera */
p.red::-moz-selection { background: #ffb7b7 } /* FireFox */всё привычно — для тега «P» с классом «red» указывается цвет выделения. Для FireFox при помощи селектора
P.S. Если у вас FireFox, Safari или Opera 9.50 build 9770, попробуйте выделить этот текст, можно заметить, что в «Опере» цвет выделения наследуется, а в Safari и FireFox — нет.
Мегафон: PHP inside
Даже не знаю что красноречивее показывает, что сайт «
http://mgsm.ru/includes/sms_code.php?%3C?=doubleval(microtime());?%3E(тут тонкий юмор о среднем уровне программистов на PHP)
ACID 3 вышел
Вышел ACID3 — тест, проверяющий, в основном, поддержку браузером DOM и JavaScript. Итак, как проходят тест Acid3 последние версии браузеров:
Safari nightly build r29953 — 73/100
Opera 9.50b build 4634 Mac, build 9770 Win — 63/100
FireFox 3.0b3pre — 61/100
FireFox 2.0.0.11 — 50/100
Opera 9.25 — 47/100
Safari 3.0.4 (под iPhone в том числе) — 40/100
Internet Explorer 7.0+ — 13/100
Internet Explorer 6.0 SP2 — 12/100
Как видно, из существующих браузеров лидирует FireFox, из бета-
UnSnow
Не знаю как вас, а меня уже достали сайты с падающими снежинками. В канун Нового года это ещё
// ==UserScript==
// @name UnSnow - Turn off stupid snow
// @author Evgeny Stepanischev aka Bolk
// @version 1.01
// @namespace /files/unsnow.js
// @modified 2008-01-29
// ==/UserScript==
document.addEventListener
(
'load',
function () {
if (window) for (var v in window)
if (/snow|sneg|^fall$/i.test(v) && typeof window[v] == 'function')
window[v] = function () {}
},
false
)HTML 5 draft
Странно, но группа W3C анонсировала первый публичный черновой вариант спецификации HTML5. Предрекали, что черновая версия выйдет через пару лет, а сам стандарт — лет через 15. Видимо, счастье наступит раньше. Кстати, читая стандарт HTML5 понимаешь, что «семантическая вёрска» в HTML4 — фикция (к слову, чтобы два раза не вставать, вёрстка «дивами» в текущем состоянии — хак на хаке и такое же гуано как вёрстка таблицами, но сложнее и дороже). Надо будет
Sun MySQL
Уже все интересующиеся в курсе, что Sun купила MySQL AB? Сумма сделки — 800 миллионов долларов США и 200 миллионов в качестве опциона. Людям особенно интересно что будет с InnoDB, который принадлежит Oracle и, по сути, является единственным нормальным движком в MySQL. Конечно, MySQL разрабатывали очень хороший storage Falcon, но до его завершения ещё далеко.
256 байт спирали
Нижеприведённый JavaScript в 256 байт выводит вращающуюся спираль (говорят в IE не работает, попробуйте Opera 9.50 или свежий FireFox). Подробный разбор принципа действия есть у Анатолия Воробья в ЖЖ. Никакого чуда (хотя поначалу выглядит именно так) — немного математики и чуть изобретательности.
p01<i id=d><script>setInterval('for(x=_="in solid #",E=Math,o=99,--O;o--;x+=
"<hr style='width:0;margin:auto;border-right:"+E.abs(q?p:P)+_+(9-q)*36+
";border-left:"+E.abs(q?P:p)+_+(8+q)*36+"'>")q=0>(p=E.cos(O+=22))*(P=E.sin(O));
d.innerHTML=x',O=9)</script>