Unknown user @AGvinread-only
Пользователь
Процедурное текстурирование: генерация текстуры булыжника
9 мин
23K

Пишем генератор, который принимает с десяток входных параметров и выдает текстуру булыжника.
+94
Игра в машинки по-взрослому
5 мин
12KЧто общего может быть между грузоперевозками, уборкой улиц, бурением скважин и работой служебного транспорта? Все они обеспечивают выполнение необходимых задач и потому их работа должна встраиваться в уже отлаженную систему вашей компании.
Сегодня мы расскажем о том, как мы придумали решить эту задачу.

Сегодня мы расскажем о том, как мы придумали решить эту задачу.

-7
Декораторы в PHP. Реализация расширения
11 мин
12K
По результатам опроса в первой статье, решено было сделать обзор реализации расширения. К этому моменту в угоду существующим IDE немного изменился синтаксис, который, пожалуй, был наиболее оЭто не еще-одна-статья-о-hello-world-расширении, т.к. желающим разобраться в основах легко найти массу материалов как на самом Хабре, так и в русскоязычном RTFG.
Статья о предпосылках, реализации и подводных камнях. В ней будет мало PHP, в основном C.
+33
Блокировки сессий в веб-проектах — выбираем эффективное оружие
4 мин
20KВсем привет!
В последнее время, в связи с бурным ростом и усложнением фронт-эндов, аяксами и т.п. — все чаще проявляется проблема блокировки сессий во время эксплуатации сайтов на PHP. PHP по умолчанию создает для сессии файл и процесс эксклюзивно его блокирует. Остальные процессы, пытающиеся открыть сессию (аяксы, табы в браузере) — выстраиваются в очередь. Не всегда логика приложения, особенно если она сложная, позволяет эффективно ограничить время блокировки конкурирующих за сессию процессов.
Ситуация усугубляется еще тем, что 3-5 подобных клиентов способны быстро забить зависшими и простаивающими в ожидании процессами PHP-воркеры и сайту становится плохо, если не сказать очень.
К сожалению, разработчики/сисадмины не всегда могут сразу понять, что дело в блокировке сессии — и ищут проблемы в других частях проекта, теряя время.
В статье расскажу какие инструменты позволяют быстро диагностировать проблему, приведу работающий код и дам несколько боевых рекомендаций по выживанию :-)
В последнее время, в связи с бурным ростом и усложнением фронт-эндов, аяксами и т.п. — все чаще проявляется проблема блокировки сессий во время эксплуатации сайтов на PHP. PHP по умолчанию создает для сессии файл и процесс эксклюзивно его блокирует. Остальные процессы, пытающиеся открыть сессию (аяксы, табы в браузере) — выстраиваются в очередь. Не всегда логика приложения, особенно если она сложная, позволяет эффективно ограничить время блокировки конкурирующих за сессию процессов.
Ситуация усугубляется еще тем, что 3-5 подобных клиентов способны быстро забить зависшими и простаивающими в ожидании процессами PHP-воркеры и сайту становится плохо, если не сказать очень.
К сожалению, разработчики/сисадмины не всегда могут сразу понять, что дело в блокировке сессии — и ищут проблемы в других частях проекта, теряя время.
В статье расскажу какие инструменты позволяют быстро диагностировать проблему, приведу работающий код и дам несколько боевых рекомендаций по выживанию :-)
+10
Создание npm-пакета
2 мин
65K
Типичная ситуация — в проекте существует некий модуль. Модуль развивается, становится самостоятельным элементом и копируется в другой проект. Потом еще один проект. И еще.
В каждом проекте модуль обновляется и улучшается, и, в какой-то момент, становится не понятно, где актуальная версия. Да ладно, «не понятно где актуальная версия»! Вполне возможно, что в каждом проекте у модуля будут свои модификации, в которые будет достаточно сложно привести в порядок для использования в следующем проекте.
Вполне можно ограничиться созданием отдельного репозитория для модуля, например на GitHub или Bitbucket. Но добавлять репозиторий как субмодуль для GIT — это путь к приключениям.
Но можно пойти дальше, и создать на основе такого модуля npm-пакет. Работать с такими пакетами очень просто. Установить npm-пакет можно с помощью команды
npm install, а обновить с помощью npm update.+17
4 ошибки, которые я допустил как технический директор
6 мин
148KRecovery Mode
На самом деле, ошибок было, безусловно, больше, но сейчас, спустя два года после начала работы в должности технического директора одного крупного мобильного аутсорсера, именно эти 4 кажутся мне главными.
На позицию CTO я пришёл не через стандартный путь “Developer -> Senior -> Team lead -> CTO”, а через гуманитарный вариант – “PM -> Senior PM -> CTO”. В этом были как свои плюсы, так и минусы, и трудно сказать, чего больше, но персональных вызовов хватало всегда и техническое прошлое часто спасало, однако, сейчас не об этом.
Помимо того, что я вынес в подзаголовок, сразу скажу, что первой ошибкой было всё-таки желание участвовать вообще во всех оценках, что отнимало у меня 60-70% времени поначалу. Постепенно я от этого отказался и стал заниматься только крупными лидами, оставив более мелкие оценки полностью на откуп тимлидам, которым научился доверять.
Оценка потенциальных проектов в аутсорсе – это то, от чего сильно меняется восприятие процесса разработки и может поехать чердак.
На позицию CTO я пришёл не через стандартный путь “Developer -> Senior -> Team lead -> CTO”, а через гуманитарный вариант – “PM -> Senior PM -> CTO”. В этом были как свои плюсы, так и минусы, и трудно сказать, чего больше, но персональных вызовов хватало всегда и техническое прошлое часто спасало, однако, сейчас не об этом.
4. Вынужденные оценки
Помимо того, что я вынес в подзаголовок, сразу скажу, что первой ошибкой было всё-таки желание участвовать вообще во всех оценках, что отнимало у меня 60-70% времени поначалу. Постепенно я от этого отказался и стал заниматься только крупными лидами, оставив более мелкие оценки полностью на откуп тимлидам, которым научился доверять.
Оценка потенциальных проектов в аутсорсе – это то, от чего сильно меняется восприятие процесса разработки и может поехать чердак.
+112
Простой способ переноса больших файлов по частям
1 мин
31KБывает, что необходимо перенести большой файл, например, на flash с файловой системой FAT16/32 или загрузить на сервер по частям. На помощь придут две программы, которые, как правило, присутствуют в любом дистрибутиве Linux и Mac OS.
Команда split
разобьет исходный файл sample.iso на части по 4 Гбайта (максимальный размер файла в FAT), каждая из которых будет именоваться как sample.iso.partN, где N = 0, 1, 2,… .
Собрать части воедино на целевой системе поможет команда cat:
Применение маски приведет к тому, что утилита cat переберет все файлы по порядку, начиная с sample.iso.part0.
Этот наглядный пример показывает, как можно перенести большой файл. Более подробную информацию по использованию cat и split можно получить в справке (--help) и руководствам (man) к программам.
Команда split
$ split -a 1 -d -b 4000M sample.iso sample.iso.partразобьет исходный файл sample.iso на части по 4 Гбайта (максимальный размер файла в FAT), каждая из которых будет именоваться как sample.iso.partN, где N = 0, 1, 2,… .
Собрать части воедино на целевой системе поможет команда cat:
$ cat sample.iso.part* > sample.isoПрименение маски приведет к тому, что утилита cat переберет все файлы по порядку, начиная с sample.iso.part0.
Этот наглядный пример показывает, как можно перенести большой файл. Более подробную информацию по использованию cat и split можно получить в справке (--help) и руководствам (man) к программам.
+36
Записи докладов с конференций по высоким нагрузкам HPC
1 мин
17KЗаписи с последней конференции HPC — High Performance Conference, состоявшейся 6 декабря 2012, никак не анонсировались, хотя заслуживают внимания.
Под катом видеозаписи следующих докладов:
и одно видео с фестиваля профессионального развития BitByte:

