Search
Write a publication
Pull to refresh
0
0
Шелестов Александр @shelestov

User

Send message

Как создать свой собственный Dependency Injection Container

Reading time9 min
Views35K
Привет всем!
Это вольный перевод статьи How to Build Your Own Dependency Injection Container.
Т.к. это мой первый перевод для хабра, прошу указывать на ошибки, неточности.

Как создать свой собственный Dependency Injection Container.


Поиск “dependency injection container” на packagist на данный момент выдает более 95 страниц результата. С уверенностью можно сказать, что это особое “колесо” уже изобретено.

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

В этой статье мы собираемся учиться делать простой dependency injection container пакет. Весь написанный в статье код плюс PHPDoc аннотации и unit-тесты с 100% покрытием доступны на GitHub. Все это так же добавлено на Packagist.
Читать дальше →

PHP-Дайджест № 79 – интересные новости, материалы и инструменты (1 – 14 февраля 2016)

Reading time3 min
Views21K


Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.

Приятного чтения!
Читать дальше →

Объясняя необъяснимое

Reading time11 min
Views67K
Друзья, мы с радостью продолжаем публикацию интересных материалов, посвященных самым разнообразным аспектам работы с PostgreSQL. Сегодняшний перевод открывает целую серию статей за авторством Hubert Lubaczewski, которые наверняка заинтересуют широкий круг читателей.



Одна из первых вещей, которую слышит новоиспеченный администратор баз данных – «используй EXPLAIN». И при первой же попытке он сталкивается c непостижимым:

                                                        QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------
 Sort  (cost=146.63..148.65 rows=808 width=138) (actual time=55.009..55.012 rows=71 loops=1)
   Sort Key: n.nspname, p.proname, (pg_get_function_arguments(p.oid))
   Sort Method: quicksort  Memory: 43kB
   ->  Hash Join  (cost=1.14..107.61 rows=808 width=138) (actual time=42.495..54.854 rows=71 loops=1)
         Hash Cond: (p.pronamespace = n.oid)
         ->  Seq Scan on pg_proc p  (cost=0.00..89.30 rows=808 width=78) (actual time=0.052..53.465 rows=2402 loops=1)
               Filter: pg_function_is_visible(oid)
         ->  Hash  (cost=1.09..1.09 rows=4 width=68) (actual time=0.011..0.011 rows=4 loops=1)
               Buckets: 1024  Batches: 1  Memory Usage: 1kB
               ->  Seq Scan on pg_namespace n  (cost=0.00..1.09 rows=4 width=68) (actual time=0.005..0.007 rows=4 loops=1)
                     Filter: ((nspname <> 'pg_catalog'::name) AND (nspname <> 'information_schema'::name))

Что бы это могло значить?
Читать дальше →

Несколько вещей, о которых стоит помнить программисту в возрасте

Reading time11 min
Views128K
Если вы из тех, кто «работал ещё Там-То!» и «делал ещё То-То!», а сейчас счастливо отдыхаете на пенсии — эта статья не для вас. Просто спасибо за труд и примите мои поздравления. Но если же вы, как и я, даже став немного старше всё ещё ощущаете страсть к программированию, радуетесь виду кода и не можете устоять перед желанием написать ещё что-нибудь, тогда продолжайте читать.

Большую часть моей жизни я проработал разработчиком программного обеспечения. Но однажды, уже под конец моего четвёртого десятка, я попался на удочку предпринимательской наживы. Я тогда поверил, что создавать собственные компании — это круто. Я нашел немного венчурного капитала и организовал пару небольших стартапов для реализации собственных идей. И вот я стал, как мне казалось, нормальным CEO и не таким уж плохим менеджером. И, хотя я уже не писал код лично, я мог нанимать хороших программистов, управлять качеством проектов и внедрением инноваций.

Я смирился с мыслью, что мой лучший код уже написан — в прошлом. Мне было уже 54 года (немало!) и я, вероятно, уже не мог писать код так же хорошо, как и раньше. Кто знает — может быть у меня уже начала отказывать память, ну или я просто выучил всё, что был способен в жизни выучить. Мой настрой подкреплялся наблюдениями окружающей меня реальности. Все новые технологии выглядели для меня чудаковато. Я ненавидел Node.js. Я считал все фреймворки для веб-разработки ужасными. И я сетовал на то, что классические способы разработки ПО разрушились и превратились в набор клише, которые нынче впариваются под умными названиями типа Agile или «экстремальное программирование». Я скучал за днями, когда люди писали спецификацию на будущее ПО, программировали, а затем тщательно тестировали его. И когда в каждой статье не было тысячи жаргонных словечек.
Читать дальше →

Как уволиться с работы и довериться инстинктам вашего скрытого крутыша

Reading time6 min
Views37K


10 вопросов, которые нужно задать себе, убедившись, что вы не удовлетворены своей карьерой и жизнью.

