Как стать автором
Обновить
1
0
Олексій @Assada

Пользователь

Отправить сообщение

Готовимся к собеседованию по PHP: Всё, что вы хотели узнать об интерфейсах, совместимости сигнатур и не побоялись узнать

Время на прочтение6 мин
Количество просмотров111K
imageИнтерфейсы, впервые появившись в PHP 5, давно уже заняли прочное место в объектно-ориентированной (или всё-таки правильнее «класс-ориентированной»?) части языка.

Казалось бы — что может быть проще интерфейса? "Как бы класс, но и не класс, нельзя создать экземпляр, скорее контракт для будущих классов, содержит в себе заголовки публичных методов" — не правда ли, именно такими словами вы чаще всего отвечаете на собеседовании на дежурный вопрос о том, что такое интерфейс?

Однако не всё так просто, как может показаться начинающему программисту на PHP. Привычные аналогии не работают, руководство по языку вводит вас в заблуждение, в коде таятся неожиданные «подводные камни»…

Три предыдущие части:

Проверьте себя: всё ли вы знаете об интерфейсах в PHP?
Всего голосов 29: ↑27 и ↓2+25
Комментарии41

Шестиугольный город

Время на прочтение5 мин
Количество просмотров173K

Скриншот из игры «Cities: Skylines». Кликабельно

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

Так как я не то что не владею, но даже не знаю ни одной программы или другого профессионального инструмента для симуляции городов и передвижения транспорта в городах, я решил провести исследование в игре «Cities: Skylines», благо она вполне для этого подходит.

Если заинтересовались, добро пожаловать под кат.

Читать дальше →
Всего голосов 116: ↑111 и ↓5+106
Комментарии890

Дерзкий telegram бот

Время на прочтение3 мин
Количество просмотров107K

Недавно, в попытках разобраться с nlp, мне пришла идея написать простого telegram бота, который будет разговаривать, как дерзкий гопник. То есть:


  • давать ответ по слову-триггеру, как "хочу", "короче", "нет" и т.д.;
  • отвечать дерзким вопросом на вопрос;
  • отвечать нецензурной рифмой;
  • если ничего не подходит и бот в замешательстве, отвечать злой фразой.

Для имплементации был выбран JavaScript с ES6 и Flow. Возможно, Python подошёл бы лучше, так как под него существует больше стабильных и проверенных библиотек для nlp. Но для JS есть Az.js, которого вполне хватило.


Для работы с Telegram API был использован node-telegram-bot-api.


TLDR: бот, исходный код


Осторожно, под катом присутствует нецензурная речь и детали реализации!

Читать дальше →
Всего голосов 66: ↑40 и ↓26+14
Комментарии25

5 худших приемов отечественного дизайна из 90-х

Время на прочтение2 мин
Количество просмотров59K
В девяностые, когда стали доступны первые компьютеры, каждый мог стать дизайнером и сделать вывеску для своего ларька.
К нам в рубрику #logomachine_help присылают самые разные логотипы, но от многих по-прежнему веет тем самым любительским дизайном из 90-х. Мы собрали самые распространенные проблемы в 5 худших приемов, которых лучше избегать, если ты не возишь щебень на самосвале.

Читать дальше →
Всего голосов 74: ↑45 и ↓29+16
Комментарии44

Выбор бюджетной «вертушки»: «теплые» виниловые компромиссы до 15 К рублей

Время на прочтение7 мин
Количество просмотров65K
Сегодня винил и всё, что с ним связано у многих твердо ассоциируется с высокой стоимостью, «зажравшимися аудиофилами», астрономическими ценами на коллекционные пласты или в лучшем случае с модными чаяниями пафосных хипстеров. Стереотип настолько силён, что первый комментарий к нашей предыдущей статье «о парадоксе винилового тренда» был следующий:
«С жиру бесятся. Больше сказать нечего»



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

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

Полагаю, что публикация будет полезна потенциальным покупателям и при этом не заденет тонкую душевную организацию хейтеров коммерческого контента (мы-таки торговая организация и будем признательны за лояльность). Я в свою очередь постараюсь максимально снизить градус «теплого» винилового пафоса.
Читать дальше →
Всего голосов 25: ↑16 и ↓9+7
Комментарии89

Испанская пчеловод-любитель случайно обнаружила, что личинки большой восковой моли пожирают пластик

Время на прочтение3 мин
Количество просмотров42K


Биологи сделали большое открытие. Оказывается, обычные гусеницы, которых часто разводят в качестве приманки для рыбы, обладают гораздо более ценным свойством. Они могут перерабатывать полиэтилен — один из самых прочных и часто используемых видов пластика, который повсеместно засоряет свалки и Мировой океан. Полиэтилен и полипропилен составляют 92% мирового производства пластика, в том числе полиэтилен — 40%. Каждый год люди используют и выбрасывают триллион полиэтиленовых пакетов.

