Набор векторных элементов интерфейса iPad для Adobe Illustrator. Пригодится при разработке макетов приложений для яблочных девайсов.
-
Векторные элементы интерфейса iPad
24 мая 2010
-
PHP, type hinting для скалярных типов
21 мая 2010
В транк PHP скоммичен type hinting для скалярных типов. Т.е. скоро можно будет писать вот такой код:
function foo(int $bar) {}
-
PhpStorm RC build 95.150
21 мая 2010
Вышел RC PhpStorm, что означает непосредственную близость релиза.
Основные изменения:
Улучшили определение типа переменных в foreach.
Поиск обращений к глобальным преременным.
Распознавание и валидация include.
Rename методов класса теперь учитывает наследование.
Полная поддержка дополнения по @method.
Introduce variable теперь можно использовать для вытаскивания части строки.
Да, я не писал о билдах PhpStorm начиная с версии 95.74, так что на всякий случай приведу весь список анонсов:
-
Шрифты, веб и Google
19 мая 2010
Сегодня Google обрадовал сразу несколькими проектами:
Google Font API — API для удобного кроссбраузерного подключения нестандартных шрифтов. Использовать очень просто:
<html> <head> <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Tangerine"> <style> body { font-family: 'Tangerine', serif; font-size: 48px; } </style> </head> <body> <h1>Making the Web Beautiful!</h1> </body> </html>
За кулисами происходит определение браузера и подсовывание ему нужного формата CSS и шрифта.
Google Font Directory — набор довольно качественных свободных шрифтов, которые можно использовать при помощи Font API как в открытых, так и в коммерческих проектах.
WebFont Loader — JavaScript библиотека, которая позволяет выйти за рамки стандартного Font API: использовать шрифты typekit и свои шрифты. Также есть некоторое количество полезных callback-ов.
Использовать все эти чудесные возможности можно прямо сейчас.
Ссылки по теме:
-
Цены на PhpStorm
14 мая 2010
На официальной страничке появились цены на IDE PhpStorm.
Итоговые цены будут такими:
Коммерческая лицензия — $199.
Персональная лицензия — $99.
До первого сентября IDE можно будет купить по специальным ценам:
Коммерческая лицензия — $149.
Персональная лицензия — $49.
Персональная лицензия привязывается к конкретному человеку, коммерческая действует в пределах компании. Лицензии для OpenSource проектов и учебных заведений, как и для остальных продуктов, бесплатны.
Отличные цены, особенно если сравнивать с конкурентами.
-
MySQL, InnoDB и внешние ключи
14 мая 2010
Довольно часто при попытке создать внешний ключ MySQL вываливает невнятные errno: xxx. Их описания в большинстве случаев ничего не дают, даже запутывают ещё больше.
Реальных причин может быть несколько:
Тип таблицы, на которую указывает ключ не InnoDB, SolidDB или PBXT.
С одной из сторон ключа нет индекса (да, создавать его надо руками).
С одной из сторон ключа нет столбца с указанными именем.
Неверное описание отношения, например ON DELETE SET NULL для столбца NOT NULL.
Ограничение с таким именем уже есть.
Несовпадение типов полей, связываемых отношением. Например, нельзя использовать с одной стороны int(10) unsigned, а с другой int(11) или bigint.
Нарушение целостности данных (integrity violation), т.е. когда ссылающийся id прописан, а в связываемой таблице его нет.
Пожалуй, пятый случай самый сложный в отладке, поэтому лучше взять за правило именовать ключи, индексы и ограничения уникально.
-
Фикс diff Google code для Opera через usercss
14 мая 2010
В Opera не удаётся нормально пользоваться diff в Google code. Расстояния между строками получаются громадными. Какое-то время я с этим мирился и для Google code специально открывал FF или IE, но в конце концов не выдержал, нашёл причину и сделал фикс в виде usercss.
Как пользоваться:
Открываем opera:about. Ищем путь к usercss (в русском переводе это будет «Папка пользовательских файлов CSS»).
Забираем файлик google_code_diff.css и складываем в найденную в п.1 папку.
Перезапускаем Opera.
Страница → Стиль → google_code_diff.css.
-
rolling-curl
13 мая 2010
rolling-curl — PHP-класс для параллельного выполнения большого количества асинхронных HTTP-запросов при помощи curl, написанная Josh Fraser и поддерживаемая на данный момент мной.
Правильно чистит память, не простаивает зря, выполняя одновременно заданное число запросов. Обрабатывает каждый ответ сразу после выполнения запроса.
Пример:
// URL, которые будем обрабатывать $urls = array( "http://www.google.com", "http://www.facebook.com", "http://www.yahoo.com", ); // функция для обработки ответа function request_callback($response, $info) { // получаем title страницы if (preg_match("~<title>(.*?)</title>~i", $response, $out)) { $title = $out[1]; } echo "<b>$title</b><br />"; print_r($info); echo "<hr>"; } $rc = new RollingCurl("request_callback"); // одновременно позволим не более 20 запросов $rc->window_size = 20; foreach ($urls as $url) { // добавляем запросы в очередь $request = new RollingCurlRequest($url); $rc->add($request); } // запускаем $rc->execute();
-
Минимальный тестовый набор
11 мая 2010
Поиск ошибок и их устранение — совершенно типичная задача. А на каждую типичную задачу существует своё решение. Сегодня об этом решении, применительно к вёрстке, написал Chris Coyier.
Заключается оно в составлении минимального тестового набора, то есть самого минимального набора условий, на котором можно воспроизвести проблему. После его составления, либо проблема полностью локализуется, либо находится ошибка в продукте, лежащем в основе вашего.
-
EhterPad умер — да здравствует EhterPad!
11 мая 2010
Замечательный сервис http://etherpad.com/, о котором я уже писал, перестал принимать новые документы. К счастью, после открытия исходного кода, энтузиасты подхватили инициативу и теперь у нас есть не один, а целый десяток EtherPad-форков, некоторые из которых подверглись всевозможным улучшениям.
Что ж, долгой жизни новым EtherPad-ам!