Однажды утром 2006 года я проснулся с онемевшей правой ногой. Боли не было – лишь ещё один странный симптом в копилку тех симптомов, что годами удивляли моих докторов. Я пошёл к терапевту, отправившему меня на МРТ, и результаты не заставили себя ждать. Множественные повреждения мозга и позвоночника. У меня обнаружили рассеянный склероз.

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

Я начал посещать группы больных рассеянным склерозом и познакомился с людьми, находящимися на разных стадиях этой болезни. Тогда я понял, что моё будущее хуже, чем я себе представлял. Болезнь действует не на одного человека, а на целые семьи — в то время, как они наблюдают, как их близкие начинают терять свои возможности. Я твёрдо решил сделать две вещи: максимизировать шансы оставаться дееспособным как можно дольше, путём приобретения полезных привычек, счастья и хорошего медобслуживания; и достичь моих целей и мечтаний как можно быстрее, пока ещё есть возможность.

image
Джон Фокстон, автор статьи

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

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

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

PHP-Дайджест № 75 – интересные новости, материалы и инструменты (22 ноября – 6 декабря 2015)

Reading time4 min
Views21K


Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы. Также под катом вас ждет специальная подборка по PHP 7.

Приятного чтения!
Читать дальше →

Проектирование в PostgreSQL документо-ориентированного API (Часть 1)

Reading time5 min
Views18K
Данная статья является переводом, оригинальная статья находится вот здесь, автор Rob Conery.

Postgres, как многие знают, поддерживает JSON как тип хранения данных, а с выходом 9.4, Postgres теперь поддерживает хранение JSON в виде jsonb — бинарного формата.

Это прекрасные новости для тех, кто хочет шагнуть дальше простого «хранения JSON как текста». jsonb теперь поддерживает индексирование с использованием GIN индекса, а также имеет специальный оператор запросов, который позволяет получить преимущества GIN индекса.
Читать дальше →

PostgreSQL 9.5: что нового? Часть 3. GROUPING SETS, CUBE, ROLLUP

Reading time16 min
Views35K
Продолжаем знакомиться с новыми возможностями в PostgreSQL 9.5.
Часть 1. INSERT… ON CONFLICT DO NOTHING/UPDATE и ROW LEVEL SECURITY
Часть 2. TABLESAMPLE
Сегодня рассмотрим множественные группировки в одном запросе. Эта возможность была описана еще в стандарте SQL-99. Её удобно применять в том случае, если вам нужно сделать несколько запросов к одной и той же таблице, отличающихся только условием в GROUP BY. Для этого модификаторы GROUPING SETS, ROLLUP, CUBE указываются в качестве элемента группировки после ключевого слова GROUP BY.
Давайте посмотрим поближе, как это работает.
Читать дальше →

Памятка евангелиста PostgreSQL: репликанты против репликации

Reading time14 min
Views37K


В продолжение серии публикаций «Памятка евангелиста PostgreSQL...» (1, 2) дорогая редакция снова выходит на связь, на этот раз с обещанным обзором механизмов репликации в PostgreSQL и MySQL. Главным поводом для написания послужила частая критика репликации MySQL. Как это часто бывает, типичная критика представляет из себя забористую смесь из правды, полуправды и евангелизма. Всё это многократно реплицируется разными людьми без особых попыток разобраться в услышанном. А поскольку это довольно обширная тема, я решил вынести разбор в отдельную публикацию.
Читать дальше →

Самый главный аргумент против MySQL?

Reading time2 min
Views32K
Недавняя серия статей («Памятка евангелиста PostgreSQL: критикуем MySQL грамотно» 1,2,3) зацепила за живое.

Так получилось, что моя команда унаследовала, истеорически сложившуюся систему, с 300+ объектами, где одним из ключевых компонентов системы выступает именно MySQL. На некоторых объектах также используется репликация. ПО использующее MySQL от стороннего разработчика.
Читать дальше →

Git Rebase: руководство по использованию

Reading time8 min
Views856K
Rebase — один из двух способов объединить изменения, сделанные в одной ветке, с другой веткой. Начинающие и даже опытные пользователи git иногда испытывают нежелание пользоваться ей, так как не видят смысла осваивать еще один способ объединять изменения, когда уже и так прекрасно владеют операцией merge. В этой статье я бы хотел подробно разобрать теорию и практику использования rebase.

Теория


Итак, освежим теоретические знания о том, что же такое rebase. Для начала вкратце — у вас есть две ветки — master и feature, обе локальные, feature была создана от master в состоянии A и содержит в себе коммиты C, D и E. В ветку master после отделения от нее ветки feature был сделан 1 коммит B.


Читать дальше →

Как посчитать всё на свете одним SQL-запросом. Оконные функции PostgreSQL

Reading time5 min
Views606K

Я с удивлением обнаружил, что многие разработчики, даже давно использующие postgresql, не понимают оконные функции, считая их какой-то особой магией для избранных. Ну или в лучшем случае «копипастят» со StackOverflow выражения типа «row_number() OVER ()», не вдаваясь в детали. А ведь оконные функции — полезнейший функционал PostgreSQL.
Попробую по-простому объяснить, как можно их использовать.


Читать дальше →

PHP-Дайджест № 71 – интересные новости, материалы и инструменты (21 сентября – 5 октября 2015)

Reading time4 min
Views21K


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

Под катом, как всегда, вас ждет подборка со ссылками на новости и материалы.

Приятного чтения!
Читать дальше →

PHP-Дайджест № 70 – интересные новости, материалы и инструменты (6 – 20 сентября 2015)

Reading time3 min
Views21K


Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.

Приятного чтения!
Читать дальше →

Как работают замыкания (под капотом) в JavaScript

Reading time11 min
Views76K
Привет, Хабр!

Мы в Хекслете используем JavaScript не только для очевидных задач во фронтэнде, но и, например, для реализации браузерной среды разработки (наш опен-сорсный hexlet-ide) на React'е. У нас есть практический курс по JavaScript, и один из уроков там посвящен замыканиям. Это важная тема не столько в рамках JS, сколько в программировании вообще. Мы освещаем ее и в других курсах.

В целом, статей и туториалов про использование замыканий в JS полно, но объяснений как это все работает внутри — мало. Сегодняшний перевод посвящен именно этой теме. Как и почему работают замыкания в JS, когда они создаются и уничтожаются и почему каждая функция в JS — это замыкание.


Я использую замыкания уже достаточно давно. Я научился их использовать, но не до конца понимал как они на самом деле работают, что происходит «под капотом». Что это вообще такое? Википедия не очень помогает. Когда замыкание создается и уничтожается? Как выглядит реализация?

"use strict";
 
var myClosure = (function outerFunction() {
 
  var hidden = 1;
 
  return {
    inc: function innerFunction() {
      return hidden++;
    }
  };
 
}());
 
myClosure.inc();  // возвращает 1
myClosure.inc();  // возвращает 2
myClosure.inc();  // возвращает 3
 
// Ага, круто. А как это реализовано?
// И что происходит под капотом?
Читать дальше →

PHP-Дайджест № 65 – интересные новости, материалы и инструменты (14 – 28 июня 2015)

Reading time3 min
Views16K


Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.

Приятного чтения!
Читать дальше →

Кейс: Организуем работу сотрудников удаленно

Reading time4 min
Views6.1K
image

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

Ранее мы рассказывали о том, как телефония может помочь владельцам Интернет магазинов.
Теперь я владелец интернет-магазина (Часть 1)
Теперь я владелец интернет-магазина (Часть 2)
Теперь я владелец интернет-магазина (Часть 3)


И о том, как с помощью телефонии «превратить» фрилансера в серьезную компанию
Учим фрилансеров врать

Сегодня, мы хотели бы поговорить о том, как телефония может помочь в работе удаленных сотрудников в компании

Читать дальше →

PHP-Дайджест № 63 – интересные новости, материалы и инструменты (11 – 31 мая 2015)

Reading time4 min
Views19K


Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.

Приятного чтения!
Читать дальше →

Cовременный подход к HTTP с PHPixie и PSR-7

Reading time3 min
Views8.9K
image
Стандартный PHP API для работы с HTTP запросами давно устарел. Программисты научились не использовать глобальные переменные, но стандартные суперглобалы как $_GET, $_SERVER все еще напоминают нам о далеком прошлом. Конечно фреймворки инкапсулируют эту информацию в свои Request\Response классы, но таких реализаций очень много и пока еще не было единственного стандарта. Стандарт PSR-7 от PHP-FIG как раз должен привести репрезентацию HTTP протокола к единственному знаменателю что позволит писать Middleware который будет работать сразу на многих фреймворках. Он пока еще не принят, но досрочное голосование показало практически единоголосную поддержку нового стандарта. PHPixie готовясь к релизу версии 3.0 уже приняла и имплементировала PSR-7, а также предоставляет обертки для упрощенной работы с интерфейсом. Если вы хотите создать свой микрофреймворк то взяв PHPixie HTTP за основу, сможете добиться результатов уже за один вечер.
Читать дальше →

Видео докладов с MoscowJS Meetup

Reading time1 min
Views12K
Недавно в офисе Badoo проходил юбилейный MoscowJS Meetup. Делимся с вами видео докладов.

1. «Специфика верстки мультиязычных веб-приложений»
Александр Тевосян, Badoo.




+ Выложили на GitHub нашу утилиту rtl-css специально к митапу: https://github.com/badoo/rtl-css
Читать дальше →

Information

Rating
Does not participate
Location
Арзамас, Нижегородская обл., Россия
Date of birth
Registered
Activity