• Не работайте в плохих проектах

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


      Читать дальше →
    • Как в Яндекс.Такси ищут машины, когда их нет

        image

        Хороший сервис для заказа такси должен быть безопасным, надёжным и быстрым. Пользователь не станет вдаваться в детали: ему важно, чтобы он нажал кнопку «Заказать» и как можно быстрее получил машину, которая доставит его из точки А в точку Б. Если рядом нет машин — сервис должен сразу об этом сообщить, чтобы у клиента не складывалось ложных ожиданий. Но если плашка «Нет машин» будет высвечиваться слишком часто, то логично, что человек просто перестанет пользоваться этим сервисом и уйдёт к конкуренту.

        В этой статье я хочу рассказать о том, как при помощи машинного обучения мы решали задачу поиска машин на территории с малой плотностью (проще говоря — там, где, на первый взгляд, нет машин). И что из этого вышло.
        Читать дальше →
      • Почему программисты не получают работу: четыре страшилки

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

        Когда люди не получают предложения о работе, то часто думают, что это их вина: «Меня отвергли три компании подряд, наверное, я никудышный инженер». Поработав некоторое время в ИТ-рекрутинге, могу вас заверить, что случайные факторы и шум (ложноотрицательные результаты) тоже играют важную роль. Часто отказы действительно вызваны случайными вещами и иррациональными причинами.

        Страшилка № 1: кандидата отвергли из-за фреймворка


        На позицию фронтенд-разработчика в агентстве я передал инженера, который участвовал в разработке ECMAScript и сделал значительный вклад в некоторые другие проекты open source. Мне понадобилось несколько недель, чтобы найти этого человека, и несколько часов для его правильной оценки, включая видеоинтервью (мы любим такое делать на coderfit.com). Его кандидатуру отверг программист из агентства после 10-минутного просмотра примеров кода. С ним даже не пообщались лично, а просто прислали «консерву» — шаблонное письмо по электронной почте:

        «[…]Хотя ваше резюме и сопроводительное письмо очень конкурентоспособны, наши специалисты по найму рассмотрели вашу заявку и не выбрали её для дальнейшего рассмотрения. […]»
        Читать дальше →
      • Ад своими руками

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

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

          Но компанию, ее культуру это внедрение превратило в ад — бюрократический, системный и бессмысленный.

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

          Обо всем по порядку.
          Читать дальше →
        • Grafana как еще один инструмент для технического мониторинга создаваемых нами программных продуктов

          • Перевод

          Очередная статья в серии «Инструменты мониторинга Logicify» рассказывает о Grafana. Это программное средство мы используем для визуализации и анализа данных как внутренних, так и внешних проектов. Статья может быть полезна техническим директорам, разработчикам, DevOps, системным администраторам, менеджерам проектов, а также всем заинтересованным лицам.


          image

          Читать дальше →
          • +18
          • 47,2k
          • 7
        • Полицейские Калифорнии в течение 7 минут пытались остановить Tesla с заснувшим за рулем водителем


            Источник: Wikipedia

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

            Лишь после этого Tesla остановилась, водитель проснулся и полиции удалось решить эту проблему. Александр Самек, владелец Tesla, привлек внимание полицейских — они заметили, что он просто спит, причем его Tesla в это время следовала по хайвею со скоростью примерно 112 км/ч. Несмотря на то, что электромобилем управлял автопилот, вся эта ситуация была чрезвычайно опасна как для водителя, так и для других участников дорожного движения.
            Читать дальше →
          • 10 неочевидных преимуществ использования Rust

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



              Все это уже хорошо известно всем, кто хоть немного следит за развитием современных технологий программирования. Но что если вы не системный программист, да и многопоточного кода в ваших проектах не много, но вас все же привлекает производительность Rust'а. Получите ли вы какие-то дополнительные преимущества от его использования в прикладных задачах? Или все, что он вам даст дополнительно — это суровую борьбу с компилятором, который будет заставлять вас писать программу так, чтобы она неотступно следовала правилам языка по заимствованию и владению?


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

              Читать дальше →
            • Тема бронелифчиков в культуре Востока и Запада

                ......


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


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


                Такая броня ужасно неудобна, она натирает и гарантирует носящему простуду в регионе со средним климатом и огромное количество укусов насекомых в регионах с теплым климатом. Ну и конечно же все колюще-режущие предметы которые в вас летят достигнут цели.


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


                Для начала я бы хотела внести небольшое уточнение. Современный игропром сейчас буквально поделен на два лагеря — «Восток» и «Запад». Под Востоком обычно подразумевается Япония, чуть реже Китай или Корея, история и культуры которых взаимодействовали и переплетались веками. Запад это, по сути, все страны современной Европы (там практически каждая побывала чьей-нибудь колонией или имела колонии, что способствовало культурному обмену).


                Какое это имеет отношение к бронелифчикам?


                Игровая индустрия сейчас тоже разделена на восточную и западную. Если выбрать любую японскую или корейскую игру и любую европейскую а потом попросить человека угадать какая где, то абсолютное большинство угадает с первого раза. Серия TES и серия Metal Gear Solid. World of Warcraft и, например, Perfect World или более современная Black Desert, Лара Крофт и Байонетта.

                Читать дальше →
              • Почему я ненавижу Spring

                • Перевод
                В начале своей карьеры я реально влюбился в Spring. Я так долго ждал его. Я использовал его во всех своих проектах. Вдобавок мне даже удалось впихнуть туда кучу всякой всячины из Spring Integration. Я был кем-то вроде короля XML. Я делал RPC-слой на основе JMS, protobufs и Kaazing для всего нашего отдела и банка в целом. Я думал: «Это так конфигурируемо. Всего-то пара XML-файлов — это действительно гибко». Я был очень доволен собой.

                Но некоторые мои коллеги были склонны не согласиться. У них возникали проблемы, когда они пытались связать всё так, как им хочется; они не знали, где какие XML-файлы им нужны. Были проблемы с версиями Spring, с тем, как подружить их (я, к тому же, далеко зашел с модульностью: у нас было 5 или 6 разных модулей с разными номерами версий, и нельзя было просто так взять и понять, какой из них использовать, не спросив меня). Это были тревожные звоночки, но я их не замечал; я думал, что нужно больше документации или что те ребята просто тупые. Такая ситуация типична сама по себе: мольбы пользователей одного из самых нелюбимых и трудных в использовании фреймворков о помощи часто разбиваются о «да там один файл и немного параметров, это не так уж и тяжело», в то время как все остальные целыми днями пытаются найти магическую комбинацию файлов и параметров, чтобы хоть что-нибудь как-нибудь заработало.

                Я всё ещё работаю в той же организации, но теперь я пользователь своего старого фреймворка. В результате этого питания кормом своей собаки я стал ненавидеть Сэма (автор имеет в виду себя — прим. пер.) 2009-2010 годов по нескольким причинам, но в основном — за Spring. Spring — это зло в хорошую погоду, но когда его включают в состав библиотеки или API, которым пользуются другие программисты, — это уже другой уровень зла: как плод любви Гитлера и дьявола. Не позволяйте Spring торчать из вашего API наружу.
                Читать дальше →
              • Синдром самозванца: что это и как от него избавиться

                • Перевод
                image

                — А что делать со стрессом? – спросила она.
                — Что вы имеете в виду под стрессом?
                — Ну… Мне кажется, что я не смогу вписаться, что я не буду достаточно умной. И из-за этого я всё время чувствую стресс. Понимаете?

                Девушка, с которой я разговаривала, стала первой в своей семье, вставшей на путь получения докторской степени. Она получила превосходные отметки по информатике в институте. Её приняли в элитарный университет, где она учится у ключевой фигуры в области человеко-компьютерного взаимодействия (human-computer interaction, HCI). По всем параметрам она отлично справляется. Но её гложут сомнения. Не по поводу института, куратора, темы – к ним она пылает страстью. У неё есть сомнения по поводу её самой и того, достойна ли она вообще обучаться по этой программе.
                Читать дальше →
              • Карты, счета, 2 баланса

                  Как знают держатели дебетовых банковских карт Райффайзенбанка, карта является лишь инструментом доступа к счету: она не имеет собственного баланса, по ней доступны только те средства, которые есть на текущем счете клиента. В этой статье мы расскажем об архитектуре технического решения, которое позволяет картам и счетам в нашем банке использовать единый баланс. И также вы узнаете о том, как был организован проект, который позволил нам эту архитектуру реализовать.
                  Читать дальше →
                • Раздача халявы: нетормозящие треды в Java. Project Loom

                    Хотите ли вы в джавке треды, которые не жрут память как не в себя и не тормозят? Хорошее похвальное желание, и на данный вопрос отвечает этот выпуск.


                    Объясняем работу Project Loom на коробках с пиццей! Налетай!


                    Всё это снимается и пишется специально для Хабра.




                    Читать дальше →
                  • PE (Portable Executable): На странных берегах



                    Эта статья представляет из себя рассказ о том как устроены исполняемые файлы (в точку! Это именно те штуки, которые получаются после компиляции приложений с расширением .exe). После того, как написан код, подключены библиотеки, подгружены к проекту ресурсы (иконки для окон, какие-либо текстовые файлы, картинки и прочее) всё это компонуется в один единственный исполняемый файл, преимущественно с расширением .exe. Вот именно в этот омут мы и погрузимся.
                    *Статья находится под эгидой «для начинающих» поэтому будет изобиловать схемами и описанием важных элементов загрузки.
                    На палубу
                  • 3 минуты, позволяющие улучшить любую встречу

                      У вас часто бывает, что вы забегаете на встречу (стендап, ретро, еженедельную встречу с коллегами, f2f с начальником — нужное подчеркнуть), а ваши мысли остаются где-то за пределами комнаты?

                      От банального «а выключила ли жена утюг, когда мы выходили из квартиры» до «что же хотел сказать босс последним письмом». Рой мыслей в голове может быть инспирирован как давно произошедшими событиями, так и предыдущей встречей.
                      Читать дальше →
                    • RabbitMQ против Kafka: два разных подхода к обмену сообщениями

                        В прошлых двух статьях мы рассказывали об IIoT — индустриальном интернете вещей — строили архитектуру, чтобы принимать данные от сенсоров, паяли сами сенсоры. Краеугольным камнем архитектур IIoT да и вообще любых архитектур работающих с BigData является потоковая обработка данных. В ее основе лежит концепция передачи сообщений и очередей. Стандартом работы с рассылкой сообщений сейчас стала Apache Kafka. Однако, для того, чтобы разобраться в ее преимуществах (и понять ее недостатки) было бы хорошо разобраться в основах работы систем очередей в целом, механизмах их работы, шаблонах использования и основной функциональности.



                        Мы нашли отличную серию статей, которая сравнивает функциональность Apache Kafka и другого (незаслуженно игнорируемого) гиганта среди систем очередей — RabbitMQ. Эту серию статей мы перевели, снабдили своими комментариями и дополнили. Хотя серия и написана в декабре 2017 года, мир систем обмена сообщениями (и особенно Apache Kafka) меняется так быстро, что уже к лету 2018-го года некоторые вещи изменились.

                        Читать дальше →
                      • Словесная ролевая игра — самый старый формат полностью свободного мира в играх



                          Я опять хочу погрузить вас в мир странного опыта, который дают люди из игровой сферы. Прошлый раз был командир крупного альянса из Eve, а сегодня — Хаст и Тео, которые ведут коммерческие настольные словесные ролевые игры.

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

                          Это увлечение носит массовый характер в Америке и Европе, потому что куда интереснее сериалов и сетевых игр в правильных руках. В России это больше 25 лет был любительский «кухонный» формат, но вот уже пару лет как появились профессиональные Мастера. То есть ведущие, которые зарабатывают только этим себе на жизнь. Ранее такого извращения не наблюдалось.

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

                          • Tutorial
                          В статье предложен новый весьма необычный способ определения экспоненты и на основе этого определения выведены её основные свойства.



                          Каждому положительному числу $a$ поставим в соответствие множество $E_a=\left\{x:x=\left(1+a_1\right)\left(1+a_2\right)\ldots \left(1+a_k\right)\right.$, где $a_1,a_2,\ldots ,a_k>0$ и $\left.a_1+a_2+\ldots +a_k=a\right\}$.

                          Лемма 1. Из $0<a<b$ следует, что для каждого элемента $x\in E_a$ найдётся элемент $y\in E_b$ такой, что $y>x$.

                          Будем писать $A\leq c$, если $c$ верхняя граница множества $A$. Аналогично, будем писать $A\geq c$, если $c$ — нижняя граница множества $A$.

                          Лемма 2. Если $a_1,a_2,\ldots ,a_k>0$, то $\left(1+a_1\right)\left(1+a_2\right)\ldots \left(1+a_k\right)\geq 1+a_1+a_2+\text{...}+a_k$.

                          Доказательство


                          Проведём рассуждение по индукции.

                          Для $k=1$ утверждение очевидно: $1+a_1\geq 1+a_1$.

                          Пусть $\left(1+a_1\right)\ldots \left(1+a_i\right)\geq 1+a_1+\ldots +a_i$ для $1<i<k$.

                          Тогда $\left(1+a_1\right)\ldots \left(1+a_i\right)\left(1+a_{i+1}\right)\geq 1+a_1+\ldots +a_i+\left(1+a_1+\ldots +a_i\right)a_{i+1}\geq$

                          $\geq 1+a_1+\ldots +a_i+a_{i+1}$.

                          Лемма 2 доказана.

                          В дальнейшем мы покажем, что каждое множество $E_a$ ограничено. Из леммы 2 следует, что

                          $\sup E_a\geq a$ (1)
                          Читать дальше →
                        • jQuery для начинающих

                            jQuery Logo

                            jQuery — это замечательный JavaScript Framework, который подкупает своей простотой в понимании и удобством в использовании. Но изучение надо с чего-то начинать, и лично моё мнение — лучше всего начинать с наглядных примеров, и они далее…

                            Читать дальше →
                          • Размер Java объектов

                              Знаете сколько в памяти занимает строка? Каких только я не слышал ответов на этот вопрос, начиная от «не знаю» до «2 байта * количество символов в строке». А сколько тогда занимает пустая строка? А знаете сколько занимает объект класса Integer? А сколько будет занимать Ваш собственный объект класса с тремя Integer полями? Забавно, но ни один мой знакомый Java программист не смог ответить на эти вопросы… Да, большинству из нас это вообще не нужно и никто в реальных java проектах не будет об этом думать. Но это, ведь, как не знать объем двигателя машины на которой Вы ездите. Вы можете быть прекрасным водителем и даже не подозревать о том, что значат цифры 2.4 или 1.6 на вашей машине. Но я уверен, что найдется мало людей, которые не знакомы со значением этих цифр. Так почему же java программисты так мало знают об этой части своего инструмента?

                              Integer vs int

                              Все мы знаем, что в java — everything is an object. Кроме, пожалуй, примитивов и ссылок на сами объекты. Давайте рассмотрим две типичных ситуации:
                              //первый случай
                              int a = 300;
                              //второй случай
                              Integer b = 301;
                              

                              В этих простых строках разница просто огромна, как для JVM так и для ООП. В первом случае, все что у нас есть — это 4-х байтная переменная, которая содержит значение из стека. Во втором случае у нас есть ссылочная переменная и сам объект, на который эта переменная ссылается. Следовательно, если в первом случае мы определено знаем, что занимаемый размер равен:
                              sizeOf(int)
                              

                              то во втором:
                              sizeOf(reference) + sizeOf(Integer)
                              

                              Забегая вперед скажу — во втором случае количество потребляемой памяти приблизительно в 5 раз больше и зависит от JVM. А теперь давайте разберемся, почему разница настолько огромна.

                              Из чего же состоит объект?

                              Прежде чем определять объем потребляемой памяти, следует разобраться, что же JVM хранит для каждого объекта:
                              • Заголовок объекта;
                              • Память для примитивных типов;
                              • Память для ссылочных типов;
                              • Смещение/выравнивание — по сути, это несколько неиспользуемых байт, что размещаются после данных самого объекта. Это сделано для того, чтобы адрес в памяти всегда был кратным машинному слову, для ускорения чтения из памяти + уменьшения количества бит для указателя на объект + предположительно для уменьшения фрагментации памяти. Стоит также отметить, что в java размер любого объекта кратен 8 байтам!

                              Читать дальше →
                            • Ловушка, в которую загнали себя инженеры Apple с клавиатурой MacBook Pro

                              • Перевод


                              Титана технологий и промышленных инноваций повалила одна маленькая пылинка. На прошлой неделе Apple тихо объявила, что продлевает гарантию на клавиатуру своего флагманского ноутбука на четыре года. Как оказалось, эти клавиатуры, первоначально охарактеризованные Джони Айвом как тонкие, точные и «крепкие», исключительно часто выходят из строя.

                              Хронология


                              • Март 2015: Apple представляет клавиши системы «бабочка» на MacBook 2015 года.
                              • Октябрь 2016: Apple представляет вторую версию «бабочек» на 2016 MacBook Pro. В нашем разборе отмечаем: «Клавишные колпачки немного выше по краям, так что пальцам их легче найти. Переключатели тоже чуть приподнялись».
                              • Конец 2017: Поднялась волна жалоб на клавиатуру.
                              • Июнь 2018: Apple объявляет о программе замены клавиатур.
                              Читать дальше →