Под катом видеозаписи следующих докладов:
- Практические вопросы использования NOSQL в высоконагруженном проекте
Дмитрий Ананьев, Руководитель группы разработки новых сервисов, Мамба - Как работает «умная живая миграция» в Jelastic
- Дмитрий Лазаренко, Директор R&D, Jelastic Russia
- Parallels Cloud Server как платформа для высокопроизводительных систем
Дмитрий Мишин, Team-lead отдела серверной виртуализации, Parallels - Облачная платформа Windows Azure для высоконагруженных проектов
Владимир Юнев, Technical evangelist, DPE, Microsoft Russia
и одно видео с фестиваля профессионального развития BitByte:
- Badoo Desktop: оптимизация приложения на миллион юзеров
Руководитель проекта десктопных приложений компании Badoo.

+39
NoSQL и Big Data – обман трудящихся?
4 мин
71K
Недавно нам удалось пообщаться с великим Монти — Майклом Видениусом, автором оригинальной версии открытой СУБД MySQL, который в настоящее время работает над ее ответвлением, MariaDB. (Кстати, обе эти базы поддерживаются в Jelastic.)Как известно, мир производит и обрабатывает все больше данных (так называемый феномен «Big Data»). Общепринято мнение, что данных теперь так много, что обрабатывать их с помощью традиционных баз данных и программных методов трудно или невозможно. Это вызвало волну нереляционных баз данных (NoSQL), в которых упор делается на высокую масштабируемость. Эксперт в области баз данных, Монти, поделился с нами своими мыслями о текущем и будущем состоянии SQL, NoSQL и Big Data. Некоторые его ответы были несколько неожиданными, так что мы с радостью приводим здесь русский перевод расшифровки нашей беседы:
+75
Traits в php 5.4. Разбираем детали реализации
8 мин
53KТуториал
Совсем недавно вышла первая beta php 5.4, а пока я писал топик подоспела и вторая. Одно из нововведений в 5.4 – это traits (типажи). Предлагаю разобраться во всех деталях в том, что же типажи из себя представляют в php.
Простой пример типажа, чтобы не заглядывать в Википедею:
Как видно, к классу
Но во всём есть свои детали.
Простой пример типажа, чтобы не заглядывать в Википедею:
//определение типажа
trait Pprint
{
public function whoAmI()
{
return get_class($this) . ': ' . (string) $this;
}
}
class Human
{
use Pprint; //подключаем типаж, ключевое слово use
protected $_name = 'unknown';
public function __construct($name)
{
$this->_name = $name;
}
public function __toString()
{
return (string) $this->_name;
}
}
$a = new Human('Nikita');
echo $a->whoAmI(), PHP_EOL; //=> Human: Nikita
Как видно, к классу
Human было добавлено поведение из типажа Pprint.Но во всём есть свои детали.
+147
Дамп memcached на диск
3 мин
9.3KAPI взаимодействия с memcached представлен во всех популярных языках, поэтому в задачах кэширования это наиболее используемый инструмент. В случае когда не требуется ничего кроме кэширования, видимо, — самый оправданный.
Одна из проблем с которой я столкнулся при работе с memcached — невозможность сбросить его состояние на диск. Существующие решения либо не являлись простым кэшом (представляя скорее БД), либо не были настолько же стабильны и поддерживаемы. Вдобавок имелось желание «покодить», поэтому какой-то из готовых вариантов я мог банально упустить.
Одна из проблем с которой я столкнулся при работе с memcached — невозможность сбросить его состояние на диск. Существующие решения либо не являлись простым кэшом (представляя скорее БД), либо не были настолько же стабильны и поддерживаемы. Вдобавок имелось желание «покодить», поэтому какой-то из готовых вариантов я мог банально упустить.
+25
Алгоритмы борьбы украинских айтишников с НДС
2 мин
7.1KНалоговыми льготами украинских айтишников пытались осчастливить неоднократно: и освобождением от НДС в 2011 году, и внезапным, без объявления войны, возвратом НДС в середине этого же года, и льготами по налогу на прибыль с 2012 года, и мутной процедурой получения этих льгот.
Стремление властей организовать и возглавить ИТ-отрасль понятна: один только экспорт программ достиг 1,4 миллиарда долларов в 2012 году. И вся эта вкусность рассредоточена по десяткам тысяч программистов-единоналожников. Которые платят бюджету в лучшем случае 5% с дохода. Даже если де-факто они являются работниками на ИТ-предприятии.
Но поскольку программисты, в силу своей профессии, умеют пользоваться калькулятором и довольно несуетны, то до 2013 года они относительно спокойно переживали фокусы законотворчества.
А вот с 1 января 2013 года ряду ИТ-предприятий пришлось несладко. Их загнали в цуцванг:
— согласно разделу ХХ Налогового кодекса поставки программной продукции освободили от уплаты НДС;
— письмом налоговой № 6239/10/06-408 от 02.10.12 «разъяснили», что эта льгота действует только для зарегистрированных субъектов программной индустрии;
— зарегистрироваться субъектом программной индустрии практически невозможно.
Короче, хоть плати НДС с продажи программ, хоть не плати, серьезных проблем не избежать.
ВЫ ДУМАЕТЕ ОНИ НЕ ВЫКРУТИЛИСЬ? ЕЩЕ КАК!
Изучив опыт поставщиков массового программного обеспечения Украины, мы были восхищены их изобретательностью:
Стремление властей организовать и возглавить ИТ-отрасль понятна: один только экспорт программ достиг 1,4 миллиарда долларов в 2012 году. И вся эта вкусность рассредоточена по десяткам тысяч программистов-единоналожников. Которые платят бюджету в лучшем случае 5% с дохода. Даже если де-факто они являются работниками на ИТ-предприятии.
Но поскольку программисты, в силу своей профессии, умеют пользоваться калькулятором и довольно несуетны, то до 2013 года они относительно спокойно переживали фокусы законотворчества.
А вот с 1 января 2013 года ряду ИТ-предприятий пришлось несладко. Их загнали в цуцванг:
— согласно разделу ХХ Налогового кодекса поставки программной продукции освободили от уплаты НДС;
— письмом налоговой № 6239/10/06-408 от 02.10.12 «разъяснили», что эта льгота действует только для зарегистрированных субъектов программной индустрии;
— зарегистрироваться субъектом программной индустрии практически невозможно.
Короче, хоть плати НДС с продажи программ, хоть не плати, серьезных проблем не избежать.
ВЫ ДУМАЕТЕ ОНИ НЕ ВЫКРУТИЛИСЬ? ЕЩЕ КАК!
Изучив опыт поставщиков массового программного обеспечения Украины, мы были восхищены их изобретательностью:
-1
Как стать кукловодом или Puppet для начинающих
7 мин
110KТуториал
Здравствуйте.

Этот топик открывает цикл статей по использованию системы управления конфигурацией Puppet.
Предположим, что у вас есть парк серверов, выполняющих различные задачи. Пока серверов мало и вы не растёте, вы легко настраиваете каждый сервер вручную. Устанавливаете ОС (может быть, автоматизированно), добавляете пользователей, устанавливаете софт, вводя команды в консоль, настраиваете сервисы, правите конфиги ваших любимых текстовых редакторов (nanorc, vimrc), выставляете на них одинаковые настройки DNS-сервера, устанавливаете агент системы мониторинга, настраиваете syslog для централизованного сбора логов… Словом, работы довольно много и она не особенно интересна.

Этот топик открывает цикл статей по использованию системы управления конфигурацией Puppet.
Что такое система управления конфигурацией?
Предположим, что у вас есть парк серверов, выполняющих различные задачи. Пока серверов мало и вы не растёте, вы легко настраиваете каждый сервер вручную. Устанавливаете ОС (может быть, автоматизированно), добавляете пользователей, устанавливаете софт, вводя команды в консоль, настраиваете сервисы, правите конфиги ваших любимых текстовых редакторов (nanorc, vimrc), выставляете на них одинаковые настройки DNS-сервера, устанавливаете агент системы мониторинга, настраиваете syslog для централизованного сбора логов… Словом, работы довольно много и она не особенно интересна.
+48
Приемы написания скриптов на Bash. #2
11 мин
28KТуториал
Моя прошлая статья Приемы написания скриптов на Bash вызвала жаркие дебаты в комментариях. Основной ее посыл был в использовании библиотеки функций. Кроме того я описал способ разбора параметров в Bash. Благодарю всех за конструктивные комментарии. Обращаю Ваше внимание, что статья предполагается для широкого круга читателей, а не адресована исключительно системным администраторам.
Продолжим начатое, и на реальном примере дополним подход к разбору параметров и унификации функционала скриптов.
Продолжим начатое, и на реальном примере дополним подход к разбору параметров и унификации функционала скриптов.
+19
Collectd — Следим за системой с минимальными затратами. Настройка и использование нотификаций
8 мин
44KЧто это такое?
Collectd — это небольшой демон, который каждые 10 секунд собирает
статистку об использовании ресурсов системы. Есть возможность сбора
статистики для нескольких хостов и отсылка её на сервер, который
занимается отрисовкой красивых графиков.
Основное отличие этого сборщика в том, что он работает по принципу push, а не poll/pull. Т.е. он «висит» и слушает, а сервера ему сами статистику присылают.
Что мы будем делать?
Что я хочу описать в этом посте:
- Установка.
- Настройка общая.
- Настройка отдельных плагинов.
- Настройка slave серверов, которые будут слать нам на главный сервер свою статистику работы.
- Настройка нотификаций по email.
+20
Inline-block как замена float
2 мин
147KПолгода назад я делал перевод статьи на Хабре Подробно о свойстве float. В этот раз взглянем на него немного под другим углом. При разработке сайта мы часто используем float'ы для позиционирования некоторых блоков на странице, например сайдабара. Но так ли это необходимо?
Float не всегда удобен: например при верстке сетки с изображением. Иногда уместно применять inline-block, который имитирует поведение float'а.
Обычная структура блочного элемента:

Inline-block — это значение, которые можно назначить свойству display. Название происходит от некоторых характеристик как строчного, так и блочного элементов.
Float не всегда удобен: например при верстке сетки с изображением. Иногда уместно применять inline-block, который имитирует поведение float'а.
Что такое inline-block?
Обычная структура блочного элемента:

Inline-block — это значение, которые можно назначить свойству display. Название происходит от некоторых характеристик как строчного, так и блочного элементов.
+41
Производительность веб-шрифтов
3 мин
42K
Применение веб-шрифтов становится все популярнее: согласно HTTP Archive, за последний год число сайтов, использующих дополнительные шрифты, выросло вдвое — с 6 до 12%.
Слабым местом веб-шрифтов является производительность, однако ситуация постепенно меняется в лучшую сторону: появляются более совершенные методы сжатия, улучшается поддержка браузерами, unicode, отдельные наборы шрифтов и т.д.
+34
Геотаргетинг nginx, частный случай
4 мин
16KВозникла задача сделать геотаргетинг для регионов России на новостном сайте, т.е. при заходе на главную страницу, должно происходить перенаправление на региональную страницу сайта с адресами вида: region/[номер региона], причем перенаправление клиента должно осуществляться на nginx-е без передачи данных на апач, в противном случае это лишняя ненужная нагрузка на сервер.
+18
Phalcon — скомпилированный PHP MVC Framework
7 мин
56KТуториал

Создание скомпилированных MVC фреймворков для PHP не раз приходила на ум кодерам.
Достоинства такого подхода:
- Высокая производительность
- Малая нагрузка файловой системы
- Меньший расход памяти (при строгой типизированности)
- Частичная обработка данных без интерпритации
И само собой не менее явные недостатки:
- Если Вы не знаете C, то Вы полностью зависите от разработчиков
- Проект может в любую секунду сдуться
- В зависимости от архитектуры, часть модулей все равно приходится писать самому, что уменьшает выигрыш
+39
Информация
- В рейтинге
- Не участвует
- Откуда
- Австрия
- Дата рождения
- Зарегистрирован
- Активность
