Микро-толки — дайджест #10

После огромного перерыва в полгода таки решили провести новый микро-толк. Основным поводом послужил выход PHP 7.3, но были и другие новости для обсуждения.

Например, Microsoft решил перевести свой браузер Edge на базу Chromium и первые сборки должны появиться уже в начале 2019 года. Видимо не потянули разработку своего движка EdgeHTML. С одной стороны - больше совместимости, а с другой стороны - монополизация одним движком. Хотя фрагментация еще сохраняется. Из популярных браузеров — есть Firefox на базе движка Gecko, есть Safari на базе WebKit и есть куча браузеров (Opera, Chrome, Яндекс-Браузер и новоиспеченный Edge) на основе браузера Chromium с движком Blink.

Микро-толки — дайджест #9

Неделю назад прошел еще один micro-talk по PHP. На этот раз не было модных новостей по фронтенду, а поскольку в PHP не всё так динамично, то темы были давние.

Начинаем с общей темы. Уже, наверное год, как Google зафорсил https на .dev доменах, но стоит еще раз об этом напомнить. Для этого можно почитать статью Chrome & Firefox now force .dev domains to HTTPS via preloaded HSTS. И как описано в статье, в окружении для разработки лучше использовать домены .test — они лучше всего для этого подходят.

А теперь переходим к PHP...

Микро-толки — дайджест #8

В этом микро-толке мы затронули довольно много тем. Было обсуждение и MySQL, и неочевидного поведения PHP, и "трюков" javascript. А началась наша встреча с понятия, которое сейчас очень сильно хайпится — Serverless.

Serverless архитектура имеет 2 основных определения:

  1. Backend as a Service или приложения, которые полностью или в значительной мере зависят от сторонних вендоров для реализации логики бекенда или хранения состояния приложения. Это определение было популярно до 2015 года.
  2. С выходом AWS Lambda в 2014-2015 годах стало популярно определение Function as a Service — такая архитектура приложения, при которой часть серверной логики выполняется в вычислительных контейнерах без состояния.

Довольно хороший обзор Serverless архитектуры дается в статье "Serverless Architectures". Кроме того в рамках второго определения становится очень популярным Serverless Framework.

Микро-толки — дайджест #7

На прошлой неделе провели, пожалуй, последний micro-talk в этом году. Хоть он был и небольшой, всё никак не мог собраться и зафиксировать дайджест. И вот он готов.

Микро-толки — дайджест #6

Начало зимы, пятница, релиз PHP 7.2 — целая гора поводов, чтобы провести новый микро-толк!

Обсудили несколько интересных инструментов, некоторые хитрости при написании кода на PHP,  а также вкратце проговорили основные новые фичи PHP 7.2.

Микро-толки — дайджест #5

Барабанная дробь... И новый PHP micro-talks состоялся! В этот раз побольше новостей и статей на тему PHP.

Микро-толки — дайджест #4

Состоялся новый микро-толк.

  1. Если кто-то встречался с тем, что во время деплоя при переключении релизов код не обновлялся, то вот интересная статья, которое объясняет, что же на самом деле происходит: Is it all PHP OPCache's fault?
  2. Memory leaks in Javascript — презентация от @xufocoder. В принципе, полезна не только фронтендерам, ибо рассказывает о различных подходах к сборке мусора.
  3. Как ускорить загрузку сайтов в эпоху смартфонов — видео с конференции Frontend MIX. Обозревает несколько современных подходов к оптимизации скорости загрузки.
  4. Видео о том, откуда и как возникают завалы "На потом" и что с этим можно поделать. Вообще советую изучить контент Макса Дорофеева. У него много интересного на тему управления временем, планирования и личной эффективности.

Микро-толки — дайджест #3

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

Микро-толки — дайджест #2

Прошел еще один PHP micro-talks. Регламент был следующий:

  1. Основная тема - качество кода.
  2. Второстепенная тема - Ижевский PHP meetup #3.
  3. И еще несколько новостей за последнюю неделю.

Микро-толки — дайджест #1

Данная статья представляет собой дайджест тем, которые обсуждались в рамках PHP micro-talks #1 с коллегами.

Вкратце о регламенте:

  • 15 минут
  • 7 ссылок IT-тематики
  • 1 ссылка общей тематики

Переходим на HTTPS

Около месяца назад делал презентацию для коллег на тему HTTPS и того что с ним связано. Рассказал о том, почему стоит переходить на https именно сейчас, про то как можно получить бесплатные сертификаты let's encrypt и как перейти с http на https. Помимо этого был сделан общий обзор различных понятий, связанных с https и немного затронута тема http/2.

Слайды с презентации можно посмотреть вот тут.

Дружим nvm и деплой на ноде

Для деплоя приложений на nodejs есть пара инструментов, таких как shipit и flightplan. Оба они не так хороши, как capistrano для ruby или deployer для php, но если для деплоя хочется выбирать ту же экосистему, что и для разработки, то выбирать особо не приходится.

Если сравнивать shipit и flightplan, то можно сказать, что первый - более модульный, имеет некоторые плагины, а также поддерживает функцию "rolling releases", второй же - более простой и понятный.

На сервере, да и локально, я использую nvm для переключения между версиями nodejs и здесь я столкнулся с проблемой.

Как делать деплой на PHP

Недавно подготовил презентацию на тему деплоймента php-приложений. Сделал обзор основных проблем при делое, а также обзор способов их решение и инструментов, которые можно использовать для деплоя, благо PHP идет по следам Ruby и появляются различниые инструменты для этого, такие как Rocketeer.

С моей презентацией можно познакомиться перейдя по этой ссылке (навигация идет не только влево-вправо, но и вверх-вниз).

Красивый вывод git log

Я довольно часто работаю с гитом в консоли — коммичу, пушу, вытягиваю ветки, порой смотрю диффы. Конечно же более сложные операции, типо мерджа  я делаю в графическом интерфейсе, в частности в IntelliJ IDEA есть довольно удобные инструменты для мерджа. Работая в консоли бывает удобно быстро посмотреть лог изменений в удобочитаемом виде.

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

Простой XML-RPC клиент на PHP

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

Я перепробовал различные библиотеки, но они оказались слишком сложными. Например, реализация XML-RPC из репозитория PEAR довольно сложна в установке на Windows, а на линуксовом шаред-хостинге ее не всегда возможно установить. XML-RPC на sourceforge имеет некоторые проблемы с кодировкой UTF-8. Так что я быстро создал свою простейшую реализацию XML-RPC клиента.

Локализация в javascript в Ruby on Rails

При разработке многоязычного приложения мы рано или поздно столкнемся с необходимостью локализации строк используемых в javascript. В Ruby on Rails для этих целей есть замечательный гем i18n-js. Мне понадобилось некоторое время, чтобы разобраться как он работает, не смотря на наличие документации. В какой-то момент я даже было подумал, что это безнадежный вариант и чуть было не бросил эту затею, хотя на самом деле все оказалось просто.

Локализуем надписи select2 из примера одной из предыдущих статей.

Хитрые роуты с локалями в Ruby on Rails

  scope "/:locale", locale: /#{I18n.available_locales.join("|")}/ do
    resources :posts
    root to: redirect("/%{locale}/posts", status: 302)
  end
  root to: redirect("/#{I18n.default_locale}", status: 302), as: :redirected_root
  get "/*path", to: redirect("/#{I18n.default_locale}/%{path}", status: 302), constraints: {path: /(?!(#{I18n.available_locales.join("|")})/).*/}, format: false

Рассмотрим вышеуказанный кусок кода из файла config/routes.rb и построчно изучим что же он делает.

Передача данных в javascript при помощи gon и jbuilder в Rails

Порой возникают задачи в которых нужно передать данные из сервеного кода в javascript.

Я уже писал о варианте решения данной задачи на PHP для фреймворка Yii, а сейчас пришла очередь Ruby on Rails. Для этих целей уже существует вполне удобный гем gon и у него даже есть неплохая документация. Тем не менее при использовании данного гема возникают некоторые вопросы, на которые нет подробных ответов и инструкций, поэтому я решил поделиться своим опытом на примере простого приложения.

Генерация (скаффолдинг) админки в Ruby on Rails

Как правило каждое приложение на Ruby on Rails имеет какой-то свой административный интерфейс, если только это не совсем простенький полу-статичный сайт визитка (наверное в таком случае больше подойдут Sinatra или Padrino?). Известный человек в мире Rails — Райан Бейтс в одном из своих первых рейлскастов предлагает объединять в коде административный и публичный раздел. Думаю имеет место и другой подход. Вот почему:

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

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

Хочу рассказать вам о том, как же максимально просто провести такое разделение на примере тестового приложения.

Управление жизнью

Кажется я решил отступить от темы программирования и «поговорить немного о жизни».

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

Полагаю, что данный сказ позволит вам лучше познакомиться со мной и подметить нечто полезное для себя.

Если хотите сухую выжимку сути, то можете найти её в англоязычной версии данного сайта.

Вступление.

В далекие школьные годы я особо ничем не занимался, все мои планы сводились исключительно к учебе и задавались учебным процессом. У меня особо не было целей и была уйма свободного времени, которое я тратил на гуляние во дворе, чтение, просмотр телевизора и, когда появился компьютер — на изучение сего интересного устройства.

Стоит отметить, что у телевизора я проводил крайне много времени и не сказать, что это как-то пагубно отразилось на моем развитии. Возможно причина тому заключена в том факте, что когда я был в детском саду и начальной школе, у нас дома просто не было телевизора и я все это время читал книги, которые мне мама приносила с работы (а она — библиотекарь). Видимо чтение книг заложило фундамент моим знаниям. А сейчас, будучи родителем, я даже начал задумываться, нужно ли ребенка занимать в детстве или же лучше дать ему свободу действий, при этом обеспечив его самосознанием и хорошим воспитанием.

Creativity

Будь креативным.

Начинай делать сразу же, как только зажегся идеей.

Трать на реализацию идеи все свободное время, энергию и ресурсы.

Сосредоточься на результате, всё остальное — минорно, не важно.

Переоценивай, давай оценку с запасом или реалистично.

Ставить четкие сроки достижения результата.

Создавай быстро.

Создавай свою идею за 1 день, за неделю, за месяц, но не дольше!

Если ты не можешь создать хотя бы ее прототип за столь большой срок, ты не создашь ее никогда!

Получи конкретный результат, который можно показать другим.

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

Умей донести до людей «фишку», полезность твоей идеи.

У тебя еще будет время улучшить полученный результат.

Привлекай других людей к реализации своих идей.

Делись своими идеями!

Узнавай больше!

Динамическая инициализация новых виджетов твиттера

В сентябре 2012 года Twitter анонсировал новые захватывающие «инструменты реального времени для разработчиков веб-сайтов» ©, то есть новые виджеты. Причем старые виджеты кажется должны были перестать поддерживаться как раз в мае 2013, но видимо отключат их таки в июне. Так что самое время подумать о переезде на новую версию APi и новые виджеты.

Настройки виджета Embedded Timeline можно найти на сайте для разработчиков. Интересно то, что о динамической подгрузке виджета практически нигде не сказано. А порой это бывает нужно, например, когда часть контента страницы или даже вся страница подгружается аяксом. Как же это сделать? Есть ответ!

Редирект с www средствами роутинга в Ruby on Rails

В большинстве случаев редирект с поддомена www на домен второго уровня (или обратно) реализуется на уровне web-сервера (например, apache или nginx). Вот пример редиректа, настраиваемого в конфиге nginx:

        if ($host = 'www.dhampik.ru') {
                rewrite  ^/(.*)$  http://dhampik.ru/$1  permanent;
        }

Однако такая возможность имеется не всегда - иногда просто нет доступа к настройкам web-сервера, например, если вы используете хостинг heroku. В этом случае может помочь настройка редиректа средствами роутинга в Ruby on Rails.

Проблемы использования twitter bootstrap в Ruby on Rails на Windows

Пишем сайт. На Ruby on Rails. Хотим простого и красивого интерфейса из коробки и решаем использовать Twitter Bootstrap. И случилось такое дело, что разрабатываем мы в Windows. Конечно разрабатывать ruby-приложения на Windows - не лучшая идея, однако порой — вынужденная мера (например, под рукой у вас есть только виндовый компьютер или вы попали в команду "специфических" разработчиков).

Для подключения twitter bootstrap eсть 2 наиболее популярных гема - twitter-bootstrap-rails и bootsrap-sass. Разберем сложности, которые мы можем встретить при их использовании.

Реализация фильтрации по тегам в Yii и не только

Теггирование различных элементов очень часто встречается в разработке сайтов. Сами теги реализуются просто — это отдельная таблица с названиями тегов и таблица связки многие-ко-многим между тегами и какими-то сущностями. Однако реализация фильтрации по тегам — не такая уж простая задача. Фильтровать сущности по тегам как правило приходится одним из следующих вариантов:

  • выбрать все элементы без тегов
  • выбрать элементы, имеющие все указанные теги (и возможно, другие теги)
  • выбрать элементы, имеющие один или несколько из указанных тегов (и возможно, другие теги)

Рассмотрим каждый из этих случаев и приведем пример конкретной реализации фильтрации на Yii.

Передача параметров из контроллера в javascript-файлы

Javascript во вьюхах — часто ли вы встречаете такое?
Зачастую во вьюху из 3-5 строчек html-кода вставляются портянки яваскрипта на сотни строк.
На просьбу вынести этот код в отдельный js файл — можно услышать ответ, что в коде используются php-переменные из контроллера и, поэтому, вынести этот код из в отдельный js-файл не представляется возможным.

А в общем-то это довольно просто сделать. Просто и удобно.

Далее речь пойдет о реализации для фреймворка Yii, однако аналогичный подход легко реализуем и в других фреймворках.

Качественный импорт дампа базы mysql

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

SET NAMES utf8;
DROP DATABASE `mydb`;
CREATE DATABASE `mydb` DEFAULT CHARACTER SET utf8;
USE `mydb`;
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET autocommit=0;
SET foreign_key_checks=0;
SET unique_checks=0;
SOURCE /path/to/db_dump.sql;
COMMIT;
SET autocommit=1;
SET foreign_key_checks=1;
SET unique_checks=1;

Эти команды позволят вам быстро импортировать дамп базы данных и избежать проблем. Причем некоторые из этих проблем не решают даже распространенные mysql-клиенты, такие как phpMyAdmin и другие.

Magento: проблемы с var_dump и print_r

Сталкивались ли вы когда-нибудь с тем, что при выводе объекта на экран при помощи var_dump или print_r вы получали пустую страницу?

При выводе некоторых объектов PHP просто не хватает памяти (потому что объекты рекурсивны).

В таком случае в Magento у всех объектов, наследуемых от Varien_Object (а это практически все объекты), существует специальный метод debug(). Он позволяет избавиться от рекурсии.

Чтобы вывести дамп объекта в magento используйте следующую конструкцию: var_dump($product->debug());

Вывод результата запроса консоли mysql в вертикальном формате

Случалось ли такое, что при выборке из таблицы с множеством столбцов вы получали совершенно нечитаемый вывод на экран (из-за того, что столбцы расползались по нескольким строкам)?

Оказывается, можно вывести каждую строчку по-отдельности в виде пар «ключ: значение». Для этого всего лишь нужно в конце запроса вместо ; поставить G

Старт!

Добрый день!

Меня зовут Кирилл Калачёв.

Сим постом даю старт своему сайту и блогу!

Если вы его посетили и читаете, то вы вероятно очень любознательны!