Как стать автором
Обновить
-21
0
Отправить сообщение

Functional C#: Primitive obsession (одержимость примитивами)

Время на прочтение6 мин
Количество просмотров28K
Это вторая статья из миницикла статей про функциональный C#.

Читать дальше →
Всего голосов 24: ↑22 и ↓2+20
Комментарии49

Что почитать тимлиду и СТО: подборка из 50 книг с оценками и не только

Время на прочтение4 мин
Количество просмотров47K
Привет, завтра мы собираем за одним столом руководителей разработки из разных известных компаний — обсудим 6 вечных вопросов: как замерять эффективность разработки, внедрять изменения, нанимать и так далее. Ну а накануне решили поднять седьмой вечный вопрос — что читать, чтобы расти?

Профессиональная литература — сложный вопрос, особенно если говорить о литературе для руководителей в сфере IT. Чтобы понять, на что потратить вечно не хватающее время, мы опросили подписчиков канала «Тимлид Леонид» и собрали подборку из полусотни книг*. А затем добавили отзывы наших тимлидов к самым популярным. Так как список ниже глубоко субъективен и основан на отзывах незнакомых вам людей, оценивать литературу мы будем в «сферических совах».




1. «Джедайские техники. Как воспитать свою обезьяну, опустошить инбокс и сберечь мыслетопливо» / Дорофеев Максим


TL;DR

Из книги вы узнаете:

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

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

Оценка: 6,50 сферических сов.


Читать дальше →
Всего голосов 36: ↑31 и ↓5+26
Комментарии17

Под капотом Graveyard Keeper: Как реализованы графические эффекты

Время на прочтение5 мин
Количество просмотров55K
Всем привет! Целых 4 года я не писал на Хабр. Последняя моя серия постов была о различных инструментах и приемах, которые мы применяли на нашей прошлой игре (разрабатывая ее на Unity). С тех пор игру ту мы благополучно выпустили, а также выпустили и новую. Так что теперь можно немного выдохнуть и написать несколько новых статей, которые могут быть кому-то полезны.


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

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

Для начала, кратко перечислю из чего собирается картинка в нашей игре:
Читать дальше →
Всего голосов 179: ↑178 и ↓1+177
Комментарии98

Воссоздание шрифтов с экрана ЭЛТ

Время на прочтение4 мин
Количество просмотров16K
Изучение глифов на терминалах DEC VT100 и VT220

Недавно я немного увлёкся эмуляцией аналоговых медиа: хотелось воссоздать растровую графику ЭЛТ, как на «стеклянных терминалах» прошлого, таких как культовая серия VT от Digital Equipment Corporation (DEC). В процессе возник ряд вопросов об особенностях отображения шрифтов в пиксельной графике ЭЛТ. Интересно, как на самом деле выглядели шрифты и можно ли реконструировать их по спецификациям?


Современные шрифты TrueType воссоздают глифы VT220. Имейте в виду, что VT-терминалы поддерживали два режима разрешения: один на 132 символа в строке и один на 80 символов (char-matrix 9×10 и 10×10, соответственно), в последнем интервал расширен на один пиксель

Благодаря обилию технической информации на сайтах вроде vt100.net и bitsavers.org можно легко определить внешний вид тех шрифтов. Например, мы можем восстановить глифы из прошивки терминалов. Есть даже шрифты TrueType, которые повторяют типографику VT220: Glass TTY VT220 с растровыми строками и DEC Terminal Modern с современными, гладкими очертаниями (на иллюстрации вверху).
Читать дальше →
Всего голосов 101: ↑101 и ↓0+101
Комментарии14

Почему ранний возврат из функций так важен?

Время на прочтение8 мин
Количество просмотров43K
Привет, Хабр! Представляю вашему вниманию перевод статьи «Why should you return early?» автора Szymon Krajewski

image

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

Очевидно, что существует несколько подходов написания одной и той же функции. Например, как можно начать выполнение основной части сразу после положительного исхода условного оператора, так и можно сначала пробежаться по всем отрицательным исходам, возвращая ошибки из функции, а уже только потом перейти к основной логике. Иными словами, я открыл для себя разные стили написания условных конструкций.
Читать дальше →
Всего голосов 50: ↑46 и ↓4+42
Комментарии175

27 отличных open source-инструментов для веб-разработки

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


