Под катом расскажу как я усовершенствовал автоматическое создание и разворачивание окружения для веб-разработки на основе Docker, Fig, DNSMasq и nsenter. По сути, это разворачивание LAMP сервера и запись о нем в DNSMasq, но приоритетами являются незасоренность хост-машины ненужным софтом типа web-, db-серверов на хост машине и минимальное количество команд для запуска
Alexey Kovalevich @aosiniao
DevOps
TrueBSD — FreeBSD для новичков
1 min
3KМинский студент Алексей Соколов выпустил релиз-кандидат второй версии ОС TrueBSD — LiveDVD на базе 7-й ветки FreeBSD. Система предназначена прежде всего для начинающих пользователей FreeBSD, и позиционируется автором как десктопная ОС, умеет устанавливаться на жёсткий диск и имеет полную обратную совместимость с FreeBSD. В систему можно устанавливать как бинарные пакеты от седьмой ветки FreeBSD, так и порты. TrueBSD может использоваться системными аднминистраторами для диагностики и восстановления системы.
С момента выпуска релиза 0.1 прошёл год, но новая версия системы имеет номер версии 2.0. Как утверждает автор ОС, связано это не только с огромным количеством изменений в системе, но и с устоявшейся традицией в сообществе пользователей системы называть версию 0.1 — первой, а новый релиз — второй версией.
С момента выпуска релиза 0.1 прошёл год, но новая версия системы имеет номер версии 2.0. Как утверждает автор ОС, связано это не только с огромным количеством изменений в системе, но и с устоявшейся традицией в сообществе пользователей системы называть версию 0.1 — первой, а новый релиз — второй версией.
+26
Топ 100 Mac OS приложений
3 min
19K7zX
(Compress / Decompress 7zX Archives)ACP Suite
(Ultimate OS X Power Toys Array)Adium
(Universal Instant Messaging App based on Pidgin)AP Grapher
(Searches and Displays Wireless Networks)+39
Спокойной ночи!
6 min
21K Около месяца назад я приобрел HTC Hero. Основной причиной, по которой был выбран этот телефон, а не iPhone, была возможность полноценно разрабатывать приложения под Windows.
В качестве пробы пера я написал небольшую программу, которая выключает звук на ночь. Под катом описание процесса разработки и ссылка на программу.
В качестве пробы пера я написал небольшую программу, которая выключает звук на ночь. Под катом описание процесса разработки и ссылка на программу.
+113
Работа с WebMoney API
4 min
54KWebMoney Transfer уже давно является для многих привычным способом расчётов в интернете. Одним из достоинств системы является богатый API для взаимодействия со программным обеспечением сторонних сервисов. Через него можно получать состояния ваших счетов, осуществлять денежные переводы, выставлять клиентам счета на оплату, контролировать их оплату, возвращать платежи без комиссии, работать с платежами с протекцией, получать информацию из аттестатов других пользователей, отправлять сообщения по внутренней почте WM. На сайте WebMoney есть хорошая документация на API.
Вашим покорным слугой написан модуль Business::WebMoney, который распространяется по свободной лицензии и получил статус официального Perl-интерфейса системы.
Вашим покорным слугой написан модуль Business::WebMoney, который распространяется по свободной лицензии и получил статус официального Perl-интерфейса системы.
+29
MIME-типы для разных браузеров при загрузке картинок
1 min
1.6KВесной писал скриптик, который закачивает картинки на сервер. Иногда файлы не закачивались. Задача вроде вполне тривиальная. Как оказалось, при загрузке картинок на сервер каждый браузер проверяет свой mime-тип. Чтобы не было ситуации, когда файл не загружается, надо делать проверку на следующие типы:
'image/pjpeg', — IE
'image/jpeg', — FF, Opera,Safari
'image/png', — FF,Opera,Safari
'image/gif', — IE,FF,Opera,Safari
'image/x-png', — IE
'image/x-icon', — IE,FF,Opera
'image/ico' — Safari
— это сводная табличка для файлов *.jpg,*.gif,*.png,*.ico в разных браузерах
'image/pjpeg', — IE
'image/jpeg', — FF, Opera,Safari
'image/png', — FF,Opera,Safari
'image/gif', — IE,FF,Opera,Safari
'image/x-png', — IE
'image/x-icon', — IE,FF,Opera
'image/ico' — Safari
— это сводная табличка для файлов *.jpg,*.gif,*.png,*.ico в разных браузерах
+6
Эксперименты с Мамбой. Часть 1
4 min
25KДавным-давно (года 2 назад) судьба меня закинула на Мамбу. Совсем не в поисках второй половинки, скорее это было задание по работе. Задание было быстро выполнено, но с мамбы я после этого не ушел. Проект стал мне интересен именно как бизнес, пусть и чужой. И все это время я занимался лишь тем что ставил там эксперименты. Ни ради какой то выгоды, а скорее ради интереса. Сегодня своими наблюдениями я хотел бы поделиться с вами. Писать буду частями, в которых расскажу:
+161
Документация Mojolicious: Потерянные Главы
16 min
15KTutorial
Update: статья обновлена для соответствия Mojolicious 6.0.
Mojolicious — восхитительный современный веб-фреймворк для Perl. Из недостатков я могу назвать только два: политика в отношении обратной совместимости и документация.
Этот цикл статей предполагает, что читатель уже поверхностно знаком с фреймворком, и у него возникла потребность разобраться в деталях, которые либо не описаны в документации, либо описаны недостаточно подробно и понятно. Для начального ознакомления идеально подходит официальная документация (на английском).
В официальном FAQ написано: "… we will always deprecate a feature before removing or changing it in incompatible ways between major releases … as long as you are not using anything marked experimental, untested or undocumented, you can always count on backwards compatibility …". Для начала, вторая фраза противоречит первой. Далее, вот цитата из Guides::Contributing «Features may only be changed in a major release or after being deprecated for at least 3 months.». Честно говоря, 3 месяца это и так смешной срок когда речь идёт об обратной совместимости, но похоже что даже этот срок соблюдается не всегда (поддержку «X-Forwarded-HTTPS» сделали deprecated два месяца назад, а удалили месяц назад — да, это был «major release» поэтому формально правила не нарушены, но общее отношение к обратной совместимости вполне показательно). Как много разработчиков обновляет фреймворк чаще чем раз в 3 месяца, да ещё и при этом тщательно вычитывает Changes или логи своего приложения на предмет deprecated-предупреждений? При этом, в течении последнего года было deprecated примерно 20 функций/фич. На практике, конечно, всё не так плохо, как это звучит — что-то ломается не так уж часто (лично меня за последний год коснулась только замена
Что касается документации, то многие считают её отличной, даже одним из серьёзных достоинств Mojolicious, но никак не недостатком. Проблема с документацией в том, что она вся сосредоточена на примерах. Это реально круто, когда ты начинаешь изучать фреймворк. Это экономит кучу времени, когда тебе нужно сделать фичу и ты быстро гуглишь пример аналогичной фичи в официальных guides. Но как только ты выходишь за рамки стандартных задач и возникает необходимость понять, как что-то устроено идеологически или архитектурно, какие конкретно параметры может принимать эта функция и что конкретно она может возвращать в разных ситуациях — выясняется, что для многих модулей Mojolicious такая документация отсутствует в принципе. И не потому, что эта информация относится к «недокументированным возможностям» — почти всё это мельком упоминается здесь и там в разных примерах, а значит считается «документированным». Нередко есть несколько способов получить доступ к определённым данным (параметры запроса, тело ответа, etc.) но не описано чем они друг от друга отличаются и в каких ситуациях правильнее пользоваться какими способами. И последнее — алфавитный порядок функций в доке, серьёзно?! Нет, я понимаю, все люди разные и кому-то наверняка это удобно, но многим всё-таки на порядок проще воспринимать документацию в которой функции сгруппированы по задачам. (Хотя в коде, особенно при чтении его через браузер, где не так удобно пользоваться поиском как в Vim, алфавитный порядок функций неожиданно оказался довольно удобным — кроме new/DESTROY/AUTOLOAD — их всё-таки лучше размещать в начале.) В результате, чтобы разобраться приходится вычитывать код (некоторые предпочитают вместо этого смотреть тесты!), что не так просто — во-первых он не является эталоном читабельности: автор любит использовать фишки перла, которые позволяют писать код компактно (и нередко такой код быстрее работает), но читабельность это ухудшает; во-вторых активное использование и наследования и обмена событиями между объектами усложняет понимание того, что и как происходит внутри 104 классов, из которых состоит Mojolicious-5.
С проблемой обратной совместимости мы мало что можем сделать (хотя, наверное, можно сделать плагин к Mojolicious, который будет её эмулировать по мере возможности). Зато вторую проблему решить не сложно — недостающую документацию можно написать самостоятельно. По мере изучения Mojolicious я планирую описывать некоторые вещи, которые, по-хорошему, должны быть в официальной документации, отсюда и название этой статьи.
Mojolicious — восхитительный современный веб-фреймворк для Perl. Из недостатков я могу назвать только два: политика в отношении обратной совместимости и документация.
Этот цикл статей предполагает, что читатель уже поверхностно знаком с фреймворком, и у него возникла потребность разобраться в деталях, которые либо не описаны в документации, либо описаны недостаточно подробно и понятно. Для начального ознакомления идеально подходит официальная документация (на английском).
Содержание
- Недостатки
- Роутинг: внутреннее устройство
- Роутинг: настройка
- Параметры HTTP-запроса
- Парсинг
- Tips & Tricks
- Поддержка неблокирующих приложений в режиме CGI
- Как работает Mojo::UserAgent при тестировании своего приложения
- ojo и Mojolicious::Lite
- Переменные окружения
Другие статьи в этой серии
Недостатки
В официальном FAQ написано: "… we will always deprecate a feature before removing or changing it in incompatible ways between major releases … as long as you are not using anything marked experimental, untested or undocumented, you can always count on backwards compatibility …". Для начала, вторая фраза противоречит первой. Далее, вот цитата из Guides::Contributing «Features may only be changed in a major release or after being deprecated for at least 3 months.». Честно говоря, 3 месяца это и так смешной срок когда речь идёт об обратной совместимости, но похоже что даже этот срок соблюдается не всегда (поддержку «X-Forwarded-HTTPS» сделали deprecated два месяца назад, а удалили месяц назад — да, это был «major release» поэтому формально правила не нарушены, но общее отношение к обратной совместимости вполне показательно). Как много разработчиков обновляет фреймворк чаще чем раз в 3 месяца, да ещё и при этом тщательно вычитывает Changes или логи своего приложения на предмет deprecated-предупреждений? При этом, в течении последнего года было deprecated примерно 20 функций/фич. На практике, конечно, всё не так плохо, как это звучит — что-то ломается не так уж часто (лично меня за последний год коснулась только замена
$app->secret()
на $app->secrets()
). Но факт остаётся фактом — обратную совместимость ломают, ломают часто, причём без по-настоящему веских причин: например, в случае с secret()
абсолютно ничего не мешало добавить в кодsub secret { shift->secrets([shift]) }
либо просто добавить поддержку дополнительных параметров в secret()
вместо добавления новой функции secrets()
реализовав нужную фичу вообще не ломая совместимость.Что касается документации, то многие считают её отличной, даже одним из серьёзных достоинств Mojolicious, но никак не недостатком. Проблема с документацией в том, что она вся сосредоточена на примерах. Это реально круто, когда ты начинаешь изучать фреймворк. Это экономит кучу времени, когда тебе нужно сделать фичу и ты быстро гуглишь пример аналогичной фичи в официальных guides. Но как только ты выходишь за рамки стандартных задач и возникает необходимость понять, как что-то устроено идеологически или архитектурно, какие конкретно параметры может принимать эта функция и что конкретно она может возвращать в разных ситуациях — выясняется, что для многих модулей Mojolicious такая документация отсутствует в принципе. И не потому, что эта информация относится к «недокументированным возможностям» — почти всё это мельком упоминается здесь и там в разных примерах, а значит считается «документированным». Нередко есть несколько способов получить доступ к определённым данным (параметры запроса, тело ответа, etc.) но не описано чем они друг от друга отличаются и в каких ситуациях правильнее пользоваться какими способами. И последнее — алфавитный порядок функций в доке, серьёзно?! Нет, я понимаю, все люди разные и кому-то наверняка это удобно, но многим всё-таки на порядок проще воспринимать документацию в которой функции сгруппированы по задачам. (Хотя в коде, особенно при чтении его через браузер, где не так удобно пользоваться поиском как в Vim, алфавитный порядок функций неожиданно оказался довольно удобным — кроме new/DESTROY/AUTOLOAD — их всё-таки лучше размещать в начале.) В результате, чтобы разобраться приходится вычитывать код (некоторые предпочитают вместо этого смотреть тесты!), что не так просто — во-первых он не является эталоном читабельности: автор любит использовать фишки перла, которые позволяют писать код компактно (и нередко такой код быстрее работает), но читабельность это ухудшает; во-вторых активное использование и наследования и обмена событиями между объектами усложняет понимание того, что и как происходит внутри 104 классов, из которых состоит Mojolicious-5.
С проблемой обратной совместимости мы мало что можем сделать (хотя, наверное, можно сделать плагин к Mojolicious, который будет её эмулировать по мере возможности). Зато вторую проблему решить не сложно — недостающую документацию можно написать самостоятельно. По мере изучения Mojolicious я планирую описывать некоторые вещи, которые, по-хорошему, должны быть в официальной документации, отсюда и название этой статьи.
+20
Perl6 — Обработка исключений
4 min
5.9K1. Особенности работы с переменными и литералами в Perl6
2. Perl6 — Операции над переменными, анонимные блоки
3. Perl6 — Условные операторы, циклы
4. Perl6 — Работа с функциями
5. Perl6 — Классы
6. Perl6 — Ввод-вывод, модули
7. Perl6 — Комментарии, пробельные символы, скобки
8. Perl6 — Перегрузка операторов
9. Perl6 — Работа с типами данных
В прошлой статье я заикнулся об отлове исключений. Немногие скрипты, что встречались с исключениями, выживали, и слишком много моих скриптов погибло от их рук. Пожалуй, настало время устроить на них охоту. Для тех кому интересно, чем же мы будет их ловить — встречаемся под катом.
2. Perl6 — Операции над переменными, анонимные блоки
3. Perl6 — Условные операторы, циклы
4. Perl6 — Работа с функциями
5. Perl6 — Классы
6. Perl6 — Ввод-вывод, модули
7. Perl6 — Комментарии, пробельные символы, скобки
8. Perl6 — Перегрузка операторов
9. Perl6 — Работа с типами данных
В прошлой статье я заикнулся об отлове исключений. Немногие скрипты, что встречались с исключениями, выживали, и слишком много моих скриптов погибло от их рук. Пожалуй, настало время устроить на них охоту. Для тех кому интересно, чем же мы будет их ловить — встречаемся под катом.
+11
Pipo M6 3G — планшет с отличным экраном и встроенным 3G
4 min
97KСегодня у нас обзор новинки от Pipo — планшет Pipo M6 3G. 9.7 дюймовый экран с разрешением 2048х1536 и встроенным 3G модулем.
+26
Обстоятельное интервью Ричарда Столлмана о слежке и свободе
1 min
28KRussia Today взял интервью у Ричарда Столлмана.
В интервью затронуты: слежка, свободное и проприетарное программное обеспечение, социальные сети и то, что Ричард всё-таки расплачивается иногда кредиткой.
Видео с переводом на русский язык.
P.S. Может было, поиском по хабр не нашел, если есть, подскажите — уберу.
В интервью затронуты: слежка, свободное и проприетарное программное обеспечение, социальные сети и то, что Ричард всё-таки расплачивается иногда кредиткой.
Видео с переводом на русский язык.
P.S. Может было, поиском по хабр не нашел, если есть, подскажите — уберу.
+66
Еще 12 «рецептов приготовления» MySQL в Битрикс24
9 min
79KВ нашей прошлой статье — «11 «рецептов приготовления» MySQL в Битрикс24» — мы, в основном, рассматривали архитектурные решения: стоит ли использовать облачные сервисы (типа Amazon RDS), какой форк MySQL выбрать и т.п.
Судя по отзывам, тема грамотной эксплуатации MySQL в больших «хайлоад» проектах — очень большая и важная. Поэтому мы решили рассказать еще о некоторых нюансах настройки и администрирования БД, с которыми сталкивались при разработке «Битрикс24» и которые используем ежедневно.
Еще раз напомню, что эта статья (как и предыдущая) не является универсальным «рецептом» идеальной настройки MySQL на все случаи жизни. :) Такого не бывает. :) Но искренне верю, что она будет полезной для вас для решения отдельных конкретных задач.
А в конце статьи — сюрприз для самых терпеливых читателей. :)
+46
Настоящий домашний кинотеатр
6 min
8.2KСегодня мне хотелось бы поговорить о настоящем домашнем кинотеатре. Да-да, именно о настоящем, а не о тех что «в одной коробке». Большинство упоминаний этого термина, ни имеет с настоящим домашним кинотеатром ничего общего.
-4
Мультидоменность в Apache без лишних хлопот на локальном хосте
3 min
49KИнтернет пестрит руководствами по настройке виртуальных хостов в Apache. Но, в большинстве случаев, создание такого поддомена представляется хлопотным делом.
По «стандартной» инструкции предлагается сделать следующее:
Некоторые пытаются оптимизировать данный процесс различными скриптами, но проблемы это, по сути, не решает.
Итак, попробуем добиться, чтобы процесс создания поддомена сводился лишь к созданию папки для сайта. Возможно ли это? Проверим…
По «стандартной» инструкции предлагается сделать следующее:
- Создать папку для сайта
- Создать конфигурационный файл с именем будущего домена
- Включить сайт специальной опцией
- Перезагрузить Apache
- Прописать наш домен в файле hosts
Некоторые пытаются оптимизировать данный процесс различными скриптами, но проблемы это, по сути, не решает.
Итак, попробуем добиться, чтобы процесс создания поддомена сводился лишь к созданию папки для сайта. Возможно ли это? Проверим…
+68
Многопоточный сервер на Perl? Легко!
3 min
14KИногда возникает необходимость написать какой-то простенький TCP либо UDP сервер. Например, сейчас у меня вполне успешно в production трудится собственная реализация DHCP (существующие не подходят из-за специфики). Обычно это делается просто — один цикл, слушаем сокет — и вуаля! Но не всегда «тупой» подход оправдан (нужно что-то более сложное — работа в несколько потоков, например), а использование тяжелой артиллерии слишком затратно.
Интересно? Добро пожаловать под кат.
Интересно? Добро пожаловать под кат.
+43
Закрепляем jQuery — 25 отличных советов
19 min
168KTranslation
Перевод отличной статейки. Думаю, будет полезна как новичкам, которые только приступили к использованию jQuery, так и тем, кто уже какое-то время с ним работает. А кого-то, возможно, заставит глянуть эту чудесную библиотечку. Многие советы имеют отношение не только к jQuery, но и к JavaScript в целом. Лично для меня была весьма и весьма познавательной, посему и захотелось донести это «до масс». Перевод не дословный, но передающий смысл и максимально адаптированный к русскому языку.
Далее все написано от имени автора оригинальной статьи.
jQuery прекрасен. Я использую его вот уже почти год и, хотя я и был достаточно впечатлен в самом начале, он нравится мне все больше и больше по мере использования и по мере того, как я узнаю о том, как он устроен внутри.
Я не эксперт в jQuery. И даже не претендую, поэтому, если встретите ошибки, смело поправляйте меня и вносите предложения по улучшению (поправлять и присылать поправки нужно автору статьи, а не перевода — зам. пер.).
Я называю себя «среднестатистическим» пользователем jQuery и я думаю, что всем остальным будет интересно почитать и что-нибудь почерпнуть из «фишек», «трюков» и техник, которые я освоил за последний год. Статья получилась куда длиннее, чем я предполагал изначально, так что в самом начале я привел «содержание» для более удобной навигации и возможности при желании пропустить не интересующие моменты.
Далее все написано от имени автора оригинальной статьи.
Введение
jQuery прекрасен. Я использую его вот уже почти год и, хотя я и был достаточно впечатлен в самом начале, он нравится мне все больше и больше по мере использования и по мере того, как я узнаю о том, как он устроен внутри.
Я не эксперт в jQuery. И даже не претендую, поэтому, если встретите ошибки, смело поправляйте меня и вносите предложения по улучшению (поправлять и присылать поправки нужно автору статьи, а не перевода — зам. пер.).
Я называю себя «среднестатистическим» пользователем jQuery и я думаю, что всем остальным будет интересно почитать и что-нибудь почерпнуть из «фишек», «трюков» и техник, которые я освоил за последний год. Статья получилась куда длиннее, чем я предполагал изначально, так что в самом начале я привел «содержание» для более удобной навигации и возможности при желании пропустить не интересующие моменты.
Содержание
- Загружайте фреймворк с Google Code
- Используйте «шпаргалку» (cheat sheet)
- Соединяйте все ваши скрипты и уменьшайте размер файла
- Используйте возможности Firebug для ведения логов
- Минимизируйте операции выборки в пользу кэширования
- Сводите манипуляции с DOM-деревом к минимуму
- Оборачивайте все в единый элемент, когда речь идет о любой вставке в DOM
- Используйте «id» вместо классов, где это возможно
- Задайте контекст своим селекторам
- Используйте последовательности вызовов методов с умом
- Научитесь правильно использовать анимацию
- Научитесь назначать и делегировать события
- Используйте классы для сохранения состояния
- Еще лучше — используйте встроенный в jQuery метод data() для сохранения состояния
- Пишите собственные селекторы
- Подготавливайте HTML и модифицируйте его, когда страница загружена
- Используйте «отложенную загрузку» (lazy loading) для определенного контента для выигрыша в общей скорости и преимуществ для SEO
- Используйте служебные функции jQuery
- Используйте «noconflict» для переименования глобального объекта «jquery», когда используете его с другими фреймворками
- Как узнать что картинки загружены?
- Всегда используйте последнюю версию
- Как проверить, что элемент существует?
- Добавляйте класс «JS» в элемент «html»
- Возвращайте «false» для отмены поведения по-умолчанию
- Короткая запись для события готовности документа
+176
Популярные ошибки администраторов jabber-серверов
2 min
30KВ связи с тем, что после недавних событий стали как грибы после дождя плодиться топики о том, как настроить свой jabber-сервер, я решил перечислить некоторые основные ошибки и заблуждения тех, кто настраивает jabber-сервер в первый раз. Речь пойдет про:
- SRV-записи
- SSL-сертификаты
- Заблуждения о транспортах
+65
AJAX для новичков
8 min
673KСейчас в сети Интернет наблюдается очень активное развитие (и даже использование) новых технологий. Одна из таких технологий — AJAX.
+39
Что такое «хорошее» ТЗ на сайт?
11 min
67KЯ могу припомнить на удивление мало материалов, посвященных проектированию сайтов и программ на русском языке, написанных русскоязычными авторами. Этому способствует и преимущественно экспортно-ориентированная разработка (оффшор) и отсутствие массового опыта создания информационных продуктов в нашей стране.
Надеюсь, что эта статья пригодится тем разработчикам и IT-менеджерам, кто ощутил перед собой проблему составления качественных документов на разработку сайта. Документов, которые кроме испорченной бумаги были бы хоть чем-то полезны.
Надеюсь, что эта статья пригодится тем разработчикам и IT-менеджерам, кто ощутил перед собой проблему составления качественных документов на разработку сайта. Документов, которые кроме испорченной бумаги были бы хоть чем-то полезны.
+109
Отслеживание исходящих ссылок с помощью Google Analytics
2 min
4.2KGoogle Analytics предоставляет широкие возможности по сбору и анализу статистики сайта, но, способ отслеживания исходящих ссылок, предлагаемый в справочном центре…
…мягко говоря, не очень удобен.
Поскольку сама возможность очень интересная, я решил все-таки использовать ее и при этом обойтись без прикрепления onclick к каждой внешней ссылке.
<a href="http://www.primer.ru" onClick="javascript:urchinTracker('/outgoing/primer_ru');">
…мягко говоря, не очень удобен.
Поскольку сама возможность очень интересная, я решил все-таки использовать ее и при этом обойтись без прикрепления onclick к каждой внешней ссылке.
+24
Information
- Rating
- Does not participate
- Location
- Минская обл., Беларусь
- Date of birth
- Registered
- Activity