Эти гусеницы — личинки распространённого насекомого Galleria mellonella (большая восковая моль). Животное считается вредителем, потому что откладывает личинки в ульях медоносных пчёл. Там гусеницы питаются мёдом, пыльцой и воском (отсюда и название моли), повреждая всё вокруг: соты, расплод, запасы мёда, пергу, рамки и утеплительный материал ульев. Но всё-таки у этих вредных гусениц нашлось полезное применение. Вместо воска им можно скармливать отходы пластика.
Читать дальше →
Всего голосов 61: ↑59 и ↓2+57
Комментарии158

Виртуальная Машина PHP 7

Время на прочтение34 мин
Количество просмотров30K
Всем доброго времени суток! Меня зовут Константин, в Badoo я работаю в команде Features Team. Скорее всего, вы уже знаете, что наш бэкенд написан на PHP и обслуживает более трёх сотен миллионов пользователей. Так что я не мог упустить шанс перевести эту статью core-разработчика PHP Никиты Попова. Уверен, она будет полезна разработчикам всех уровней, но новичкам может показаться сложноватой. Приятного (и полезного) чтения!



В статье представлен обзор виртуальной машины Zend для PHP 7. Это не исчерпывающее описание, но я постараюсь охватить большинство важных частей, а также некоторые детали.

Описание сделано на основе PHP версии 7.2 (в настоящее время находится в разработке), но почти всё справедливо и для PHP 7.0/7.1. Однако отличия от виртуальных машин серии PHP 5.x являются значительными, и с ними я, как правило, не проводил параллели.
Читать дальше →
Всего голосов 59: ↑56 и ↓3+53
Комментарии12

Индексы в PostgreSQL — 1

Время на прочтение17 мин
Количество просмотров432K

Предисловие


В этой серии статей речь пойдет об индексах в PostgreSQL.

Любой вопрос можно рассматривать с разных точек зрения. Мы будем говорить о том, что должно интересовать прикладного разработчика, использующего СУБД: какие индексы существуют, почему в PostgreSQL их так много разных, и как их использовать для ускорения запросов. Пожалуй, тему можно было бы раскрыть и меньшим числом слов, но мы втайне надеемся на любознательного разработчика, которому также интересны и подробности внутреннего устройства, тем более, что понимание таких подробностей позволяет не только прислушиваться к чужому мнению, но и делать собственные выводы.

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

В этой части мы поговорим про разделение сфер ответственности между общим механизмом индексирования, относящимся к ядру СУБД, и отдельными методами индексного доступа, которые в PostgreSQL можно добавлять как расширения. В следующей части мы рассмотрим интерфейс метода доступа и такие важные понятия, как классы и семейства операторов. После такого длинного, но необходимого введения мы подробно рассмотрим устройство и применение различных типов индексов: Hash, B-tree, GiST, SP-GiST, GIN и RUM, BRIN и Bloom.
Читать дальше →
Всего голосов 104: ↑103 и ↓1+102
Комментарии59

Полная автоматизация среды разработки с помощью docker-compose

Время на прочтение7 мин
Количество просмотров27K

Согласно данным, которые представил на Dockercon 2016 CEO компании Docker Бен Го́луб (Ben Golub), количество работающих в контейнерах Docker приложений за последние два года выросло на 3100%. Docker обеспечивает функционирование 460 тысяч приложений по всему миру. Это невероятно!


Если вы еще не начали использовать Docker, прочтите этот впечатляющий документ о его внедрении. Docker изменил подход к созданию приложений и стал крайне важным инструментом для разработчиков и DevOps-специалистов. Эта статья рассчитана на тех, кто уже использует Docker, и призвана открыть еще одну причину, по которой стоит продолжать это делать.


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

Читать дальше →
Всего голосов 29: ↑27 и ↓2+25
Комментарии38

php-cs-fixer: Пишем свой фиксер

Время на прочтение5 мин
Количество просмотров18K

Качество кода не только в том, как он работает, но и в том как выглядит. То, что единый в рамках кампании code style — это очень важная вещь — в наши дни убеждать уже никого не нужно. Код должен быть не только написан, но и оформлен. В плане оформления PHP кода, утилита php-cs-fixer давно уже стала стандартом. Использовать ее довольно просто, есть куча правил и можно удобно забиндить ее запуск на какую-нибудь комбинацию клавиш в шторме или на pre-commit hook в гите. Все это легко гуглится и подробно разбирается в сотнях статей. А мы сегодня поговорим о другом. Хотя в php-cs-fixer есть большое количество разных фиксеров, но что, если нам понадобится такой, которого там нет? Как написать собственный фиксер?
Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии0

Способы деанонимизации руководителей сообществ и приложений «Вконтакте»

Время на прочтение4 мин
Количество просмотров37K
Все описанные способы были отправлены «Вконтакте» через hackerone, но «Вконтакте» решили, что эти способы не являются проблемами. Решение было принято через 6 месяцев после изменения статуса репорта на «Triaged». Я пытался переубедить, но ответа не увидел.

Многие продемонстрированные ссылки у вас работать не будут, т. к. они разные для всех.
Читать дальше →
Всего голосов 60: ↑53 и ↓7+46
Комментарии26

Как попробовать Smalltalk на вкус

Время на прочтение7 мин
Количество просмотров17K
Smalltalk LogoС выходом на большую арену Ruby и с появлением фреймворка Seaside, все чаще упоминается Smalltalk. Однако, среди молодого поколения (разработчики до 30 лет) бытует мнение, что это мертвый язык, разработанный на заре появления ПК и тогда же похороненный. Упоминание о Smalltalk на лекциях по ЯП, недалеко от COBOL, делает его еще более архаичным.

Однако, это неправда! Все это время Smalltalk жил, иногда даже рядом с нами, развивался, использовался для решения серьезных задач, а иногда — для несерьезных. вот тут просто фраза как-то странно построена. Но вот притока свежей крови в сообщество разработчиков практически не было. Причины сейчас перечислять бессмысленно.

Но что происходит когда программисту хочется попробовать что-то новенькое? Он пытается это сделать. И от того, насколько это легко или сложно, с какими проблемами он столкнется, зависит его отношение к инструменту в дальнейшем.
попробовать Smalltalk
Всего голосов 88: ↑84 и ↓4+80
Комментарии57

Несколько полезных команд для работающих в терминале Linux

Время на прочтение1 мин
Количество просмотров19K
Загрузка файла по ссылке с возможностью продолжить загрузку, например, при обрыве соединения:
wget -c http://link/file

Просмотр записи в текстовый файл в реальном времени:
tailf file

Узнать время выполнения команды:
time command

Слежение за изменениями в выводе команды:
watch command

Сочетание клавиш для закрытия текущей сессии в bash и различных утилитах, например клиент MySQL:
Ctrl-D

Быстрое создание резервной копии файла:
cp file{,.copy}
Читать дальше →
Всего голосов 69: ↑33 и ↓36-3
Комментарии34

Инфраструктура Twitter: масштаб

Время на прочтение15 мин
Количество просмотров17K

Обзор парка Twitter


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

Наше текущее распределение оборудования показано ниже:


Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии5

Пора ли увольняться?

Время на прочтение6 мин
Количество просмотров60K
В большей своей массе люди пишут и инструктируют на тему «как найти работу?». А вот как уволиться, и, что важнее, когда увольняться – почти никто ничего не говорит. Оно и понятно, тема весьма деликатная и порой неприятная. Однако попробую сей пробел отчасти восполнить.

И, конечно, все что сказано ниже – есть исключительно личное и предельно субъективное мнение. Поэтому если вы встретите в тексте слова «следует», «должны», то читайте это как «автор бы сделал», а вот что делать вам – решать только вам.

Читать дальше →
Всего голосов 105: ↑102 и ↓3+99
Комментарии111

Запрещенные изменения в коде или продолжение истории ремонта одного крана

Время на прочтение6 мин
Количество просмотров13K

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

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

Откладывание рефакторинга на потом ведет к увеличению технического долга и созданию задач (user story) на рефакторинг, которые не имеют business value для product owner-a, а соответственно такие задачи не будут попадать в топ продуктового беклога.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии7

NodeJS фреймворк с синтаксисом Laravel

 (и без лапши в коде)

Время на прочтение3 мин
Количество просмотров33K

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

Читать дальше →
Всего голосов 39: ↑27 и ↓12+15
Комментарии42

Пилим каталог товаров не притрагиваясь к реляционной алгебре

Время на прочтение7 мин
Количество просмотров19K

Здравствуйте, меня зовут Дмитрий Карловский и я… давно не занимался бэкендом, но на днях вдруг наткнулся на мучения SbWereWolf по натягиванию ужа на ежа и не смог удержаться от соблазна сдуть пыль со своего мульти-инструмента OrientDB да оттяпать им чего-нибудь этакого.


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


Разбирать мы будем вот этот вот реляционный звездолёт:


17 таблиц


А собирать вот такой вот графовый скворечник:


5 классов

Читать дальше →
Всего голосов 22: ↑19 и ↓3+16
Комментарии38

Урок photoshop. Как вырезать сложный объект из фона

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

Всего голосов 49: ↑23 и ↓26-3
Комментарии14

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

Время на прочтение18 мин
Количество просмотров23K


На конференции HighLoad++ 2016 Олег Облеухов рассказал о не требующей при росте нагрузки вмешательства администратора архитектуре, которую он спланировал и внедрил в компании InnoGames.

Всем привет. Буквально пару слов обо мне. Меня зовут Олег, до этого я работал в компании «Яндекс», жил в замечательном городе Санкт-Петербурге. Сейчас я переехал в Германию и работаю в InnoGames. Компания занимается разработкой онлайн-игр. На счету 150 миллионов пользователей — достаточно большая компания, ну поменьше, чем «Яндекс», конечно. И сегодня мы поговорим с вами о том, как сделать высоконагруженный сервис без данных о нагрузке, не зная её количество.

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

На самом деле мы не будем сегодня разговаривать о Docker. Но мы будем разговаривать о CRM. Я вам расскажу, что это такое, зачем нам нужна эта система.
Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии6

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность