Антон Шелыганов


PHP Разработчик - JS Разработчик - Администратор Linux

Интернет в загородном доме - Mikrotik Wap LTE Kit

Всем привет! Некоторое время назад, в связи с известными событиями, возникла необходимость работать удаленно из загородного дома.

До этого постоянного интернета на даче не было. Вполне хватало раздачи мобильного интернета через смартфон. К тому же, в основном дача использовадась для отдыха на выходных, а не постоянного проживания и работы.

Требования к интернету:

  • Митинги в Zoom, MS Teams, Skype и т.д. - видео + демонстрация экрана
  • Возможность одновременной работы нескольких человек в разных частях дома
  • Стабильное соединение
  • Не очень высокий пинг
  • Безлимитный интернет, или хотя бы большой объем трафика
  • Немного онлайн видео
  • Немного торрентов
  • Приемлемая цена

Исходные данные:

  • Ленинградская область, поселок Рощино
  • 2х этажный деревянный загородный дом
  • Расстояние до вышки сотовой связи около 1 км
  • Прямая видимость вышки со второго этажа с определенного ракурса
  • Проводной интернет провести нет возможности

Простое решение - HUAWEI E5573Cs-322

Быстрым и простым решением было использорвание 4G роутера HUAWEI E5573Cs-322. Раньше пользовался похожим роутером. В целом, все устраивало. Но тогда интернет нужен был только для просмотра страниц.

В этот раз столкнулся с несколькими проблемами:

  • Скорее всего, не хватало мощности 4G антены. В результате - низкая скорость, потери пакетов, нестабильнрый пинг
  • В некоторых частях дома сигнал нормальный, в некоторых совсем плохой. Приходилось, буквально, искать сеть.
  • Недостаточно мощнный WiFi. Нормально работает, если роутер лежит рядом с ноутбуком. Плохо работает, если роутер находится в другой части дома.
  • Иногда перегревается при большой нагрузке, приходится перезагружать

В целом, неплохой вариант для одного пользователя. При наличии хорошего сигнала сети.

Кустарный вариант - ASUS WL-500GPv2 + HUAWEI E173

Раньше пользовался подобным решением. Старый роутер ASUS WL-500GPv2 с прошивкой от Oleg. Не менее старый разблокированный 3G модем от Мегафона, он же HUAWEI E173. Роутер имеет 2 usb порта. Стандартная прошивка поддерживает подключение принтеров и флешек. Альтернативные прошивки поддерживают подключение USB модемов. Поддержку конкретного модема нужно уточнять. Возможно, эксперементальным путем. К сожалению, получилось запустить только с вышеупомянутым 3G модемом.

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

  • Нет поддержки 4G(в моем конкретном случае)
  • Мощность антены 3G модема
  • Сложность настройки(перепрошивка, настройка модема)

Дорогой вариант - MikroTik wAP LTE kit с внешней антеной

Но и наиболее качественный. В итоге решил использовать 4G роутер MikroTik wAP LTE kit с внешней антеной. До этого использовал MikroTik hAP AC2 в качестве домашнего роутера, впечатленрия положительные. Богатые возможности настройки RouterOS. Которые, я, правда, не очень активно использую. Сначала думал, что могут быть сложности с настройкой. Но их как-раз не возникло. К тому же, в сети много руководств по настройке.

C MikroTik wAP LTE kit особых проблем также не возникло. Настроил по инструкции. Некоторое время использовал с внутренней антеной, пока ждал доставку внешней антены и проводов. Внутренняя антена довольно крупная, расположена по бокам корпуса. Работает тоже неплохо. Возможно, этим стоило и ограничиться. Но уже решил, что буду подключать внешнюю антену.

Внешняя антена

Можно использовать разные антены. Я решил испрользовать антену MikroTik mANT LTE 5o с комплектом проводов 2 x MikroTik ACSMAUFL и 2 x MikroTik SMASMA.

