Браузеры и стандарты. Вечная погоня. Из-за несоответствий стандартам, из-за разных способов рендеринга страниц большая часть времени веб-дизайнера уходит на то, чтобы загладить эти несоответствия (использовать хаки). В итоге, вместо эффективной работы, дизайнер вступает в противоестественные отношения с браузерами, теряя драгоценное время.
Dmitry Polovka @message
Пользователь
Сделай сам ACL. История разработки и написания несложной системы контроля доступов
7 мин
12KЕсть у нас в поддержке внутренний проект, где используется очень неудобная система контроля доступа.
Так называемая ACL.
Неудобная она тем, что для предоставления любого доступа администратору нужно совершать очень много действий для каждого отдельного ресурса требующего доступа.
Ну и после того, как жалобы пользователей начали достигать критической отметки мне была поставлена задача упростить, либо переделать систему.
Посмотрел я существующий код, желания в себе не почувствовал для переделки, — и решил подыскать готовое решение. Сразу скажу, — я большой противник «велосипедов», прежде чем что-то написать я всегда стараюсь найти готовое и подходящее решение. Так было и на этот раз, но достаточно безуспешно. Несколько решений есть, например, в коллекции PEAR, но подходящего я не выбрал. Много кода устарело (мы используем версию PHP 5.3), поэтому было принято решение писать ACL самостоятельно.
+3
Как DRYить модели
5 мин
17KВ большинстве рельсовых проектов основная концентрация кода приходится на модели. Все наверняка читали про Slim controllers & fat models и стараются впихать в модели как можно больше, а в контроллеры как можно меньше. Что ж, это похвально, однако в стремлении утолстить модели многие часто забывают про принцип DRY — don't (fucking) repeat yourself.
Я тут постараюсь вкратце расписать, как в районе моделей и рыбку съесть, и про DRY не забыть.
Я тут постараюсь вкратце расписать, как в районе моделей и рыбку съесть, и про DRY не забыть.
+56
Как начать работать с GitHub: быстрый старт
6 мин
1.2MРаспределенные системы контроля версий (DVCS) постепенно замещают собой централизованные. Если вы еще не используете одну из них — самое время попробовать.
В статье я постараюсь показать, как можно быстро начать экспериментировать с git, используя сайт github.com.
В статье не будут рассмотрены различия между разными DVCS. Также не будет детально рассматриваться работа с git, по этой теме есть множество хороших источников, которые я приведу в конце статьи.
+148
+35
Пишем PHP extension
8 мин
34KА давайте сегодня взглянем на PHP немного с другой точки зрения, и напишем к нему расширение. Так как на эту тему уже были публикации на Хабре (здесь и здесь), то не будем углубляться в причины того, для чего это может оказаться полезным и для чего может быть использовано на практике. Эта статья расскажет, как собирать простые расширения под Windows с использованием Visual C++ и под Debian с использованием GCC. Также я постараюсь немного осветить работу с PHP-массивами внутри расширений и провести сравнение производительности алгоритма, написанного на native PHP и использующего код, написанный на C.
+113
Markeeper.ru — прокачиваем веб-закладки
4 мин
1.6KКак водится, началось всё с идеи. Идея возникла из-за некоего чувства неудовлетворённости. В то время я начал ковырять Yii фреймворк и количество закладок на эту тему начало расти как снежный ком. Первым решением стал пересмотр всех закладок и перераспределение их по тематическим вложенным папкам. В начале это даже помогло. Однако, через некоторое время я стал с удивлением замечать, что добавляю в закладки целые страницы только ради пары строчек текста, представляющего собой какой-либо трюк, иллюстрацию или применение API фреймворка. Первое пришедшее в голову решение, — выделять только нужный текст и куда-то его сохранять сразу же отпадало,- почти в 100% случаев это была потеря форматирования или нужного расположения информации, что сразу опускало её ценность для меня. Далее были опробованы более интересные решения, — расширение для Firefox, которой умело редактировать страницу и сохранять на жесткий диск уже измененную версию. Это было весело ровно до пятого сохранения, когда удалять лишние элементы стало попросту лень. Более глубокий поиск решений проблемы не дал нужных результатов. Вот тогда и решено было, — сервису, решающему эту проблему как минимум для меня, — быть (Осторожно, под катом немного картинок).
+38
Знакомство с Symfony 2
7 мин
101KВыход Symfony 2 показался мне достаточно веской причиной чтобы наконец-то найти время и посмотреть что же из себя представляет один из самых популярных PHP-фреймворков в мире. Своё знакомство с ним я и описал в данной заметке. Так как это мой первый опыт работы с Symfony буду рад если заметите какие-то ляпы или недочёты и сообщите мне о них.
+30
Распараллеливание тестов или одна голова — хорошо, а две головы — лучше
3 мин
5.3KВ какой-то момент, если долго и усердно стараться сохранять покрытие тестами не меньше 80% кода, прогон полного комплекта тестов начнет занимать больше времени, чем уходит на перекур и на прочтение новых статей хабра. В свою очередь это приводит к тому, что полный комплект (suite) будет запускаться все реже и реже. Hudson начнет сообщать о сломанных билдах, а дальше сработает эффект разбитого окна и сломанный билд станет нормой.
Можно стараться запускать полный прогон перед каждым коммитом. Но затраты времени на кино в виде пробегающих по экрану фич cucumberа, а также выход из потока снизят эффективность разработчиков в разы.
В одном из наших проектов, в который согласно записям redmine вложено около 400 часов работы нашего коллектива ситуация с тестами до распараллеливания выглядела так (пару дней назад):
18 минут!!!
За это время разработчик может сварить кофе, выкурить сигарету, сходит в туалет, ущипнуть за попу симпатичную коллегу и успеть посмотреть последние 3 минуты «матрицы» на экране. Если требовать от него чтобы полный прогон запускался перед каждым коммитом, то он только и будет делать что смотреть «матрицу» ищипать попы пить кофе.
Но анализ загрузки процессора при прогоне показывает, что в работе участвует только лишь одно ядро независимо от того, сколько их всего есть. Как говорит пословица, лучше день потерять, а потом за пять минут долететь. Порыскав в гугле мы нашли гем parallel_tests. Теперь мы не с такой завистью будем смотреть на erlang группу, которые могут спокойно распараллелить свои тесты на кластер арендованных облачных машин в Selectel.
Можно стараться запускать полный прогон перед каждым коммитом. Но затраты времени на кино в виде пробегающих по экрану фич cucumberа, а также выход из потока снизят эффективность разработчиков в разы.
В одном из наших проектов, в который согласно записям redmine вложено около 400 часов работы нашего коллектива ситуация с тестами до распараллеливания выглядела так (пару дней назад):
151 scenarios (151 passed)
3997 steps (3997 passed)
17m49.257s
18 минут!!!
За это время разработчик может сварить кофе, выкурить сигарету, сходит в туалет, ущипнуть за попу симпатичную коллегу и успеть посмотреть последние 3 минуты «матрицы» на экране. Если требовать от него чтобы полный прогон запускался перед каждым коммитом, то он только и будет делать что смотреть «матрицу» и
Но анализ загрузки процессора при прогоне показывает, что в работе участвует только лишь одно ядро независимо от того, сколько их всего есть. Как говорит пословица, лучше день потерять, а потом за пять минут долететь. Порыскав в гугле мы нашли гем parallel_tests. Теперь мы не с такой завистью будем смотреть на erlang группу, которые могут спокойно распараллелить свои тесты на кластер арендованных облачных машин в Selectel.
+38
Регулярные выражения для валидации распространенных видов данных
2 мин
493KДля проверки текстовых полей на валидность обычно используют регулярные выражения. Существует несколько наиболе распространенных видов таких даных, как например номер кредитки, дата в определенном формате и т. д. На сайте html5pattern.com собирается коллекция регулярных выражений для таких данных (там это позиционируется, как возможное содержимое html5-атрибута pattern у inpit-элементов, но эти регулярные выражения можно использовать и для привычной валидации с помощью javascript). Актуальные для российской аудитории примеры, вместе с соответствующими регулярными выражениями вы можете посмотреть под катом.
+61
Оригинальный способ хранения изображений флагов
1 мин
3.6KПоставил сегодня я новую бета версию Skype и заодно решил посмотреть старым добрым Restorator'ом какие ресурсы (картинки в частности) содержит 25 мегабайтный файл. И наткнулся на очень интересный способ хранения флагов стран:
Upd: Рисунок оригинальный, ничего не менял, только прозрачные области белым цветом залил.
Upd: Рисунок оригинальный, ничего не менял, только прозрачные области белым цветом залил.
+185
Флаги 254 стран одним спрайтом
1 мин
16KОднажды, nickivanov нарисовал миниатюры для кучи разных флагов и выложил их в свободный доступ. А недавно, artpolikarpov собрал их в один спрайт и написал к нему удобный css, который позволяет легко отобразить любой флаг просто указанием нужного класса.
Вполне возможно, что однажды этот набор сохранит кому-нибудь много времени при работе над сайтом.
И был бы этот топик топиком-ссылкой, да по необъяснимым причинам не разрешает Хабр в топиках-ссылках указывать авторов, заслуживающих похвал. Так что вот они ссылки:
Описание: artpolikarpov.ru/projects/flags
Архив с флагами: artpolikarpov.ru/projects/flags/flags.zip
Вполне возможно, что однажды этот набор сохранит кому-нибудь много времени при работе над сайтом.
И был бы этот топик топиком-ссылкой, да по необъяснимым причинам не разрешает Хабр в топиках-ссылках указывать авторов, заслуживающих похвал. Так что вот они ссылки:
Описание: artpolikarpov.ru/projects/flags
Архив с флагами: artpolikarpov.ru/projects/flags/flags.zip
+185
Apache Hadoop (Доклад Владимира Климонтовича на ADD-2010)
17 мин
8.2KТуториал
Представляем вашему вниманию доклад Владимира Климонтовича, сделанный им на конференции Application Developer Days, в котором он поделился своим опытом обработки ОЧЕНЬ БОЛЬШИХ объемов данных, и использование для этого NOSQL-подходов, в частности Apache Hadoop.
Ниже представлены текстовая версия доклада + видео + аудио и слайды презентации. Спасибо belonesox за работу над подготовкой материалов доклада.
Ниже представлены текстовая версия доклада + видео + аудио и слайды презентации. Спасибо belonesox за работу над подготовкой материалов доклада.
+56
Архитектура контроллеров: простые советы на каждый день
6 мин
3.9KТо, что контроллеры должны быть «худыми» знают все, но по мере наращивания функционала поддерживать чистоту контроллеров становится все сложнее и сложнее. Мы хотим предложить несколько рекомендаций как содержать свои контроллеры максимально чистыми без ущерба для качества кода.
+43
Иерархические структуры данных и производительность
14 мин
23KВведение
В своей предыдущей статье я дал краткий обзор основных моделей хранения иерархических структур в реляционных БД. Как и положено тому быть, у многих читателей стал вопрос ребром о производительности представленных алгоритмов.
В данной статье я постараюсь приоткрыть завесу над этим животрепещущим вопросом, а в следующей обещаю коснуться вопросов оптимизации и поисков нестандартных решений.
+117
10 способов улучшить свои навыки программирования
4 мин
88KПеревод
1. Выучить новый язык программирования
Изучение нового языка программирования разовьет новые способы мышления, особенно если новый язык программирования использует парадигмы, с которыми Вы еще не знакомы. Многие из приобретенных способов мышления могут быть применены к языкам, которые уже знаете. Возможно, вы даже полюбите новый для Вас язык программирования настолько, что начнёте использовать его для серьёзных проектов.
Среди языков программирования отличный познавательный эффект и наверстывание опыта дают: Lisp (или Scheme), Форт, PostScript или Factor (стековые языки программирования), Haskell (строго типизированный, чистый функциональный язык) либо OCaml (объектно-ориентированный язык функционального программирования), Пролог (логическое программирование), Erlang (отличные паралельные вычисления).
+215
Инструкция-шпаргалка для начинающих
2 мин
133KЕсли в один прекрасный момент вам ударило в голову желание насадить разумное, доброе, вечное, и пересадить всех с SVN на GIT, сразу встают три проблемы:
- Объяснить зачем это нужно разработчикам и руководству
- Ввести в обиход новую схему работы с кодом
- Научить ничего не подозревающих девелоперов новым техникам
+83
Куда податься разработчику десктопного ПО, когда SaaS наступает
6 мин
2.2KПрежде всего хотелось бы сказать, что «облачный продукт» и «SaaS» – это не одно и то же. Часто под SaaS подразумевают веб-сервис, которым человек пользуется через браузер и оплачивает его на основе ежемесячной абонентской платы (или ежедневной – в общем, регулярной). Но SaaS расшифровывается как «Soft as a Service» («ПО как услуга»). Т.е. под SaaS следует понимать не только web-сервис, но и обыкновенный десктопный софт, который предоставляется на основе абонентской платы.
На рынке существует много десктопных продуктов, и разработчик такого ПО может захотеть не переписывать проект с нуля, а начать косвенно конкурировать с «браузерными» проектами, используя привлекательную черту SaaS — помесячную схему микросписаний (подписку). Для пользователя такая схема очень удобна: не нужно сразу платить большую сумму денег. Т.е. можно автоматически списывать стоимость месяца использования ПО с кредитной карты, Яндекс.Денег, WebMoney или даже со счета интернет-провайдера абонента в едином чеке с оплатой интернета.
Особенно это актуально в России: люди предпочитают скачивать «пиратки», и их можно понять — лицензионный софт слишком бьет по карману. В то же время, многие пользуются сервисом «антивирус по подписке» у своих интернет-провайдеров, оплачивая дополнительные 1-2$ вместе с интернетом. Антивирус — это частный случай такого «подписочного» ПО.
На рынке существует много десктопных продуктов, и разработчик такого ПО может захотеть не переписывать проект с нуля, а начать косвенно конкурировать с «браузерными» проектами, используя привлекательную черту SaaS — помесячную схему микросписаний (подписку). Для пользователя такая схема очень удобна: не нужно сразу платить большую сумму денег. Т.е. можно автоматически списывать стоимость месяца использования ПО с кредитной карты, Яндекс.Денег, WebMoney или даже со счета интернет-провайдера абонента в едином чеке с оплатой интернета.
Особенно это актуально в России: люди предпочитают скачивать «пиратки», и их можно понять — лицензионный софт слишком бьет по карману. В то же время, многие пользуются сервисом «антивирус по подписке» у своих интернет-провайдеров, оплачивая дополнительные 1-2$ вместе с интернетом. Антивирус — это частный случай такого «подписочного» ПО.
+16
Разработка IFrame приложения для ВКонтакта
9 мин
18KНесмотря на то, что данная социалка «горячо любима» аудиторией хабра, я всё же решил рискнуть и опубликовать небольшие заметки посвящённые разработке приложений на Джанге под неё.
Предупреждаю, некоторые из них вполне капитанские, а некоторые вообще не имеют отношения к Вконтакте или даже Джанге, в общем, не обессудьте.
Под катом:
На правах рекламы: Приложение называется «Коллекционер» и предназначено для людей занимающихся коллекционированием монет, марок, карт и других предметов. В данный момент наполнен лишь каталог карт MTG, но в будущем будут созданы и наполнены каталоги для других предметов. Разумеется, мы с радостью выслушаем все ваши предложения и конструктивную критику.
Предупреждаю, некоторые из них вполне капитанские, а некоторые вообще не имеют отношения к Вконтакте или даже Джанге, в общем, не обессудьте.
Под катом:
- django-vkontakte-iframe и vkontakte
- Загрузка приложения на стену
- Флеш-заглушка
- Сессия в горячо любимом IE
- Все «flashVars» передаются GET запросом
- Работа во фрейме
- Доступ к информации пользователя
- Проверка валидности вёрстки
- JSLint ваш друг и товарищ
- Генерирование миниатюр
- Модерация через прокси-модель
- Импорт настроек
- Оптимизация
На правах рекламы: Приложение называется «Коллекционер» и предназначено для людей занимающихся коллекционированием монет, марок, карт и других предметов. В данный момент наполнен лишь каталог карт MTG, но в будущем будут созданы и наполнены каталоги для других предметов. Разумеется, мы с радостью выслушаем все ваши предложения и конструктивную критику.
+26
Простой дополнительный контроль состояния данных memcached
2 мин
5K Мониторинг memcached — дело далеко не последней важности. Как на этапе тестирования, так и на этапе сопровождения уже работающего нагруженного ресурса. Средств «из коробки» для этого не так уж и много, а если вы работает с PHP, то зачастую ограничиваетесь средствами memcache (или memcached), а именно
Memcache::getStats()
что возвращает типичный набор данных
Вроде всё хорошо.
Мы видим, что у нас занято 133,5 Mb из 2 Gb выделенных под memcached и около 37 тыс. ключей.
Hits к misses относиться как 83/5, что тоже не внушает опасений.
Memcache::getStats()
$memcache = new Memcache;
$memcache->connect('localhost',11211);
print_r($memcache->getStats());
что возвращает типичный набор данных
Array ( [pid] => 25722 [uptime] => 4487286 [time] => 1308323074 [version] => 1.2.2 [pointer_size] => 64 [rusage_user] => 2646.005365 [rusage_system] => 17108.873237 [curr_items] => 37761 [total_items] => 10764857 [bytes] => 140070186 [curr_connections] => 5 [total_connections] => 17360659 [connection_structures] => 31 [cmd_get] => 89154830 [cmd_set] => 10764857 [get_hits] => 83452021 [get_misses] => 5702809 [evictions] => 0 [bytes_read] => 3527860756618 [bytes_written] => 4234517241183 [limit_maxbytes] => 2147483648 [threads] => 1 )
Вроде всё хорошо.
Мы видим, что у нас занято 133,5 Mb из 2 Gb выделенных под memcached и около 37 тыс. ключей.
Hits к misses относиться как 83/5, что тоже не внушает опасений.
+20
Информация
- В рейтинге
- Не участвует
- Откуда
- Рига, Латвия, Латвия
- Дата рождения
- Зарегистрирован
- Активность