Pull to refresh
0
0
Иван Волков @oOLokiOo

Пользователь

Send message

Как не надо разрабатывать проект на Битрикс

Reading time4 min
Views15K
За все время своей работы с Битрикс мне довелось поработать с очень большим количеством проектов, которые кто-то разрабатывал до меня. Тут и мелкие доработки, фикс различных багов и ошибки работы логики, редизайн сайта и глобальные изменения существующего функционала. И, как и любой другой разработчик, я терпеть не могу разгребать чужой мусор, костыли и «временные» заплатки, которые на деле помнят еще 8 редакцию продукта.
Читать дальше →
Total votes 28: ↑23 and ↓5+18
Comments29

Исповедь Битрикс хейтера

Reading time47 min
Views172K
Что-то много развелось в последнее время статей про минусы битрикса, и их опровержений. Раз уж пошла такая пьянка, то и я добавлю свои 5 копеек.
В комментариях к статьям писали, что не хватает конкретики, примеров, более глубокого обзора.

Данная статья — попытка этот обзор написать. Хотя нет, это скорее пост ненависти и боли (может даже немного нытья). Это такой расширенный вариант поста про минусы от pistol. Я постараюсь описать большинство тех вещей, которые раздражают именно меня и моих коллег в Битриксе. Постараюсь собрать в одном посте все те минусы, которые доставляют ежедневно очень много боли. Под конец я постараюсь сделать выводы.

Кто я такой? Да в общем-то, обычный разработчик. Работаю с битриксом с ноября 2010 года (5.5 лет). Работаю только с битриксом, не сделал ни одного коммерческого проекта на других CMS, не использовал фреймворки в создании сайтов. По роду деятельности я занимаюсь в основном интернет-магазинами, их созданием, поддержкой и развитием.
Читать дальше →
Total votes 122: ↑111 and ↓11+100
Comments180

Сравниваем PHP FPM, PHP PPM, Nginx Unit, React PHP и RoadRunner

Reading time11 min
Views50K


Тестирование производилось с помощью Yandex Tank.
В качестве приложения использовались Symfony 4 и PHP 7.2.
Целью являлось сравнение характеристик сервисов при разных нагрузках и нахождение оптимального варианта.
Для удобства все собрано в docker-контейнеры и поднимается с помощью docker-compose.
Под катом много таблиц и графиков.
Читать дальше →
Total votes 72: ↑67 and ↓5+62
Comments46

RoadRunner: PHP не создан, чтобы умирать, или Golang спешит на помощь

Reading time8 min
Views51K


Привет, Хабр! Мы в Badoo активно работаем над производительностью PHP, поскольку у нас достаточно большая система на этом языке и вопрос производительности — это вопрос экономии денег. Более десяти лет назад мы создали для этого PHP-FPM, который сначала представлял собой набор патчей для PHP, а позже вошёл в официальную поставку.

За последние годы PHP сильно продвинулся вперёд: улучшился сборщик мусора, повысился уровень стабильности — сегодня на PHP можно без особых проблем писать демоны и долгоживущие скрипты. Это позволило Spiral Scout пойти дальше: RoadRunner, в отличие от PHP-FPM, не очищает память между запросами, что даёт дополнительный выигрыш в производительности (хотя этот подход и  усложняет процесс разработки). Мы сейчас экспериментируем с этим инструментом, но у нас пока нет результатов, которыми можно было бы поделиться. Чтобы ждать их было веселее, публикуем перевод анонса RoadRunner от Spiral Scout.

Подход из статьи нам близок: при решении своих задач мы тоже чаще всего используем связку PHP и Go, получая преимущества от обоих языков и не отказываясь от одного в пользу другого.

Enjoy!
Читать дальше →
Total votes 75: ↑74 and ↓1+73
Comments53

Yandex «Почта для домена» как почтовый шлюз для ваших серверов

Reading time6 min
Views85K

Каждый раз поднимая новый сервер в облаках, вы получаете случайный IP-адрес. Не все понимают, что IP-адрес может попасть к вам с "историей". Часто приходится тратить время на удаление IP из публичных черных списков. В моём случае в последний раз это была очень неторопливая переписка с mail.ru, которая ни к чему не привела. После этого, создав новый сервер, я задумался: как же сделать так, чтобы не огребать проблем с такими IP-адресами?

Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments21

Пишем CLI модуль для Zend Framework 2

Reading time14 min
Views12K
image
Приветствую!

Недавно начал работать с Zend Framework 2, и возникла потребность написать cli модуль работающий с миграциями базы данных.

В этой статье я опишу как создать модуль для Zend 2 для работы с ним из командной строки на примере модуля миграций, как написать тесты, как опубликовать модуль в packagist.org