Схема подключения описана тут и тут. Для отключения внутренней антены нужно отковырять клей. Для этого понадобится спирт.

Антену разместил на улице, на внешней стене, на втором этаже. Направил на вышку сотовой связи. Просверлил отверстие в наружной стене и протянул провода в дом. Роутер разместил в комнате на втором этаже. Длинна проводов - 1м. Этого оказалось достаточно.

Локальная сеть

MikroTik wAP LTE kit может работать как точка доступа, но WiFi не очень мощный. Встроенный Wifi отключать не стал. Но подключил к нему по цепочке по проводу 2 других роутера(один из них - многострадальный ASUS WL-500GPv2). Разместил их в разных частях дома. В итоге, обеспечил хорошее покрытие везде.

Тариф

Использовал Tele2, в основном из-за лояльной ценовой политики. Кроме того на Tele2 не должно быть проблем с раздачей интернета на другие девайсы.

Как выяснилось позже, для этого нужно использовать тариф с ограниченным трафиком. На безлимитном тарифе эта проблема встает в полный рост. Что делает этот тариф, по-сути, бесполезным. Причем, оператор делает это как-бы по-тихому. Speedtest показывает хорошие результаты, но при этом во время митингов все очень сильно тормозит.

В результате был выбран тариф Мой онлайн+ за 500р/мес, включающий 40GB трафика. Дополнительный трафик можно покупать на Tele2 бирже, актуальная цена за 10GB - 150р. В среднем, на месяц уходит около 100GB при постоянном использовании, зависит от интенсивности.

Скорость

Скорость может меняться в зависимости от времени суток, погоды, загруженности сети и т.д. В среднем пинг около 25мс, скорость симметричная около 8Мб/c. Этого хватает для комфортной работы.

Стоимость

Оборудование:

Итого: 12155р.

Тариф Мой онлайн+ - от 500р/мес + дополнитеьный трафик.

На этом пока все. Спасибо за внимание!

План изучения Magento 2

Всем привет! Сегодня хотел бы поделиться планом изучения Magento. Недавно возникла задача подготовить нескольких PHP-разработчиков для работы с этой системой.

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

Бэкап базы данных Mysql на Amazon S3

Всем привет! Сегодня хотел бы поделиться рецептом автоматического бэкапа баз данных Mysql на Amazon S3.

Помимо облачного хранилища, бэкапы сохраняются локально на сервере. Все действия проводились на Ubuntu Server 18.04.

2019 - итоги года

Всем привет. Поздравляю с наступающим 2020 годом!

За несколько часов до праздника хочется вспомнить уходящий 2019 год и немного подвести итоги.

SymСode St. Petersburg Meetup #8 - JetBrains (18 dec 2019)

Всем привет! 18 декабря 2019 в Санкт-Петербурге состоялась восьмая встреча сообщества SymCode. Организаторы Symfoniacs провели ребрединг, и теперь сообщество называется SymCode. Также у митапа появился новый логотип.

Логгирование изменений сущностей в Symfony 4

Всем привет. Сегоня хотел бы поделиться опытом реализации истории изменения сущностей для symfony/doctrine. Основная идея в том, чтобы логгировать какой пользователь и когда создал, изменил или удалил сущность. И если поменял, то какие поля, какие значения были и какие стали после изменения.

Загрузка торрентов на VPS

Всем привет! Сегодня будем настраивать сервер для загрузки торрентов на VPS. Собственно, ничего сложного и необычного в этой задаче нет. Речь идет о настройке transmission-daemon на сервере.

У этого подхода может быть несколько вариантов использования.

Symfony St. Petersburg Meetup #7 - ITMO (24 oct 2019)

Всем привет! 24 октября 2019 в Санкт-Петербурге состоялась седьмая встреча сообщества Symfoniacs - митап, изначально посвященный PHP фреймворку Symfony. Последнее время Symfoniacs позиционируется, как соощество профессиональных PHP разработчиков не ограниченное рамками одного фреймворка.

