Pull to refresh
31
0
Артур @Ar2r

PHP/Go Developer

Send message

Badoo PHP Code Formatter. Теперь в open source!

Reading time13 min
Views28K
Несколько лет назад компания Badoo начала значительно расти по числу сотрудников, с 20 до 100 и более. Это потребовало серьезной перестройки многих процессов, касающихся разработки. Одна из проблем, с которой мы столкнулись, — как заставить всех разработчиков следовать единому стандарту кодирования, чтобы весь наш код выглядел единообразно и был легко поддерживаемым?

Для решения этой задачи мы решили внедрить инструмент для форматирования кода, который умел бы следующее:

  1. выводить сообщения о несоответствии стандарту форматирования в виде списка, не трогая сам файл;
  2. автоматически исправлять все найденные проблемы с форматированием;
  3. уметь форматировать только часть файла (нам не нужно переформатировать репозиторий сразу целиком, чтобы не потерять историю).

Мы рассматривали два проекта, которые можно было бы взять за основу для написания такого инструмента — PHP Beautifier и PHP Code Sniffer. Первый умел форматировать код, но не умел печатать диагностику, а второй — наоборот, умел печатать диагностику, но не умел форматировать файлы. К сожалению, оба этих проекта, по нашей оценке, были не слишком пригодны для того, чтобы добавить в них недостающую нам функциональность, поэтому была написана новая утилита — phpcf (PHP Code Formatter). Уже в течение двух лет она работает как git pre-receive hook, настроенный на отклонение (!) изменений, которые не оформлены по нашему стандарту кодирования.

Наконец настало время открыть исходные тексты нашей утилиты для широкой публики: github.com/badoo/phpcf
Читать дальше →
Total votes 76: ↑73 and ↓3+70
Comments62

MySQL On air. Мониторим SQL запросы

Reading time4 min
Views40K
image
Разбираясь как работает та или иная CMS приходится использовать различные инструменты, облегчающие работу.
Наиболее интересная тема — это работа с баз(ой|ами) данных. Естественно для изучения запросов и результатов запросов нужно использовать что-то универсальное. Что-то, что будет работать стабильно как с известным движком, так и с самописной системой.
Предположим у вас оказалась система управления контентом и вам необходимо посмотреть как реализовано добавление новых пользователей или смена паролей.

Большинство инструментов позволяющих мониторить работу с БД являются платными [раз, два]. Я хотел что-то более легкое и удобное, поэтому выбрал mysql-proxy. Хотя возможности утилиты гораздо шире чем мне требуется, я опишу лишь основное. Работает как под Windows, так и под Unix системами.
Как я это использую?
Total votes 38: ↑33 and ↓5+28
Comments31

Набор Yii2 Behavior для хранения деревьев в БД и их совместного использования

Reading time7 min
Views25K

Привет, Хабр!

В одном своём проекте на Yii2 мне захотелось совместить Adjacency List и Nested Sets. Причём так, чтобы в случае отключения поведения Nested Sets, функционал оставался полностью работоспособен. Затем я понял, что Nested Sets мне не нужен, т. к. в базе всё равно приходилось хранить полный путь, поэтому на замену я решил применить Materialized Path. Имеющийся на GitHub Behavior (matperez/yii2-materialized-path) был недостаточно функционален, поэтому пришлось написать свой, а так как я недавно уже писал свои поведения для Adjacency List и Nested Intervals, я решил, почему бы не сделать набор таких поведений с единым API, и возможностью произвольно подключать их к модели одновременно, используя преимущество каждого.

Читать дальше →
Total votes 22: ↑20 and ↓2+18
Comments11

Создаём свой сайт для управления Ардуиной

Reading time3 min
Views67K
Как-то раз, мне на почту пришло письмо, человек интересовался возможностью реализации собственного сайта для работы с ардуиной. Что ж, подумал я, а ведь в самом деле, неплохо бы автоматизировать процесс создания подобных сайтов. Сказал-сделал, хорошо ли плохо, судите сами.
Читать дальше →
Total votes 17: ↑13 and ↓4+9
Comments3

Прогресс выполнения тяжелой задачи в PHP

Reading time6 min
Views51K
Случилось мне как-то иметь дело с тяжелым PHP-скриптом. Нужно было каким-то образом в браузере отображать прогресс выполнения задачи в то время, пока в достаточно длительном цикле на стороне PHP проводились расчёты. В таких случаях обычно прибегают к периодичному выводу строки вроде этой:

<script>document.getElementById('progress').style.width = '1%';</script>

Этот вариант меня не устраивал по нескольким причинам, к тому же мне в принципе не нравится такой подход.
Читать дальше →
Total votes 48: ↑31 and ↓17+14
Comments45

cut и grep или awk?

Reading time2 min
Views78K
Часто в скриптах можно встретить что-то вроде foobar|awk '{print $1}' («часто» — это действительно часто).

Такой вызов awk всего лишь вывходит первую (n-ную) колонку из вывода предыдущей команды. Но это явный оверкилл! awk — довольно мощный язык потоковой обработки данных, и применение его как простого field-separator не есть хорошо.

Для вырезания из строки указанного поля лучше использовать команду cut. Она умеет меньше, а потому проще в использовании и быстрее.

В современном линуксе обработка вызова awk куда более сложна, чем вызов cut. В дебиане, например, awk — линк на /etc/alternatives/awk, который ведёт (чаще всего) на gawk. Который почти в 10 раз больше по размеру, чем cut. Разумееся, cut загружаеся быстрее.

cut умеет вырезать не только байты, но и нужные поля (опция -f). Поле — это текст между разделителями. По-умолчанию разделитель пробел/табуляция, но он легко меняется опцией -d.

Второй подход — использовать опцию -o у grep. Эта опция выводит не всю строку, а только совпадающее с критерием поиска grep. Очевидно бесполезно при поиске точной подстроки, но очень полезно при использовании регулярных выражений.

Например,
grep -v "#" /etc/inittab |cut -f 4 -d : -s
выведет список программ, запускающихся init'ом (четвёртое поле, поля разделяются двоеточием).

Или
grep http://\\S\\+ -o /var/log/apache2/error.log
выдаст список URL'ов из файла с ошибками (первый урл в строке).

… и никакого awk.