Что такое миграции: Миграции базы данных — это система классов описывающая действия над базой данных и позволяющая выполнять эти действия.

Установка фрэймворка


Начнем с установки фрэймворка, в качестве каркаса возьмем ZendSkeletonApplication
Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments5

Пример разработки блога на Zend Framework 2. Часть 1. ZendSkeletonApplication

Reading time10 min
Views68K
В последние несколько лет моя работа связана с использованием CMS Drupal, но на досуге я изучал и just for fun запускал проекты на питоновских фреймворках Django, Flask и Twisted. Сейчас я решил освоить основы двух-трех популярных PHP-фреймфорков и первыми я решил изучить Zend Framework 2 и Yii.

В процессе ознакомления с Zend Framework 2 я изучил туториал с официального сайта (http://framework.zend.com/manual/2.2/en/user-guide/overview.html), просмотрел документацию фреймворка (http://framework.zend.com/manual/2.2/en/index.html), прочитал книгу Michael Romer “Web development with Zend Framework 2” и собрал собственное тестовое приложение.

Переварив всю эту информацию, я пришел к мысли, что официальный туториал к фреймворку суховат:
  • в нем не рассказывается о работе с пользователями, сессиями и правами доступа,
  • лишь вскользь рассматривается такая основополагающая часть фреймворка как ServiceManager,
  • в качестве интерфейса с базой данных безальтернативно используется паттерн Table Gateway (и соответствующая его реализация в фреймворке),
  • используется встроенный в фреймворк шаблонизатор, который после питоновского Jinja 2 кажется совершенно неудобным и примитивным,
  • и т.д.

В итоге, более-менее удовлетворительное по функционалу приложение я смог создать после прочтения книги.

В этой статье я хочу привести пример разработки простого блога, в ней будет несколько отличий от официального туториала. В первую очередь я постараюсь заострить внимание на тех вопросах, которые во время изучения показались мне недостаточно раскрытыми в официальном туториале. Кроме того я буду использовать некоторые технологии, альтернативные тем, что используются в Zend фреймворке по умолчанию:
  • в качестве шаблонизатора будет использоваться Twig,
  • для работы с БД — Doctrine ORM,
  • для авторизации/аутентификации и распределения прав доступа я буду использовать существующие модули ZfcUser и BjyAuthorize,
  • также я рассмотрю вопросы разработки собственных валидаторов форм, View плагинов и другие.

За деталями добро пожаловать под кат
Total votes 23: ↑22 and ↓1+21
Comments28

Пример разработки блога на Zend Framework 2. Часть 2. Модуль MyBlog

Reading time14 min
Views46K
Это вторая из трех частей статьи, посвященной разработке простого приложения при помощи Zend Framework 2. В первой части я рассмотрел структуру ZendSkeletonApplication, а в этой части приведу пример разработки простого модуля. Третья часть будет посвящена работе с пользователями и шаблонизатором Twig.

Установка и настройка дополнительных модулей


Первым делом хочу отметить, что установка стороннего модуля в Zend Framework обычно состоит из примерно таких четырех шагов:
  1. добавляем соответствующую строчку в composer.json, чтобы сообщить Композеру о новом модуле,
  2. выполняем команду php composer.phar update, чтобы Композер загрузил новый модуль и при необходимости перегенерировал автолоад файлы,
  3. добавляем новый модуль в список modules в файле config/application.config.php,
  4. при необходимости, размещаем конфигурационный файл модуля (обычно пример такого файла находится в папке config модуля) в config/autoload и делаем в нем необходимые правки.

Также, хочу подчеркнуть, что для всех модулей, перечисленных далее я задаю минимально необходимые для их работы настройки, более подробно о настройках и возможностях каждого из модулей можно узнать на их страницах документации.

Давайте начнем с установки простого, но полезного модуля Zend Developer Tools.
Читать дальше →
Total votes 21: ↑18 and ↓3+15
Comments22

Миграция базы данных в Zend Framework: Akrabat_Db_Schema_Manager

Reading time3 min
Views7.9K
В процессе работы над одним огромным проектом на Zend Framework, возникла необходимость миграции баз данных и перемещение между версиями, т.е. кроме update, был необходим так называемый downdate. Немного погуглив натолкнулся на интересную статью Роба Алана (в дальнейшем Автор) «Akrabat_Db_Schema_Manager: Zend Framework database migrations». Данная статья не является переводом оригинала, а скорее синтезом его и возникшей проблемы. Об этом и пойдет разговор.
Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments8

Flow — статический анализ типов в JS от Facebook

Reading time2 min
Views40K
Flow — это статический анализатор кода и набор синтаксических конструкций, для прямого указания типа переменной.
Flow умеет вычислять тип переменной, без внесения изменений в код (в отличии от TypeScript) что позволяет начать использовать его уже сейчас в любом проекте. Также есть возможность самостоятельно указывать типы в стиле TypeScript.

Есть 3 режима:
  1. Не проверять ничего, по умолчанию
  2. Проверка без использования аннотаций (с коментарием-аннотацией, как в React)
  3. Строгое указание типа переменной (с внесением изменения непосредственно в код)

Примеры под катом
Total votes 19: ↑17 and ↓2+15
Comments56

Овощи для астронавтов: как растят свежую зелень в лабораториях НАСА

Reading time6 min
Views15K

Астронавт Скотт Келли на фоне системы Veggie с выросшим на МКС салатом

Человеку для того, чтобы хорошо себя чувствовать, нужно не так уж и много: здоровый сон, физические упражнения, качественное питание и еще пара вещей. Питание здесь один из критических факторов. И этот фактор становится еще более важным, если речь идет о самочувствии человека на орбите. Отправляясь на орбиту на несколько месяцев, астронавты должны получать качественное питание со сбалансированным содержанием полезных веществ, включая витамины. Ну, а лучший способ получить витамины — включить в рацион свежие овощи и фрукты.

С фруктами дело обстоит не слишком хорошо (хотя время от времени они попадают на МКС), а вот овощи астронавты сейчас получают регулярно. Кроме того, специалисты НАСА разрабатывают программу выращивания растений прямо на МКС (часть программы уже реализована) или на борту космического корабля, который летит, к примеру, на Марс. Путешествие к Красной планете займет несколько месяцев, а доставлять на борт корабля продукты с Земли, как это делается для астронавтов на борту МКС, не получится. Поэтому ученые пришли к выводу, что следует научиться выращивать часть продуктов прямо на корабле.
Total votes 17: ↑17 and ↓0+17
Comments33

Откуда берутся вода и кислород на МКС?

Reading time13 min
Views112K
image

Гимн 13 отдела.


Не космонавты мы, не летчики,
Не инженеры, не врачи.
А мы водо-водопроводчики:
Мы гоним воду из мочи!
И не факиры, братцы, вроде мы,
Но, не бахвалясь, говорим:
Круговорот воды в природе мы
В системе нашей повторим!
Наука наша очень точная.
Вы только дайте мысли ход.
Мы перегоним воды сточные
На запеканки и компот!
Проехав все дороги Млечные,
Не похудеешь вместе с тем
При полном самообеспеченьи
Наших космических систем.
Ведь даже торты превосходные,
Люля кебаб и калачи
В конечном счете — из исходного
Материала и мочи!
Не откажите ж, по возможности,
Когда мы просим по утрам
Наполнить колбу в общей сложности
Хотя бы каждый по сто грамм!
Должны по-дружески признаться мы,
Что с нами выгодно дружить:
Ведь без утили-тилизации
На белом свете не прожить!!!
Читать дальше →
Total votes 44: ↑41 and ↓3+38
Comments63

Как правильно качать в p2p сетях или магнит с битрейтом

Reading time3 min
Views29K
Раз уж пошла такая пляска, то и я расскажу про новый параметр магнет ссылки.

br=192000



В магнет-ссылке он выглядит так.

magnet:?dn=pop_music.mp3...&br=192000

Этот параметр позволяет совместить преимущества последовательного и случайного выбора частей для загрузки. Назовем это «смешанный способ выбора частей». Тем самым давая возможность «онлайн» просмотра/прослушивания без ущерба для скорости загрузки.
Подробности
Total votes 26: ↑23 and ↓3+20
Comments33

Мне 14, и я совмещаю школу с работой в ИТ

Reading time8 min
Views145K


Когда мне было семь, папа купил наш первый Ардуино и мы сделали игрушку для котов. Лазерная указка подвешивалась на два сервомотора и пускала луч — а животные носились за красной точкой по комнате. Я стал копатьcя в программе, что написал отец, пытаясь понять, как все работает… и так попробовал C++.

Быстро поняв, что “плюсы” для первоклассника как-то не очень, а вот программировать мне интересно, я засел за Scratch — учить его как раз посоветовал папа. Когда перерос его, отец показал пару приёмов на Python. Потом был классический путь: захотелось смастерить веб-страничку, засел за jQuery, JS-фреймворки и Node.js. И вот он я)
Читать дальше →
Total votes 324: ↑304 and ↓20+284
Comments321

Создаем чат на Node.js и Socket.IO

Reading time5 min
Views226K
В данной статье я попытаюсь показать, как можно создать простой чат, используя Node.js в связке с Socket.IO. Изначально я хотел построить чат на чистых Websockets, но столкнулся с практически полным отсутствием готовых реализаций сервера для них в Интернете. Так что решил не изобретать велосипед, а использовать готовую библиотеку.
В моем случае сервер работает под Ubuntu, поэтому все примеры будут для неё (и ссылки в примерах — на него же).

Установка компонентов

Первым делом нам потребуются собственно Node.js (инструкция по инсталляции и ссылки на скачивание здесь) и Socket.IO. Модули для Node.js проще всего устанавливать, используя менеджер npm —
curl http://npmjs.org/install.sh | sh
npm install socket.io

Серверная часть

Структура серверной части такова: сервер принимает сообщение, если это команда — выполняет определенные действия, если просто сообщение — рассылает всем остальным участникам.
Читать дальше →
Total votes 47: ↑40 and ↓7+33
Comments75

Использование map и reduce в функциональном JavaScript

Reading time6 min
Views31K
Предлагаем вашему вниманию переводной материал об использовании map и reduce в функциональном JavaScript. Эта статья будет интересна в первую очередь начинающим разработчикам.

За всеми этими разговорами о новых стандартах легко забыть о том, что именно ECMAScript 5 подарил нам ряд инструментов, благодаря которым мы сегодня можем использовать функциональное программирование в JavaScript. Например, нативные методы map() и reduce() на базе JS-объекта Array. Если вы до сих пор не пользуетесь map() и reduce(), то сейчас самое время начать. Наиболее современные JS-платформы нативно поддерживают ECMAScript 5. Использование этих методов позволит сделать ваш код гораздо чище, читабельнее и удобнее в обслуживании. map() и reduce() помогут вам встать на путь более элегантной функциональной разработки.
Читать дальше →
Total votes 28: ↑20 and ↓8+12
Comments20

Встречаем сервис от Cloudflare на адресах 1.1.1.1 и 1.0.0.1, или «полку публичных DNS прибыло!»

Reading time7 min
Views226K

1.1.1.1


Компания Cloudflare представила публичные ДНС на адресах:


  • 1.1.1.1
  • 1.0.0.1
  • 2606:4700:4700::1111
  • 2606:4700:4700::1001

Утверждается, что используется политика "Privacy first", так что пользователи могут быть спокойны за содержание своих запросов.


Сервис интересен тем, что кроме обычного DNS предоставляет возможность использовать технологий DNS-over-TLS и DNS-over-HTTPS, что здорово помешает провайдерам по пути запросов подслушивать ваши запросы — и собирать статистику, следить, управлять рекламой. Cloudflare утверждает, что дата анонса (1 апреля 2018, или 04/01 в американской нотации) была выбрана не случайно: в какой еще день года представить "четыре единицы"?

подробнее
Total votes 39: ↑39 and ↓0+39
Comments130

15 лучших JavaScript-библиотек для построения диаграмм и сводных таблиц

Reading time6 min
Views308K
Практически невозможно представить себе информационную панель без диаграмм и графиков. Они быстро и эффективно отображают сложные статистические данные. Более того, хорошая диаграмма также улучшает общий дизайн вашего сайта.

В этой статье я покажу вам некоторые из лучших JavaScript библиотек для построения диаграмм/схем (и сводных таблиц). Эти библиотеки помогут вам в создании красивых и настраиваемых графиков для ваших будущих проектов.

Хотя большинство библиотек являются бесплатными и свободно распространяемыми, для некоторых из них есть платные версии с дополнительным функционалом.

Читать дальше →
Total votes 71: ↑65 and ↓6+59
Comments17

Pixi.js — 2D движок с прозрачной поддержкой WebGL

Reading time1 min
Views81K
Pixi.js позволяет использовать мощь WebGL для рендеринга 2D-сцен, совершенно не вникая в подробности реализации, более того, он умеет самостоятельно определять наличие поддержки WebGL и переключаться между способами рендеринга. В отсутствие WebGL рендеринг осуществляется средствами canvas. Кроме того в Pixi.js реализован граф сцены, поддержка текстур и спрайтов, чуть больше недели назад в нём появилась поддержка интерактивности — на спрайты можно повесить обработчики событий мыши и тачскрина.
Читать дальше →
Total votes 64: ↑61 and ↓3+58
Comments48

Что такое стек MERN, и как с ним работать?

Reading time8 min
Views46K
Привет, Хабр!

Давным-давно мы выпускали пилотный проект о стеке MEAN (Mongo, Express, Angular, Node), который нас в целом не разочаровал, однако, допечаток и обновлений мы в свое время решили не делать — в отличие от издательства Manning, которое эту книгу обновило. Тем не менее, мы продолжаем поиски в данном направлении и сегодня хотели бы поговорить с вами о родственном стеке MERN, где на клиенте располагается не Angular, а React. Слово предоставляется Тиму Смиту.


Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments4

Information

Rating
Does not participate
Location
Гродно, Гродненская обл., Беларусь
Date of birth
Registered
Activity