Elastic Search - тестирование релевантности

Всем привет! Сегодня поговорим об отладке и тестировании поиска на базе Elastic Search. Конкретно, о тестировании релевантности. Из коробки Elastic работает неплохо. Но, вероятно, может понадобится донастроить релевантность поиска. Например, установить вес различных полей в поиске. Также могут быть другие факторы, влияющие на релевантность. Подробнее про настройку и о том как все устроено можно почитать тут: https://codedzen.ru/elasticsearch-urok-6-4-relevantnost/

При этом важно понимать, что изменения настроек влияют на весь поиск. К примеру, нам не нравится результаты поиска по запросу "Fiat 500", но при этом устраивают результаты по запросам "Renault Logan", "Nissan Micra" и т.д. Если мы поменяем настройки и подгоним результаты под запрос "Fiat 500", то не факт, что все остальное будет работать нормально.

Организация Detail View в Yii2

Всем привет! Сегодня речь пойдет о Yii2, а конкретно о Detail View Widget. Этот widget позволяет выводить информацию на странице. В общем-то все, кто работал с Yii наверняка о нем знают. Чаще всего виджет используется в разных админках и т.д.

Где и как искать удаленную работу

Всем привет! Лето 2019 года выдалось для меня довольно жарким и насыщеным на события. Поэтому давно не было постов в блоге, хотя написать что-нибудь очень хотелось. Итак, я уже почти 4 месяца работаю удаленно. Сегодня хочу поделиться своим небольшим опытом поиска удаленной работы. Под удаленной работой понимается именно удаленная работа, не фриланс.

Курсы валют - бесплатно, без СМС

Всем привет! Сегодня расскажу про получение курсов валют. Сама по себе задача не сложная и ничего необычного здесь нет. Самый простой способ получить актуальный курс валюты - использовать какой-нибудь сторонний сервис для этого. Например, Fixer.io. Обращаемся к нему по Api, получаем данные ничего необычного. Обычно в подобных сервисах есть бесплатный пакет, который позволяет использовать сервис в небольшом проекте. В данном случае это 1000 запросов в месяц.

Отчет о поездке на PHP Russia 2019

Всем привет! В пятницу 18 мая в Москве в павильоне ИнфоПространство прошла конференция PHP Russia 2019.

PHP Russia 2019 - Профессиональная конференция для PHP-разработчиков. В отличии от того же DevConf конференция полностью посвящена PHP. Организатор конференции - ООО «Конференции Олега Бунина».

Стоимость билетов зависит от того, насколько заранее их покупать. Мне билеты обошлись в 15000, покупал за свой счет.

Асинхронный PHP - конспект доклада с PHP Russia 2019

Всем привет! Сегодня я в Москве на конференции PHP Russia 2019. Представляю вашему вниманию краткий конспект докалада "Асинхронный PHP". Автор доклада - Антона Шабовта из компании Onliner.

Основной смысл асихронности - не блокировать основной поток выполнения. Соответственно, асинхронная опарация - это такая вот неблокирующая операция.

Инструменты путешественника

Всем привет! Достаточно давно не писал постов. Последние две недели путешесвовал в на велосипеде по Северной Италии. Поездка получилась очень насыщенной, времени для написаниия постов совсем не оставалось.

Сегодня хотел бы рассказать об IT инструментах, которые помогают в планировании и непосредственно во время путешествий. Надо понимать, что путешествия могут быть разные. Это может быть поездка на курорт по путевке. Может быть поход в горы с огромным рюкзаком. Может быть путешествие на байдарке по озерам Карелии. Может быть поездка на велосипеде по Италии без машины сопровождения. А может быть исследоване Португалии на арендованом автомобиле.

Но в целом подходы общие. Вопрос, что взять с собой, а что оставить дома. В статье рассмотрел несколько аспектов.

