• Решаем задачу из интервью Google на JavaScript: 4 разных способа

    • Translation


    Когда я занимался изучением производительности алгоритмов, мне попалось вот это видео с мок-интервью Google. Оно не только дает представление, как проходят собеседования в крупных технологических корпорациях, но и позволяет понять, как решаются алгоритмические задачи, причем максимально эффективно.

    Эта статья — своеобразное сопровождение к видео. В ней я даю комментарии ко всем показанным решениям плюс собственную версию решения на JavaScript. Также обсуждаются нюансы каждого алгоритма.
    Читать дальше →
  • Про Гауди — разработчика из девятнадцатого века, добившегося всего, чего может добиться разработчик

      Вот что строил испанский архитектор Антонио Гауди:



      Его здания описывают как «бионические дома», некоторые говорят о «летящей пластичной материи». За морем восторгов художников и дизайнеров, как мне показалось, упущена некоторая невероятная рационализация и прагматичность. Гауди был в первую очередь отличным разработчиком, математиком и геометром. Но чтобы объяснить это, сначала я покажу другую картинку:


      Это два крепления. Первое производится серийно — оно просто в проектировании, просто в изготовлении, дёшево и невероятно уродливо. Второе красивое, и требует на 25% меньше материала для того, чтобы выдержать тот же вес (то есть — куда прочнее). Только его трудно рассчитать, оно будет дороже в серии — и придётся подумать.

      Примерно то же самое делал Гауди. Ему пришлось обойтись без математического аппарата и современных материалов. И ещё действовать в рамках строго ограниченного бюджета. Он, фактически, заложил новые принципы всего от фасада до последней дверной ручки, создал шедевры оптимизации — в общем смёл все стереотипы как сухие листья, создал с нуля теорию и воплотил её. В девятнадцатом веке всё то, что он делал, было просто диким. Некоторые даже считали его сумасшедшим.
      Читать дальше →
    • За что конкретно я ненавижу некоторых отдельно взятых маркетологов — или как айтишник по магазинам ходил

        Знакомьтесь, это обычный «литровый» пакет молока:

        image

        • Проверка на внимательность: там 900 грамм. Рядом несколько по 950. Но пакет может быть воспринят как литровый.
        • Проверка на знание физики. Рядом лежит похожий кефир. Объём измеряется в миллилитрах, масса — в граммах. Плотность кефира трагически выше плотности воды. То есть 900 грамм кефира 3,2% жирности — это примерно 874,5 миллилитров.

        Второй пациент:



        25 лет гарантии. Круто, правда? Есть одна проблема. Надо сохранять чек. Проверка, опять же, на знание физики. Чек у них печатается на обычной кассовой термоленте (я проверил на месте). У меня в офисе лежит много чеков. Мы их ксерокопируем, потому что через год-два они полностью выцветают. Самый старый чек, который видел коллега, держался 3 года в папке в архиве. UPD: смотрите самый низ топика, Икея ответила.

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

        Осторожно, трафик: под катом много находок с фотографиями.
        Читать дальше →
      • Иерархия исключений в современном PHP-приложении

          Задача публикации: доступно изложить способ организации иерархии исключений и их обработки в приложении. Без привязки к фреймворкам и конкретной архитектуре. Описываемый способ является де-факто стандартом в сообществе: он используется во многих серьёзных библиотеках и фреймворках. В том числе Zend, Symfony. Не смотря на его логичность и универсальность, формального описания предлагаемого подхода на русском языке я не нашёл. После неоднократного устного изложения концепции коллегам, родилась мысль оформить её в виде публикации на Хабрахабр.


          В языке PHP, начиная с 5-ой версии, доступен механизм исключений. В актуальной, 7-ой, версии этот механизм был улучшен и переработан с целью единнобразной обработки разных ошибок при помощи конструкции try{} catch...


          В стандартной библиотеке (SPL) PHP предоставляет готовый набор базовых классов и интерфейсов для исключений. В 7-ой версии этот набор был расширен интерфейсом Throwable. Вот диаграмма всех имеющихся в версии 7 типов (изображение — ссылка):


          Диаграмма типов исключения в PHP7

          Читать дальше →
        • Онлайн-кассы: первые итоги

            Итак, ФЗ №54 скоро вступит на полную мощь, а пока лишь 30% онлайн-предпринимателей смогли выполнить его условия (да и то, не все из них — в полном объёме). Если говорить точнее: то из примерно 1 200 000 касс, которые должны пройти перерегистрацию, прошли её — 420 000.

            Во-первых, о затратах: очень многие утверждают, что малый (а особенно — микро) бизнес никак не пострадает от новаций. Но так ли это?


            Читать дальше →
          • Тестирование параллельных процессов

              image

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

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

              Забегая вперед сразу скажу, что в конце статьи будет ссылка на github, куда я выложил готовое решение, позволяющее тестировать параллельные консольные процессы легко и просто.
              Читать дальше →
            • Как часто рубают свет, и чем это кончается для бизнеса



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

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

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

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

                Одна из очень известных компаний, которая была примером успешного применения Scrum в 1997 году, обратилась за помощью в Danube Technologies, Inc. в 2009 году, потому что «рынок» показал, что они оказались менее гибкими, чем конкуренты. Начинания по внедрению Scrum, которые начались 1997 году, по-видимому, не могли выдержать десятилетие сосуществования с проблемами, присущими крупным предприятиям. К сожалению, большинство попыток внедрить Scrum в крупных организациях не приводит к долговременным преобразованиям. Препятствия для внедрения Scrum обычно также мешают достижению успеха в бизнесе в целом, а устоявшиеся организации обычно неохотно избавляются от них.

                Препятствие #1: Наивный менеджмент ресурсов


                В Руководстве PMBOK написано:
                «зачастую возникает необходимость увеличения бюджета, чтобы добавить дополнительные ресурсы для выполнения того же объема работ в более сжатые сроки»
                В отношении программного обеспечения, Фред Брукс (в книге «Мифический человеко-месяц») дает утверждение, которое противоречит предыдущему:
                «Если проект не укладывается в сроки, то добавление рабочей силы задержит его еще больше»

                Чтобы разрешить этот парадокс, давайте рассмотрим определение «ресурса».
                Читать дальше →
              • Введение в криптографию и шифрование, часть первая. Лекция в Яндексе

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


                  Мы впервые публикуем эту лекцию вместе с расшифровкой. Начнём с первой части. Под катом вы найдёте текст и часть слайдов.

                  Читать дальше →
                • ZX Spectrum: 35-летний юбилей



                    35 лет назад, 23 апреля 1982, появился ZX Spectrum — замечательный домашний компьютер, который приобщил к программированию немало людей. В первой половине 1990-х эти 8-битные компактные устройства были очень популярны в России. По сути, ZX Spectrum’ы заполнили нишу бюджетных игровых приставок, но при этом позволяли писать полноценные программы на Basic (и не только). В честь очередной годовщины мы решили вспомнить наиболее яркие игры, покорившие сердца многих пользователей ZX Spectrum.
                    Читать дальше →
                  • Давайте разберём, почему покупатели задают «тупые» вопросы



                      — Добрый день! Почём мороженое?
                      — Вот же ценник!

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

                      Очень много явно странных вопросов имеют совсем не то значение, которое озвучивается. Это касается и продаж, и обычной жизни. Давайте разберём ещё пару примеров. Начнём с риторических вопросов в духе «А этот пазл точно собирается? Там все детали внутри?».
                      Читать дальше →
                    • Загрузка доверенной среды или лёгкий путь к паранойе в IT


                        Несмотря на несколько академичное название, тема носит вполне себе практичный характер.
                        Когда мы видим заголовки новостей об очередном успешном взломе чатов Telegram или WhatsApp (ЦРУ, Иранскими спецслужбами, Zimperium – нужное подчеркнуть), людям достаточно часто приходится объяснять, что компрометация операционной системы или аккаунта пользователя не является синонимом слабости защиты самого приложения, и это не является поводом отказаться от пользования своим любимым мессенджером, т.к. на его месте может оказаться без принципиальной разницы любой другой.


                        А если вы, например, загрузившись с флэшки «перезабиваете» пароли администратора любой своей Windows-машины, это отнюдь не говорит о чудовищных дырах в «мастдае», а о вас – как о супер-хакере, взломавшем детище Microsoft.


                        Хотелось бы немного прояснить вопросы среды, компонентов доверия и угроз, чтобы создать целостную картинку и разобраться в том, чего мы ждём в плане безопасности от операционной системы, BIOS и любимого чат-приложения, дабы не перекладывать ответственность с больной головы на здоровую.


                        Итак, начнём с практики, есть следующий кейс:

                        Читать дальше →
                      • 61 способ улучшить SEO вашего сайта

                        • Tutorial


                        Недавно мы закончили курс по SEO в Нетологии и составили для себя чек-лист того, что обязательно нужно сделать на сайте «Я люблю ИП» для поисковой оптимизации. Но эти советы универсальны для любого проекта. В статье вы найдёте список практических рекомендаций со всего курса из 13 лекций от 8 разных специалистов, а также полезные ссылки и сервисы, которые помогут вам улучшить SEO вашего сайта.


                        Для кого эта статья:


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

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


                        Читать дальше →
                      • Рефакторинг — это не задача в Backlog

                        • Translation
                        Некоторое время назад было достаточно много шума в Интернете и вопросов на конференциях по поводу того, являются ли задачи по рефакторингу кода такого же рода задачами, как и все остальные, с необходимостью описывать их, помещать в Backlog, а затем перемещать в новый спринт. Я считаю что это плохой идеей, даже в случае непомерно разросшегося «технического долга» проекта. И вот почему:
                        image
                        Когда начинается новый проект — его код чист и прекрасен. Самое время проектировать красивые абстракции, писать хорошие интерфейсы и профессиональные реализации. Жизнь прекрасна! Наш проект тоже.
                        Читать дальше →
                      • Как я вспоминал школьный курс геометрии

                          image


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

                          Читать дальше →
                        • Шаблон графика отпусков (или графика обучения или иного графика) в MS Excel файле

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

                            Не делать ненужную работу и все что можно автоматизировать для меня жизненный принцип. В данной статье хочу поделится опытом создания MS EXCEL файла графика. Возможно полученный шаблон или данный опыт окажется полезным и вам.
                            Читать дальше →
                          • Почему настольные игры столько стоят – или настолка своими руками


                              Вырубка карт. Интересна пыль: она на бумажном производстве покрывает всё очень быстро.

                              Меня уже много раз спрашивали, как коробка резанного картона может стоить 1500 рублей. Что в ней такого?

                              Цену любого товара можно посчитать тремя способами:

                              1. От цепочки формирования, то есть отталкиваясь от затрат на разработку и производство — это нижний ограничитель.
                              2. От экономики — сколько человек готов заплатить, и какую цену можно ставить, пока не сожрут конкуренты (это верхний ограничитель, он же показывает, в какую стоимость производства мы должны укладываться).
                              3. И от стоимости аналогов-заменителей. В нашем случае кустарного производства. То есть изготовления настольной игры своими руками.

                              Вы будете чудовищно удивлены, когда придёте с макетами в типографию и попросите их напечатать. У нас три экземпляра игры к выставке получаются за 20 тысяч. Сейчас объясню, почему.
                              Читать дальше →
                            • Опаньки, я сломал вашу жизнь

                              • Translation
                              Ещё не угасла надежда на слабый сигнал Wi-Fi в аэропорту, на заряд батареи, который вот-вот заставит ноутбук вырубиться — а розетку здесь найти та ещё задача — и на то, что письмо клиенту на миллион долларов вроде ушло. И в этот момент «пожалуйста, заработай» вылезает приводящее в шок сообщение: «Упс».

                              image

                              Ошибка. Упс… возникла серверная ошибка и ваше письмо не отправилось.

                              Как в некоторые бросающие в дрожь моменты фильма «Американский психопат» это не очень различимое, бесстрастное сообщение от почты Gmail вонзает кинжал точно в моё сердце, мгновенно порождая отчаяние — что же пошло не так?
                              Читать дальше →
                            • Человеческий фактор



                                В реальном мире такой сюжет, что просто захлебнёшься. В автора игры Z-Game, перевозящего тираж настолок, влетает грузовик на МКАДе. Полтиража и легковушка в хлам, у Марвина — сотряс, но он бодр и счастлив, через сутки продолжает развозить коробки. В ночь перед детским утренником, куда должна была прийти учитель-воспитатель для мастер-класса, выясняется, что она заболела — и мы ищем срочно замену в 6 утра. При комплектации выставки забываем вложить правила в демонстрационные образцы (400 штук) — срочно отправляем человека самолётом из России в Германию, а потом превращаем хорошую гостиницу в сборочный цех производства. После выставки у нас, по идее, останется несколько палет товара, который не хочется везти обратно — пошукали, кому его можно продать — и почти случайно подписали контракт на дистрибуцию по всей Европе. На сайте человек оставляет комментарий про товар «муравьиная ферма», рассказывая, что это, на самом деле, концлагерь для муравьёв. Суть обращения — переименуйте товар.

                                И это только три дня.
                                Читать дальше →
                              • Верстаем новостной сайт с помощью Flexbox

                                image

                                Примечание: этот материал представляет собой свободный перевод статьи Джереми Томаса о том, как просто работать с Flexbox на примере верстки шаблона новостного сайта.

                                Поверьте, нет никакой необходимости в детальном разборе всех аспектов работы с Flexbox, если вы хотите начать им пользоваться уже сейчас. В этом руководстве автор собирается познакомить вас с некоторыми свойствами Flexbox и сделать «новостной лейаут» наподобие того, который вы могли видеть на сайте The Guardian.
                                Читать дальше →