Блог

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, зато есть множество возможностей расширения функционала.

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

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

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

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

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

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

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

Автотесты в 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 и искали возможности интеграции уже в этот момент.

Отчет о поездке на 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
    

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