Пока 220 Вольт. Привет, DataArt!

Всем привет! 19 марта 2019 был мой последний день работы в 220 Вольт. Я проработал в компании чуть меньше полутора лет. Это был неоднозначный, но довольно интересный опыт.

У нас была большая и достаточно сильная команда. В общей сложности около 15 человек. Также несколько смежных команд, с которыми приходилось взаимодействовать. Все это время мы работали над крупным и амбициозным проектом - переделывали сайт 220 Вольт c Perl на Magento 2.

Генерация кода из командной строки в Yii2

Всем привет! В этой статье рассмотрим генерацию кода для Yii2 из командной строки. С Yii я работаю достаточно давно, еще с первой версии. Одной из интересных особенностей фреймворка является встроенный кодогенератор Gii. С его помощью можно быстро сгенерировать модели данных, контроллеры и даже целые CRUD блоки на основании таблицы базы данных.

Это достаточно полезно для быстрого прототипирования или для создания основы приложения. Конечно, обычно код потом меняется под нужды конкретной задачи.

Gii предоставляет графический интерфейс для создания кода. Им достаточно просто и удобно пользоваться. Также по нему есть довольно подробная документация.

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

Как бухать по SCRUM. И пробухать команду за 2 недели.

Всем привет! Сегодня хочу рассказать об одном большом IT приключении, длиною в полтора года. Эту историю недавно рассказал мне один старый знакомый...

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

Архитектура GPS трекера

Всем привет! Не так давно сделал любопытное техническое задание. Задача - описать архитектуру gps трекера. Конкретно - умного ошейника для собак. Нужно было описать работу серверной части. Предусмотреть запись активности, запись gpx трека, возможность просмотра статистики. Добавить возможность получения текущего местоположения, получение списка устройств в указанной области, отправку push уведомлений. Также нужно было продумать реализацию функционала совместных прогулок.

Примеры использования Elastic Search

Всем привет! Недавно сделал демонстрационный проект, который содержит основные наработки по Elastic Search. Реализовал примеры функционала, который был сделан в рамках последних проектов.

В демонстрационном проекте есть примеры обычного и нечеткого поиска, фильтрации, агрегации, поиска с синонимами, динамического обновления настроек индекса, подсветки поисковых запросов, поиска с учетом руской морфологии, поиска с учетом стоп-слов и поисковых подсказкок. Также есть примеры поиска по документам(PDF, DOC, XLS и т.д.) с помощью ingest плагина.

Обзор игры JCloisterZone

Всем привет! Сегодня расскажу об одном интересном проекте - JCloisterZone. JCloisterZone представляет собой open-source реализацию популярной настольной игры "Каркассон".

Каркассон - настольная стратегически-экономическая игра, разработана Клаусом-Юргеном Вреде в 2000 году, впервые издана компанией Hans im Glück в Германии. В 2001 году была удостоена награды «Игра года» в Германии, выпускается многими мировыми издателями настольных игр, переведена на многие языки. Игра заключается в пошаговом собирании игрового поля и размещении на нём фишек своих подданных. В зависимости от того, на какую местность поставлена фишка, она становится рыцарем, крестьянином, монахом или разбойником.

2018 - итоги года

Всем привет. Поздравляю с наступающим 2019 годом!

Под бой курантов хочется поблагодарить уходящий 2018 год и немого подвести итоги. Он был для меня очень непростым, но, в то же время, насыщенным и интересным.

Laravel downloader app

Всем привет. Не так давно делал тестовое задание для одной компании. Вакансия Senior PHP Developer, на удаленку. Нужно было сделать web сервис на Laravel, который будет загружать ресурсы по http.

Leaflet - создание карты путешествий

Всем привет! Сегодня будем делать карту путешествий с помощью leaflet - показывать на карте много gpx треков. Примеры из статьи доступны на github: https://github.com/antonshell/leaflet_examples.