UPD: В комментариях подсказывают ещё более интересную конструкцию без запуска внешнего файла (команда read реализуеся средствами bash'а):
foobar | (read p1 p2; echo p1)

P.S. Речь не о единичном вызове (тут нет разницы awk, grep или даже python/perl). Речь о множестве вызовов в цикле в скрипте. Все примеры сравнивайте в цикле с сотнями (лучше тысячами) вызовов.
Total votes 85: ↑77 and ↓8+69
Comments58

Запускаем PHPUnit тесты для проекта на 1С-Битрикс

Reading time3 min
Views16K
Здравствуйте коллеги,

В этом посте хочу показать свой способ запуска юнит-тестов на битрикс-проектах. При юнит-тестировании таких проектов существует известная проблема инициализации ядра системы. Ниже я покажу как мне удалось ее решить.
Читать дальше →
Total votes 10: ↑7 and ↓3+4
Comments8

Тамагочи в качестве ключа для домофона и проездного в метро

Reading time2 min
Views47K


В видео показан способ превращения тамагочи в домофонный ключ и проездной для общественного транспорта.В итоге мы получаем двухдиапазонный ключ на 125 кГц и 13 МГц.
В качестве низкочастотного чипа используется перезаписываемый Atmel T5577.
Вместо проездного можно использовать любой высокочастотный чип, например mifare zero для записи на него студенческой карты.

Читать дальше →
Total votes 32: ↑21 and ↓11+10
Comments22

Как отобразить количество оповещений в названии вкладки браузера

Reading time3 min
Views33K


Веб-сайты и веб приложения с постоянно обновляющимся контентом должны оповещать об обновлениях в том случае, если пользователь ушел с вкладки, но не закрыл ее.

Существует пара наиболее распространенных способов оповещения пользователя. С одной стороны, социальные сети Facebook, Twitter и LinkedIn указывают определенное число, которое соответствует количеству обновлений. С другой стороны, Trello отображает небольшой красный кружок поверх favicon.

Trello Facebook and Twitter notifications
Оповещения Trello, Facebook и Twitter

В этом уроке мы воссоздадим подобные оповещения. Посмотрите демо (англ.), чтобы понять, чем мы будем заниматься.

Посмотреть на GitHub
Демо (рус.)
Читать дальше →
Total votes 53: ↑40 and ↓13+27
Comments17

Простой PHP генератор сложных HTML таблиц

Reading time5 min
Views50K
Всем привет. Хочу поделиться свеженаписанным генератором HTML таблиц.

Участились случаи сбора различной статистики и компоновки ее в сложные таблицы с различными групировками.

image

Заметив такую тенденцию решил автоматизировать рисование таблиц.

Как итог:
  • Избавил себя от составления слоеных циклов для вывода массива;
  • Получил стандартизацию структуры массивов;
Читать дальше →
Total votes 37: ↑29 and ↓8+21
Comments19

Kodak Zx5 — обновленное железо в обновленном корпусе

Reading time4 min
Views9.6K
Продолжу серию обзоров карманных камкодеров от Kodak. На этот раз речь пойдет об обновленном Kodak Playsport, а именно Kodak Playsport Zx5. Обзор будет разбавлен впечатлениями о старой модели Kodak Zi8.

Улучшения в новой версии Playsport по отношению к предыдущим:
— Автофокус
— Улучшенное фокусное расстояние 37 мм против 40 и 42 мм у Zx3 и Zi8 соответственно (при разрешении 720p)
— Более чувствительная матрица, хоть и меньших размеров
— Меню прошивки Zx5 полностью переработано и отличается от Zx3 или Zi8
— В Zx5 после Zx3 вернули макро съемку
— Битрейт выше, чем у Zi8.
— Средняя цена в начале продаж 6000 руб вместо 7000 руб за Zi8.

Количество режимов съемки не изменилось, их всё еще 5:
WVGA — 848 x 480, 30 кадров/с (iPad compatible)
720p — 1280 x 720, 30 кадров/с
720p — 1280 x 720, 60 кадров/с
1080p — 1920 x 1080, 30 кадров/с
фото — 5,3 МП

Внешний вид и комплектация

Выглядит новое чудо техники вот так:


Читать дальше →
Total votes 21: ↑17 and ↓4+13
Comments25

Реклама на Youtube. Один из методов борьбы

Reading time1 min
Views42K
Привет, Хабр.
В свете изменений работы Youtube c рекламой (см. пост), думаю, что для многих людей будет востребованным клиент для просмотра роликов отдельно от браузера.

Я остановился на последней версии плеера Minitube 1.4.3 распространяемого под Windows, Linux, Mac и в виде исходных кодов.

Из достоинств такого рода приложений стоит отметить:
— блокировку дурацкой всплывающей рекламы пылесосов (думаю, что заблокирует и видео рекламу);
— не нужно грузить машину флешем (актуально для владельцев нетбуков и слабых ноутбуков);
— довольно грамотно реализованный механизм поиска;
— в большинстве клиентов реализован механизм скачивания понравившегося ролика, в minitube можно скачивать в нужном качестве.
Каждый сможет поискать альтернативный клиент, я рассказываю на примере minitube, потому что активно использую его.
Читать дальше →
Total votes 62: ↑43 and ↓19+24
Comments67

Возвращаем прошитый HTC Desire S к стоковому состоянию

Reading time3 min
Views58K
В прошлый раз я рассказывал, как можно установить на HTC Desire S альтернативную прошивку от Cyanogen, теперь давайте разберемся, как же вернуть телефон к фабричному виду.
Читать дальше →
Total votes 32: ↑25 and ↓7+18
Comments32

Заботливое компьютерное кресло

Reading time8 min
Views255K
   Выбор нового компьютерного кресла у меня начался с того, что неприятность случилась с предыдущим – в крестовине ножки появилась большая трещина, из-за которой пневмопатрон с хрустом ушел в пол и заклинил, прилично исцарапав весь ламинат.

image

   Насчет ламината меня быстро успокоили – оказывается, были случаи, когда пневмопатрон выходил через верх, делая больно беспечному владельцу вплоть до летального исхода )
Читать дальше →
Total votes 279: ↑210 and ↓69+141
Comments379

«Мм… Стационарный, это как?» — или без лоха и жизнь плоха

Reading time1 min
Views706
Прошел год, а ничего не изменилось — фирмы по ремонту компьютерной техники как плодились так и плодятся. Обман, развод на ровном месте, дискредитация в лицах.

Ролик снимался год назад для информационного сайта. В роли «жертвы» — мой друг, имеющий дело с компьютерным железом каждый день и знающий реальные расценки на подобные услуги.

Total votes 63: ↑50 and ↓13+37
Comments71

Ошибка в Windows 7

Reading time1 min
Views453
Рассмотрим следующий сценарий: у вас — компьютер под управлением Windows 7 или Windows Server 2008 R2. Вы добавляете в систему жёсткий диск объёмом более 2 Терабайт. Вы конфигурируете систему на сохранение dump-файлов на определённый том этого жёсткого диска.

И здесь вас может поджидать неприятный «баг», документированный корпорацией Microsoft. Из-за проблем с адресацией dump-файл пытается разместиться за пределами адресного пространства жёсткого диска. Происходит сбой в работе операционной системы, она сохраняет dump-файл, и в результате один или несколько томов указанного жёсткого диска оказываются логически повреждёнными, а вся информация на них становится недоступной.

Примерно такая же ситуация из-за проблем адресации с дальнейшим повреждением логической структуры диска возникает в случае сохранения файла Hiberfile.sys (в процессе включения режима «спячки»). Естественно, если у вас повреждённым оказывается том, на котором установлена операционная система, компьютер перестанет загружаться.

Ошибка очень серьёзная, что и говорить. Подробности о ней вы можете узнать на этой странице. Заплатки в открытом доступе нет, но если она вам требуется, вы можете заказать её скачивание в службе поддержки корпорации Microsoft.

p.s.Оригинал статьи
Total votes 40: ↑28 and ↓12+16
Comments11

SkypeIN в России

Reading time1 min
Views545
Пользователи, следящие за появлением SkypeIN в России, не могли пропустить в феврале пост о появлении подобной услуги.

Теперь уже американская компания Telphin USA выходит на российский рынок услуг предоставления прямых номеров для пользователей Skype:
Читать дальше →
Total votes 17: ↑10 and ↓7+3
Comments21

Ба! Знакомые все лица! (Lightroom 3 и распознавание лиц)

Reading time2 min
Views6.6K
image
Сравнительно недавно, «по совету друзей», открыл для себя программу Google Picasa. Больше всего понравилась мне возможность распознавания лиц и автоматической простанавки тегов на их основе. Несколько дней я провел над подписыванием лиц в своей немаленькой фотоколлекции… Когда же работа была завершена, то встал вопрос — что же делать дальше? Ибо в качестве каталогизатора и редактора Picasa серьезно уступает специализированным инструментам. Постепенно вопрос трансформировался в такой: как перенести (а лучше регулярно синхронизировать) информацию о контактах из Picasa в предпочитаемый мною Lightroom?
Что же в итоге получилось?
Total votes 41: ↑38 and ↓3+35
Comments39

Вывод средств из webmoney c помощью «мгновенных» переводов

Reading time4 min
Views1.1K
image
Доброго времени суток, хабрасообщество.

Хочу поделиться опытом попытки вывода денежных средств из платежной системы Webmoney. «Мгновенные» переводы не оправдали своего названия, но обо всём по порядку.

Предыстория


Наверное многие участники системы Webmoney хотя бы раз пользовались денежными переводами ( perevod.webmoney.ru ) для осуществления вывода средств наличными из системы, хотя перевод по банковской карте гораздо удобнее и безопаснее. Но всё же, не всегда есть возможность вывода по карте, потому иногда приходится пользоваться переводами, особенно, когда деньги нужны как можно быстрее. Так вот, я привык пользоваться переводами, больше всего радует система «Анелик», но с недавних пор на сайте perevod.webmoney.ru появилась новая система денежных переводов под названием «Золотая корона», которой я решил на этот раз воспользоваться, так как один из «пунктов выдачи денежных средств» был прямо перед моим домом, через дорогу. К моему удивлению, таким пунктом оказался один из магазинов известной российской сети салонов мобильной связи «Связной» ( www.svyaznoy.ru ). Но так как деньги нужны были срочно, я не долго думая подтвердил перевод и после часа ожидания побежал в Связной за желанными деньгами. Но не тут-то было, подробности под катом.
Читать дальше →
Total votes 33: ↑26 and ↓7+19
Comments17

Защита картинок от копирования без «водяных знаков» — защита от дурака

Reading time3 min
Views9.9K
Большинство веб-программистов рано или поздно сталкивается с вопросом защиты изображений от копирования для последующего распространения. Обычно, это решается при помощи GD — лепкой на нужные картинки большой прозрачной надписи типа «www.%sitename%.ru» или сильным уменьшением качества изображения, реже — блокировкой контекстного меню, ещё реже — клавиши Ctrl.

В своё время, когда у меня встал подобный вопрос, но варианты «водяные знаки» или «ухудшение качества» были неприемлемы, я заморочился и придумал кое-какое решение. Это, конечно, не панацея (кому надо — тот всё равно утянет), но в качестве «защиты от дурака» справляется на ура.

Кому интересно, добро пожаловать под кат.
Читать дальше →
Total votes 108: ↑56 and ↓52+4
Comments74

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity