Удобная фича при работе с форматами даты

При работе с датами часто возникает ошибка, что сгенерировав текущую дату забывают о хвостах вроде времени. По умолчанию все неуказанные значения берутся из текущего таймстампа. Но в формат даты можно подставлять спецсимволы, чтобы управлять этим процессом: |, !, +, & https://www.php.net/manual/ru/datetimeimmutable.createfromformat.php

Читать далее »

Работа с ветками и pull request

При разработке всегд используются системы контроля версий, обычно это git. Есть популярная система работы с ветками и репозиториями git-flow, но она больше подходит для оупенсурс разработки. В обычном же проекте обычно всё чуть по другому. Обычно есть один главный репозиторий с UI для него вроде github, gitlab или bitbucket. Заводятся две рабочие ветки:1. master — продакшен код2. develop — текущая разработка Разработчик делает ветку от develop с названием по номеру в системе трекинга и кратким описанием: для фичи git checkout -b feature/PRJ-123—task-description origin/develop или для багофикса использует другой префикс ветки git checkout -b bug/PRJ-123—bugfix origin/develop. Разработка фичи ведётся в этой…

Читать далее »

Поговорим о проблемах кэширования

Существует две главные проблемы программирования: именование переменных и инвалидация кэша. Поговорим о второй. Но для начала разберёмся с самим термином — кэширование. Я нашёл много определений, но мне они не очень нравятся. Приведу моё: Кэширование — от английского cacher (прятать, завёртывать), сохранение данных данных в другом месте или виде. Пункт, который меня смутил в других определениях — повсеместное упоминания ускорения. Но это не всегда так. Мы можем складывать данные и в более медленное хранилище, чтобы разгрузить основное. Тем самым уменьшив нагрузку на основной сторадж. Можем преобразовать данные в вид более удобный для парсинга как то xml или json. Можем разбрасывать…

Читать далее »

Недостатки laravel

Я очень люблю фреймворк laravel, пользуюсь им начиная с 3-й версии, тогда он был как глоток свежего воздуха на фоне zend и symfony. Уважаю Тейлора за проделанную работу, за принесённую в php фреймворки идею удобного апи и умение копировать лучшее из других фреймворков вроде RoR. О плюсах сказано уже много, но у него есть свои недостатки. Эти недостатки не фатальны, а некоторые и вовсе мои личные привычки, которые другим покажутся надуманными. Всё дерьмо вылитое ниже не сильно влияет на мою оценку laravel, который считаю лучшим фреймворком в мире PHP. И спасибо @kotchuprik и его статье, который подтолкнул высказаться и дал некоторые идеи.

Читать далее »

Проблемы с обновлением ubuntu

Недавно на kubuntu 14.10 столкнулся с проблемой при обновлении Ош http://by.archive.ubuntu.com utopic-backports/main Sources 404 Not Found Ош http://by.archive.ubuntu.com utopic-backports/restricted Sources 404 Not Found Ош http://by.archive.ubuntu.com utopic-backports/universe Sources 404 Not Found Ош http://by.archive.ubuntu.com utopic-backports/multiverse Sources 404 Not Found Ош http://by.archive.ubuntu.com utopic-backports/main i386 Packages 404 Not Found Ош http://by.archive.ubuntu.com utopic-backports/universe i386 Packages 404 Not Found Ош http://by.archive.ubuntu.com utopic-backports/multiverse i386 Packages 404 Not Found В кэше http://by.archive.ubuntu.com utopic-backports/main Translation-en В кэше http://by.archive.ubuntu.com utopic/restricted Translation-ru Долго не мог найти решение, но всё же нарыл в очередной заход sudo -i apt-get clean cd /var/lib/apt mv lists lists.old mkdir -p lists/partial apt-get clean apt-get update Спасибо…

Читать далее »

Continuous Integration, delivery, deployment

Данный пост противопоказан и может оскорблять чувства верующих в церковь Мартина Фаулера, так как является довольно вольной трактовкой, но обтесанной годами моей практики. Сидит программист, пишет свой код, думает о пиве и здесь появляется другой программист, с ним тестировщик и, прости Господи, проектный менеджер. Здесь уже не до пива, код больше нельзя править на сервере через удалённый доступ. Приходится разворачивать git, лепить ветки, создавать билды и гонять тесты и в дело вступает супергерой Continuous. Последнее время принято мешать три шага Continuous в одну кучу, хотя эти шаги сильно отличаются по целям и подходам. Эти шаги — Continuous Integration, Continuous Delivery и Continuous Deployment.

Читать далее »

Итоги 2014

В 2014 году в блоге не появилось ни одной новой записи, но помню про него, копится материал, появилась парочка черновиков и в 2015 обязательно разрожусь целым циклом постов. Год получился отличным, есть о чём рассказать. Помимо написания кода, активно начал заниматься обучением: появилась стажёрская программа, организуем воркшопы внутри компании, готовим небольшой хакатон, провел тьму собеседований. Приятно наблюдать как это всё приносит результаты, да ещё быстрее чем планировалось. Огромное спасибо за это HR и просто отличному человеку Ольге Бобко, которая дала возможность и подталкивает в этом направлении. А вот за код мне стыдно, он становится всё более пахнущим, работа в команде и бизнес требования…

Читать далее »

Continuous integration с Jenkins

Continuous integration или непрерывная интеграция — это практика создания  автоматизированной сборки проекта. Хотя это и звучит как-то заковыристо, но это то, что программист делает ежедневно. Мы пишем код и проверяем его на синтаксические ошибки, на соответствие стилю кодирования, прогоняем тесты, боремся с copy-past и тд. и т.п. В PHP существует масса инструментов. позволяющих это автоматизировать, в PEAR есть пакет phpqatools, который ставит сразу пачку таких утилит. Но прогонять их руками неудобно, к тому же хочется иметь какой-то графический интерфейс, чтобы просматривать отчёты, чтобы наблюдать как изменяется проект, иметь возможность смотреть на старые версии и т.д. Здесь на помощь приходит Jenkins.

Читать далее »

ORDER BY FIELD в Laravel

Есть замечательная SQL конструкция, позволяющая задавать свой порядок сортировки для ORDER BY. Сегодня мне понадобилось использовать ORDER BY FIELD(priority, 2,1,3), ситуация осложнялась тем, что используется ORM от Laravel и его Query Builder экранирует то. что передано через ->orderBy. Решение же оказалось очень простым, нужно использовать raw \Model::orderBy( \DB::raw(‘FIELD(status, 2, 1, 3)’) );

Читать далее »

Laravel-4

Последнее время меня пугают некоторые тенденции для библиотек в PHP, вместо простого и быстрой разработки мы получаем JAVA. Сейчас много php фреймворков и я их делю на две основные категории: 1. Монстры с большой гибкостью и возможностью менять любой компонент. Они отлично подходят для кровавого энтерпрайза. В этой категории два лидера Symfony 2 и Zend Framework 2, хотя последний у меня вызывает скепсис, слишком уж сырой он появился на свет. 2. Фреймворки для быстрой разработки, они менее архитектурно красивы, зато не требуют писать такую кучу кода. Среди них следует отметить широко известные Yii и Kohana. Есть ещё микрофреймворки, php расширения,…

Читать далее »