Leaflet - базовая настройка карты + gpx

Всем привет! Сегодня раскажу о работе с библиотекой для отображения карт Leaflet. Примеры из статьи доступны на github: https://github.com/antonshell/leaflet_examples. Библитека может быть полезна, например, для отображения карт на сайте. В частности для отображения gpx треков. Преимущество перед google/yandex maps в том, что leaflet - это открытая библиотека и предоставляет больше возможностей для настройки/расширения. Главный недостаток в том, что придется настраивать все самому. Из коробки может выглядеть не так красиво, как google maps, зато есть множество возможностей расширения функционала.

Saint-Peterburg Symfony Meetup #4, 30 октября 2018

30 октября 2017 в Санкт-Петербурге состоялась четвертая встреча сообщества Symfoniacs - митап, посвященный PHP фреймворку Symfony.

Митап проводился в офисе компании PropellerAdds на ул. Профессра Попова 37Щ. Компания PropellerAdds занимается интернет рекламой и занимает практически весь 6й этаж Бизнес Центра. Офис выглядит довольно внушительно но, в то же время уютно. Запомнились панель мониторинга из 6 мониторов, шкаф с ноутбуками, висячее кресло.

Автотесты в Magento 2, часть 2

В предыдущей статье мы насторили окружение для тестов. В этой статье попробуем писать сами тесты.

У нас есть модуль. Пусть это будет личный кабинет. Но в отличии от стандартного модуля magento, это будет rest api. К нему можно будет подключить свой frontend.

Тесты будут лежать в папке Tests Здесь будут Unit тесты, Интеграционные тесты, вспомагательный код и фикстуры.

Автотесты в Magento 2, часть 1

В этой статье речь пойдет про автоматическое тестирование в CMS Magento 2. Использовалась Magento 2.2

Общеизвесно, что magento достаточно сложная система сама по себе. Она требовательна к ресурсам. Разрабатывать под нее сложно и долго. В целом, у меня сложилось очень неоднозначное впечатление от ее использования.

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

Подсветка кода в markdown с помощью GeSHi

Всем привет! Сегодня расскажу про подсветку кода в markdown файлах. То, что описано в этой статье, Я использую непосредственно на этом сайте. Для отображения этой самой статьи!

Вероятно, проще всего сделать блог на wordpress. Но я же все-таки - программист!. Поэтому я предпочел сделать его на Symfony. Оба подхода имеют свои преимущества и недостатки. Так, например, мне удобнее писать статьи не в админке, а в IDE. И хранить все тексты не в базе данных, а в файлах под git.

Настройка базовой авторизации Elastic Search

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

Но в то же время, elastic доступен всем так же и на запись. Таким образом злоумышеник может удалить все индексы или подменить данные в них. Поэтому оставлять elastic открытым нельзя. Рекомендуется настроить firewall и ограничить доступ для определенных ip адресов или подсетей. Также можно настроить базовую авторизацию по логину и паролю.

Elastic в базовой версии такой функционал не поддерживает. Настройки безопасности реализованы в рамках платного дополнения x-pack.

Мы же настроим авторизацию с помощью web-сервера nginx.

Интеграция Magento 2 и Elastic Search

В нашем проекте DIY price мы используем Magento 2 в качестве ecommerce движка. Сначала пытались делать проект полностью на magento но в итоге пришли к headless режиму. Frontend написан на VueJS, отделен от magento и взаимодействует с ней по Rest API. Такой подход приносит определенные сложности - многое нужно продумывать самому, нехватает некоторых методов api и т.д. В то же время упрощает работу frontend разработчиков, дает больше гибкости. Настраивать тему magento под свои нужды иногда может быть непростирой задачей. В конечном итоге headless архитектура оправдывает себя.

В качестве поискового движка планировали использовать Elastic Search. Причем в нашем случае мы можем даже обращаться к нему напрямую, тем самым разгружая magento. К тому же мы используем Magento Enterprice и его поддержка заявлена из коробки. Правда начинали мы разработку на Comunity Edition и искали возможности интеграции уже в этот момент.

Demo markdown

Создание GRUD и связанной логики в Magento 2 может быть непростой задачей.

Достаточно прочитать это руководство, чтобы понять это.

Постепенно привыкаешь и все это уже выглядит не так сложно. Но, если ты только начал работать с magento, то создание grid в админке magento напоминает ритуал воскрешения сатаны. Если же понадобится сделать еще один модуль с grid, то весь процесс придется повторить.

Отчет о поездке на DevConf 2018

В пятницу 18 мая в Москве в пространстве Digital October прошла девятая конференция веб-разработчиков DevConf.

В Москву я приехал на ночном поезде. Успел погулять по городу и по новому парку Зарядье. В прошлом году такого не было. Особенно понравилась смотровая площадка.

Начало регистрации в 9:00. При этом по-сути конференция началась с кофебрейка. А первый доклад - в 11:00.

Пишем CRUD-генератор для Magento 2

Создание GRUD и связанной логики в Magento 2 может быть непростой задачей.

Достаточно прочитать это руководство, чтобы понять это.

Постепенно привыкаешь и все это уже выглядит не так сложно. Но, если ты только начал работать с magento, то создание grid в админке magento напоминает ритуал воскрешения сатаны. Если же понадобится сделать еще один модуль с grid, то весь процесс придется повторить.

Elastic Search, Русская морфология

Это третья статья из цикла про Elastic Search. Речь пойдет о настройке русской морфологии Elastic Search. Настройка морфологии происходит путем добавлления в elastic search специальных анализаторов. Анализаторы учитывают особенности языка и за счет этого улучшаются результаты поиска.

Фильтр матерных слов для сайта

В данном посте решается задача обнаружения мата в комментариях. Впринципе можно сделать с помощью stop words. Эти списки есть в открытом доступе. Но, как правило, списки неполные. И уж точно не учитывают все возможные словоформы

В итоге многие матерные слова все равно идут мимо фильтра. На помощь приходят анализаторы. Всего мне попалось 2 анализатора, которые работают неплохо(смотрел варианты на php).

Elastic Search, Настройка синонимов

Это вторая статья из цикла про Elastic Search. Речь пойдет о настройках синонимов Elastic Search. Синонимы нужны в том случае, если у нас есть несколько слов, которые морфологически не похожи друг на друга, но при этом имеют сходное значение. Или это может быть профессиональный жаргон. Примеры: Углошлифовальная машина - болгарка, Отвертка - шуруповерт и т.д.

Стартовая проверка

Все настройки проводились на Elastic Search 6.1.2. Запускалось в Docker.

Elastic Search, быстрый старт

На текущем проекте используем Elastic Search. Elastic представляет собой движок для продвинутого поиска по документам. Основан на Apache Solr. По сути, является NoSQL хранилищем, и некоторые даже используют его, как отдельную БД.

За время работы нашлось несколько вещей, которые не сразу удалось настроить. Информации в сети много, но местами она не очень структурирована, либо есть различия для разных версий. Либо просто сразу не удается найти нужный материал. В результате пришлось перелопатить весь интернет, прежде чем все заработало как требовалось.

Это первая статья из цикла. Здесь все тривиально, речь пойдет о базовых настройках Elastic Search.

MageConf 2017

16 декабря 2017 г в Киеве прошла конференция по разработке на Magento - Mageconf 2017

Я посетил эту конференцию в рамках работы в компании "220 Вольт"

От нашей компании на конференцию поехали 3 человека. Иван Кулик - директор интернет магазина, Федор Зубков - project manager, Антон Шелыганов - PHP/Magento разработчик.

Вылетели из Санкт-Петербурга в пятницу 15 декабря, в 14:45. Летели компанией БелАвиа, с пересадкой в Минске, поскольку рейсов из России на Украину нет. Перелет получился немного утомительным, зато много кормили.

Спасибо, Yumasoft! Привет, 220В.

Всем привет. 29 октября 2017г был мой последний день работы в компании Yumasoft. Я проработал в компании 4 года. Это был очень важный и интересный этап моей жизни.

Друзья, коллеги, сегодня мой последний день работы в Yumasoft. Всем большое спасибо, было очень здорово с вами работать :) Всем желаю счастья и профессиональных успехов! А также успехов в общем деле. У нас классная команда! И классный продукт! На кухне вас ждет пицца и суши. Угощайтесь!

Я работал в основном на PHP и Javascript. За это время я успел поработать над огромным количеством разных проектов. Сначала это были аутсорсинговые проекты. Несколько порталов на актуальном на тот момент Yii1. Интересный проект связанный с майнингом альтернативных криптовалют. Несколько серверов для мобильных приложений, написаных на стремительно устаревающих Codeigniter и Cohana.

Потом был интересный опыт разработки CRM системы GetScorecard на чистом php. Стартап, взлет и падение... Увлечение python и некоторое разочарование... Новый для меня опыт Android разработки, но скорее так, проба пера... Самым крупным и инаиболее интересным проектом для меня был 9Round. Крупный проект на Yii2. Web-портал для сети фитнесс центров и много дополнительных сервисов. В том числе Ecommerce на Magento.

Создание alias команд под Windows

В процессе работы web-программисту часто приходится пользоваться командной строкой. Это может быть работа с git, установка библиотек через npm или commposer. Создание шаблона приложения. Очистка кэша web-приложения. Управление миграциями базы данных и т.д.

В таком случае могут возникнуть 2 проблемы. Во-первых нужно постоянно печатать повторяющиеся команды. Либо копировать откуда-то. Во вторых нужно помнить эти самые команды. Что тоже бывает сложно. Например команда создания миграции в symfony 3 выглядит так.

php bin/console doctrine:migrations:generate

В какой-то момент это все надоедает и хочется создать сокращения для команд. Под Windows можно сделать с помощью doskey.

Saint-Peterburg Symfony Meetup, 31 октября 2017

31го октября 2017 в Санкт-Петербурге состоялассь вторая встреча сообщества Symfoniacs - митап, посвященный PHP фреймворку Symfony. Митап проводился в офисе компании Datanyze на Херсонской 39. На самом деле, митап не столько даже о Symfony, сколько о разработке в целом.

Всего было 2 доклада. Первый доклад был про про Postgress от Руслана Ханова(Копания Яндекс). Доклад назывался "Postgres - универсальный провайдер данных".

Пишем парсер данных Выписки из ЕГРЮЛ/ЕГРИП

Всем привет! В этой статье расскажу о работе с "API Федеральной Налоговой Службы". И чем это в итоге обернулось.

В одном из проектов была задача было получать данные Юридическом Лице(ООО, ИП, и т.д.)

Проект представляет собой POS-систему для кафе и рестаранов. Для обслуживания, процессинга и учета клиентов используется корпоративный портал. Портал позволяет управлять клиентами и хранит мнжество данных от Названия организации до ОКВЭД(Общероссийский классификатор видов экономической деятельности).

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

Research на тему распознавания лиц

Всем привет! Не так давно пришлось столкнуться с задачей распознавания лиц. Вернее даже не распознавания непосредственно лица, а распознавания типа. У знакомых ребят были идеи связанные с этим, им нужно было сделать прототип.

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

Сама процедура определения типа описана тут: https://lifehacker.ru/2016/11/17/tip-lica/ .

Прикручиваем прогрессбар к Mysqldump

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

Пусть у нас будет база данных размером примерно 500мб. Для начала попробуем просто сделать дамп. Выполним такую команду:

    
        mysqldump -uroot -p -hlocalhost large_database > large_database_dump.sql
    

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