Перевод 27 Amazing Web Development Tools for the Past Year (v.2018)

В 2017-м мы сравнили около 7 500 open source-инструментов для веб-разработки, из которых выбрали 27 лучших (0,4%). Это крайне конкурентный список, в который вошли инструменты, библиотеки и проекты, опубликованные в течение 2017-го. Mybridge AI оценивает их качество на основании популярности, заинтересованности и новизне. Чтобы было понятно, у выбранных продуктов среднее количество звёзд на Github — 5260.

Open source-инструменты могут почти даром повысить вашу продуктивность. Также вы можете чему-то научиться, читая исходный код и создавая что-нибудь на основе этих проектов. Так что рекомендуем уделить время и поэкспериментировать с инструментами из нашей подборки, возможно, какие-то из них прошли мимо вас.
Читать дальше →
Всего голосов 70: ↑55 и ↓15+40
Комментарии10

GitHub Flow: рабочий процесс Гитхаба

Время на прочтение10 мин
Количество просмотров126K
Краткое предисловие переводчика.
Захватывающе интересная статья одного из разработчиков «GitHub Inc.» о принятом в компании рабочем процессе потребовала употребить пару специальных терминов при переводе.

То понятие, для которого на английском языке достаточно одного слóва «workflow», на русский приходится переводить словосочетанием — «рабочий процесс». Ничего лучше не знаю ни сам я, ни при помощи гуглоперевода так что и мне, и читателям придётся с этим мириться, хотя бы и поневоле.

Другое понятие, «deploy», на русский часто переводят словом «развёртывание», но в моём переводе я решил вспомнить оборот из советского делопроизводства — «внедрение инноваций на производстве» — и стану говорить именно о «внедрении» новых фич. Дело в том, что описанный ниже рабочий процесс не имеет «выпусков» (releases), что делает несколько неудобными и речи о каком-либо «развёртывании» их.

К сожалению, некоторые переводчики бывают склонны грубо убивать сочную метафору «иньекции» (или даже «впрыскивания», если угодно), содержающуюся в термине «code injection», так что и его также переводят словосочетанием «внедрение кода». Эта путаница огорчает меня, но ничего не могу поделать. Просто имейте в виду, что здесь «внедрением кода» я стану назвать внедрение его именно в производство (на продакшен), а не в чей-нибудь чужой код.

Я стремился употреблять словосочетание «в Гитхабе» в значении «в компании GitHub Inc.», а «на Гитхабе» — в значении «на сайте GitHub.com». Правда, иногда разделять их сложновато.

Проблемы git-flow


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

Однако и у git-flow есть проблемы. Я не раз слыхал мнения людей, выражавших неприязнь к тому, что ветви фич отходят от develop вместо master, или к манере обращения с хотфиксами, но эти проблемы сравнительно невелики.

Для меня одной из более крупных проблем git-flow стала его сложность — бóльшая, чем на самом деле требуется большинству разработчиков и рабочих групп. Его сложность ужé привела к появлению скрипта-помощника для поддержания рабочего процесса. Само по себе это круто, но проблема в том, что помощник работает не из GUI Git, а из командной строки, и получается, что те самые люди, которым необходимо действительно хорошо выучить сложный рабочий процесс, потому что им вручную придётся пройти все шаги его — для этих-то людей система и недостаточно удобна для того, чтобы использовать её из командной строки. Вот что становится крупною проблемою.

Все эти проблемы можно без труда преодолеть, следуя гораздо более простому рабочему процессу. Мы не пользуемся git-flow в Гитхабе. Наш рабочий процесс основан (и всегда был основан) на более простом подходе к Git.

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

Рабочий процесс Гитхаба


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

Это будущее

Время на прочтение6 мин
Количество просмотров87K
Добрый день.

Предлагаю вашему вниманию перевод юмористического поста, посвященного облачным технологиям: It's The Future. Всяческие поправки и советы привествуются.


image

Читать дальше →
Всего голосов 129: ↑116 и ↓13+103
Комментарии37

Как через composer удобно подменить системный пакет его альтернативной версией

Время на прочтение2 мин
Количество просмотров8.4K
В любом большом проекте, где используется composer, рано или поздно возникает одна проблема. Во фреймворке, или в каком-то его отдельном пакете исправляют ошибку или добавляют функциональность, а разработчик не спешит принимать pull request. При этом хочется временно использовать обновленный пакет, а потом, когда pull request все-таки примут, вернуться к официальной версии. Ситуация также осложняется тем, что пакет может быть указан в зависимостях других пакетов.
Узнать, как...
Всего голосов 21: ↑18 и ↓3+15
Комментарии4

Знакомимся с аспектно-ориентированным программированием в PHP

Время на прочтение10 мин
Количество просмотров31K
При разработке программного обеспечения программисты и архитекторы пользуются декомпозицией — представлением объектов и взаимосвязей между ними в виде классов, объектов, их свойств и методов.


Проводя декомпозицию, удается получить более точное представление объектов из реальной жизни в виде программного кода. Именно благодаря этому принципу, объектно-ориентированное программирование получило столь широкую популярность во всех языках программирования. Модель представления объектов реальной жизни в виде инстансов классов очень удобна: мы можем наделять класс набором методов и свойств, позволяя взаимодействовать с окружающей средой.
Но все ли так удобно?
Всего голосов 59: ↑49 и ↓10+39
Комментарии55

Использование больших страниц в памяти в PHP 7

Время на прочтение8 мин
Количество просмотров18K
Разбивка на страницы — это способ управления памятью, выделяемой для пользовательских процессов. Все доступы процессов к памяти являются виртуальными, а преобразование их адресов в адреса физической памяти выполняют ОС и аппаратный MMU.

При разбивке на страницы память делится на блоки фиксированного размера. В Linux на x86/64-платформах размер страниц обычно составляет 4 Кб. Каждый процесс содержит в себе таблицу, в которой хранится информация о соответствии адресов страницы и физической памяти — элемент таблицы страниц (page table entry). Чтобы ОС не лезла в эту таблицу при каждом обращении к памяти (иначе для обработки каждого запроса на обращение к памяти потребуется обращаться к ней дважды), применяется небольшой кэш — буфер ассоциативной трансляции (Translationlookaside Buffer, TLB). Этот аппаратный компонент находится в MMU и работает чрезвычайно быстро и эффективно. Система сканирует TLB с целью поиска записи о соответствии адресов страницы и физической памяти. Если нужной записи там не оказывается, тогда ядру ОС приходится обращаться к памяти, искать нужное соответствие и обновлять информацию в TLB, чтобы получить из памяти нужные нам данные.

Если вы хотите больше узнать об управлении виртуальной памятью, то можете изучить эту публикацию. А пока давайте разберем, как в PHP 7 устроена работа с большими страницами (Huge Page).
Читать дальше →
Всего голосов 32: ↑30 и ↓2+28
Комментарии16

Гексагональная архитектура

Время на прочтение31 мин
Количество просмотров169K
На недавнем Laracon NYC я читал доклад о гексагональной архитектуре. Несмотря на то, что я получил позитивную реакцию слушателей, мне кажется, что остались люди, которые хотели бы получить чуть более полное представление о том, что это такое. Разумеется, с примерами. Это моя попытка расширить тот доклад.

  1. Видео с доклада
  2. Слайды


По моему мнению, данная архитектура является отличным примером того, как должна строиться структура приложения. Более того, когда я писал свои проекты на Laravel, я, даже не зная этого, частенько использовал идеи, заложенные в основе гексагональной архитектуры.



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



Гексагональная архитектура, ни в коем случае не новый подход к разработке с применением фреймворков. Напротив, это всего лишь обобщение «лучших практик» — практик новых и старых. Я обернул эти слова в кавычки, чтобы люди не воспринимали их совсем буквально. Лучшие практики, которые работают для меня, могут не работать для вас — все зависит от задачи и преследуемых целей.



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


Читать дальше →
Всего голосов 20: ↑16 и ↓4+12
Комментарии16

Подборка бесплатных инструментов для разработчиков

Время на прочтение28 мин
Количество просмотров186K
Сегодня мы представляем вашему вниманию адаптированную подборку инструментов (в том числе облачных) для разработчиков, которые позволяют создавать по-настоящему качественные проекты. Здесь представлены исключительно SaaS, PaaS и IaaS сервисы, предоставляющие бесплатные пакеты для разработчиков инфраструктурного ПО.

Читать дальше →
Всего голосов 96: ↑89 и ↓7+82
Комментарии38

Xiaomi mi band с пульсометром начнут продавать через 2 дня

Время на прочтение1 мин
Количество просмотров16K
Компания официально объявила о старте продаж обновленного трекера mi Band, который придется на 11 ноября, День одиноких.


Читать дальше →
Всего голосов 16: ↑14 и ↓2+12
Комментарии36

Производительное юнит-тестирование веб-приложений на примере yii2 и codeception

Время на прочтение13 мин
Количество просмотров22K
Задача данной статьи — показать самый производительный путь написания тестов в контексте разработки веб-приложений.
Здесь и дальше под термином тесты будут подразумеваться юнит-тесты.

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

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

Наша цель будет разобраться, каким образом необходимо писать тесты и код для обеспечения максимальной скорости выполнения тестов.
Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Комментарии3

Puli: Управление ресурсами в php приложениях

Время на прочтение3 мин
Количество просмотров15K
imagePuli — это инструмент, позволяющий универсально управлять ресурсами в php приложениях. Главная цель проекта — стандартизировать такие понятия как bundle, plugin, module для разных библиотек и фраймворков в одно общее независимое решение.

В чем проблема?

Иногда, вы возможно получали файл, используя константу __DIR__:

echo file_get_contents(__DIR__.'/../../res/views/index.html.twig');
Читать дальше →
Всего голосов 20: ↑14 и ↓6+8
Комментарии27

Как накормить мозг программиста… или feed your brain

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

Введение


Из всех наслаждений, отпущенных человеку в жизни,
самое изысканное — шевелить мозгами.
(Борис Акунин)


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

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

В данной публикации мы рассмотрим, как правильно питаться для жизнеобеспечения мозга и как его разогнать ноотропами (в случае аврала необходимости).
Читать дальше →
Всего голосов 213: ↑163 и ↓50+113
Комментарии145

Почему я не преподаю SOLID и «принцип устранения зависимостей»

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

Статья 1. Почему я не преподаю SOLID


Если вы разговариваете с кем-то, кому небезразлично качество кода, уже достаточно скоро в разговоре всплывёт SOLID — аббревиатура, помогающая разработчикам запомнить пять важных принципов объектно-ориентированного программирования:

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

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

Сегодня SOLID остается для меня важным, но я больше не пытаюсь сделать мой код SOLID. Я редко упоминаю его, когда говорю про дизайн. И тем более я не учу пользоваться им разработчиков, которым хочется почерпнуть хорошие дизайнерские методы проектирования. Он больше не находится у меня под рукой в моем «ящике для инструментов». Он лежит в пыльной коробке на чердаке. Я храню его, потому что он важен, но редко им пользуюсь.
Читать дальше →
Всего голосов 57: ↑47 и ↓10+37
Комментарии101

Генерация текстур планет с помощью алгоритма Fault Formation

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

Возможно, кто-то помнит замечательную олдскульную космическую игру Star Control 2. В свое время меня поразила огромная звездная карта с неизведанными планетами, которые предстояло исследовать на фоне разворачивающейся глобальной катастрофы. С тех пор как авторами были опубликованы исходные коды, игра была портирована под новым именем The Ur-Quan Masters на большинство современных платформ.

Покопавшись в исходниках, я обнаружил простой алгоритм, генерирующий текстуры планет, и написал программу на Python, позволяющую генерировать аналогичные текстуры.
Читать дальше →
Всего голосов 29: ↑27 и ↓2+25
Комментарии12

Диффузия инноваций, часть первая

Время на прочтение13 мин
Количество просмотров35K
Недавно наткнулся на отличную статью о диффузии инноваций «How To Have Users Spread Your Innovation Like Wildfire» за авторством Виктора Йокко для Smashing Magazine. Статья показалась мне интересной, поэтому решил перевести ее для «Хабрахабра». Вторая часть уже на подходе.

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

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

Эверетт Роджерс (1931-2004) был профессором коммуникаций и сельской социологии в университетах США. Он построил свою карьеру на исследовании распространения идей и технологий среди людей. Теория “диффузии инноваций” пытается определить и рассмотреть связанные с этим факторы. Проектные группы (дизайн-команды), понимающие и учитывающие эти нюансы, имеют наибольшие шансы на принятие их продукта широкими и ждущими массами.
Читать дальше →
Всего голосов 5: ↑4 и ↓1+3
Комментарии0
1

Информация

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