• 11 вещей которые я узнал, читая спецификацию flexbox

    • Перевод

    Я всегда считал, что с flexbox довольно легко работать — глоток свежего воздуха после стольких лет float'ов и clearfix'ов.


    Правда недавно я обнаружил что борюсь с ним; что-то растягивалось, когда я не думал, что оно должно тянуться. Я поправил здесь, другой элемент сжался. Я починил это, что-то другое ушло за экран. Какого Джорджа Буша тут происходит?


    В конце концов, все заработало, но солнце село, а мой процесс был привычной игрой с CSS. Или… как называется та игра, где надо ударить крота, а затем другой крот выпрыгивает и надо ударить и его тоже?


    Как бы там ни было, я решил что пора вести себя как взрослый разработчик и выучить flexbox должным образом. Но вместо того, чтобы прочитать 10 очередных блог-постов, я решил отправиться прямиком к исходнику и прочитать The CSS Flexible Box Layout Module Level 1 Spec


    Вот хорошие отрывки.


    Читать дальше →
  • Как я сделал самый быстрый ресайз изображений. Часть 0

      Здравствуйте, меня зовут Саша, я написал самый быстрый ресайз изображений для современных х86 процессоров. Я так утверждаю, поскольку все остальные библиотеки, которые я сумел найти и протестировать, оказались медленнее. Я занялся этой задачей, когда работал над оптимизацией ресайза картинок на лету в Uploadcare. Мы решили открыть код и в результате появился проект Pillow-SIMD. Любой желающий с легкостью может использовать его в приложении на языке Python.


      Любой код выполняется на конкретном железе и хорошей оптимизации можно добиться, только понимая его архитектуру. Всего я планирую выпустить 4 или 5 статей, в которых расскажу как применять знание архитектуры железа для оптимизации реальной задачи. Своим примером я хочу побудить вас оптимизировать другие прикладные задачи. Первые две статьи выйдут в течение недели, остальные — по мере готовности.

      Читать дальше →
    • Как научить веб-приложение говорить на 100 языках: особенности локализации



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

        Идея написания этой статьи возникла после MoscowJS митапа, на котором я говорил о том, как происходит процесс локализации в компании Badoo. Но в этой статье я бы хотел рассказать немного подробнее об особенностях локализации на примере веб-приложений, о том, какие существуют решения для локализации и почему в Badoo пошли своим путем. Всем неравнодушным — добро пожаловать под кат.
        Читать дальше →
        • +48
        • 15,3k
        • 5
      • Верстка: отображаем пользовательский контент

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


          Читать дальше →
        • Полное практическое руководство по Docker: с нуля до кластера на AWS

          • Перевод



          Содержание



          Вопросы и ответы


          Что такое Докер?


          Определение Докера в Википедии звучит так:


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



          Ого! Как много информации.

          Читать дальше →
        • 4 вида утечек памяти в JavaScript и как с ними бороться

          • Перевод

          В этой статье мы рассмотрим распространённые виды утечек памяти в клиентском JavaScript. Также мы узнаем, как их обнаружить с помощью Chrome Development Tools.


          timeline в Chrome Dev Tools

          Читать дальше →
        • Руководство по работе с Redux

          • Перевод
          • Tutorial
          Сегодня Redux — это одно из наиболее интересных явлений мира JavaScript. Он выделяется из сотни библиотек и фреймворков тем, что грамотно решает множество разных вопросов путем введения простой и предсказуемой модели состояний, уклоне на функциональное программирование и неизменяемые данные, предоставления компактного API. Что ещё нужно для счастья? Redux — библиотека очень маленькая, и выучить её API не сложно. Но у многих людей происходит своеобразный разрыв шаблона — небольшое количество компонентов и добровольные ограничения чистых функций и неизменяемых данных могут показаться неоправданным принуждением. Каким именно образом работать в таких условиях?

          В этом руководстве мы рассмотрим создание с нуля full-stack приложения с использованием Redux и Immutable-js. Применив подход TDD, пройдём все этапы конструирования Node+Redux бэкенда и React+Redux фронтенда приложения. Помимо этого мы будем использовать такие инструменты, как ES6, Babel, Socket.io, Webpack и Mocha. Набор весьма любопытный, и вы мигом его освоите!
          Читать дальше →
        • Как можно упростить себе жизнь с помощью Telegram-бота

          О чём эта статья?


          Эта статья — краткий рассказ о том, как с помощью подручных средств (Firefox) и Python можно осуществить успешную интеграцию Telegram-бота и внешнего сервиса.

          Материал будет интересен тем, кто наслышан о Telegram'ных ботах, но не знает, как к ним подступиться и какие задачи с их помощью можно решать. Предполагается знание Python.

          Картинка для привлечения внимания:

          writing a twitter bot
          (ссылка на оригинал)

          TL;DR


          Из статьи вы узнаете:

          1. Как с помощью браузера узнать, какой запрос отправляется на сервер при клике по кнопке?

          Ответ
          Используя web tool вашего любимого браузера можно увидеть все запросы, которые отправляются из открытой страницы на сервер.


          2. Как легко отправить запрос на сервер с помощью Python?

          Ответ
          Удобной обёрткой над стандартным модулем urllib2 является библиотека requests. Подробнее на Хабре: "Библиотека для упрощения HTTP-запросов".


          3. Как написать бота на Python?

          Ответ
          Полнофункциональная обёртка реализована в библиотеке python-telegram-bot. Пока на Хабре эта библиотека не упоминалась.

          Читать дальше →
          • +24
          • 55,9k
          • 8
        • Поняв Docker

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


            К вашему сведению! В этой статье мы рассматриваем само явление docker-контейнеров, а не составляем список микросервисов, которые гнездятся внутри. Этим мы займемся в следующей серии, во имя справедливости!


            UPDATE: пришлось заменить «докер» на «docker», иначе статья не ищется. Заранее прошу прощения за все «docker'ы» в тексте. Селяви.


            Что мы имеем сегодня


            • Зоопарк дубовых VPS-хостингов.
            • Дорогие IaaS и PaaS с гарантированным vendor lock in.
            • Уникальные сервера-снежинки.
            • Ворох устаревших зависимостей на неподдерживаемой операционке.
            • Скрытые связи частей приложения.
            • Незаменимый админ полубог на скейтборде.
            • Радуга окружений: development, testing, integration, staging, production.
            • Генерация конфигов для системы управления конфигами.
            • Feature flagging.
            docker run docker
          • 350+ полезных ресурсов, книг и инструментов для работы с Docker

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

            Читать дальше →
            • +28
            • 71k
            • 8
          • Собеседование в Booking.com (часть 1, московская)



              В последнее время здесь стали популярными статьи на тему рабочей иммиграции в Европу. Поскольку я также являюсь IT-иммигрантом и работаю в Амстердамском офисе Booking.com, я решил, что у меня тоже есть, что рассказать.

              Меня зовут Георгий, и вот уже полтора года я живу в Голландии и работаю разработчиком/тим-лидом в Booking.com. Начать свой рассказ про жизнь в Амстердаме я хочу с истории о том, с чего вообще все это началось. История эта будет про то, как и почему я выбрал для работы свою текущую компанию, как проходил процесс собеседования и последующего сопровождения.
              Читать дальше →
            • Опыт переезда для работы программистом в Берлин (часть 2)

                Добрый день! В первой части я рассказывал о том, как получал визу и искал жилье, а в этой расскажу, как найти работу в Германии и как это делал я. Забегая вперед, скажу, что в Берлине мне потребовалась 10 дней, чтобы получить первый оффер, который я в итоге и принял. Но приготовления были, конечно, более длительными.
                Читать дальше →
              • Я знал, как валидировать email-адрес. Пока не прочитал RFC

                • Перевод
                От переводчика: прочитав статью, начал было отвечать в комментариях, но решил, что текст, на которую я собирался ссылаться, достоин отдельной публикации. Встречайте!
                Если вы знаете, как валидировать email-адрес, поднимите руку. Те из вас, кто поднял руку — опустите её немедленно, пока вас кто-нибудь не увидел: это достаточно глупо — сидеть в одиночестве за клавиатурой с поднятой рукой; я говорил в переносном смысле.

                До вчерашнего дня я бы тоже поднял руку (в переносном смысле). Мне нужно было проверить валидность email-адреса на сервере. Я это уже делал несколько сот тысяч раз (не шучу — я считал) при помощи классного регулярного выражения из моей личной библиотеки.

                В этот раз меня почему-то потянуло ещё раз осмыслить мои предположения. Я никогда не читал (и даже не пролистывал) RFC по email-адресам. Я попросту основывал мою реализацию на основе того, что я подразумевал под корректным email-адресом. Ну, вы в курсе, что обычно говорят о том, кто подразумевает. [прим. перев. Автор имеет в виду игру слов: «when you assume, you make an ass of you and me» — «когда вы (что-то) подразумеваете, вы делаете /./удака из себя и из меня»]

                И обнаружил кое-что занимательное: почти все регулярные выражения, представлены в интернете как «проверяющие корректность email-адреса», излишне строги.
                Читать дальше →
              • DIY порошок для посудомойки: разбираем промышленные средства и улучшаем рецепт



                  Внимание! В рецепте с отбеливателем обнаружилась опасность коррозии металла! Не рекомендуется в стандартном применении!

                  Обзор экспериментов год спустя:
                  DIY порошок для посудомойки: как не растворить посуду и не повторить моих ошибок. Год экспериментов

                  В прошлой публикации мы создавали дешевый порошок для посудомойки из желудей и спичек кальцинированной соды и стирального порошка. В этой я расскажу о том, как можно его улучшить с помощью кислородного отбеливателя и где можно купить компоненты для более продвинутой версии. Будем делать упор на эффективности мойки, но даже при этом цена не выйдет за 100 рублей/килограмм. А еще будет рецепт ополаскивателя с себестоимостью в районе 1 рубля за литр. Как справедливо заметил amarao, занятие не для всех и многим проще использовать готовые таблетки. Но в подобных экспериментах с бытовой химией есть что-то от детства, первых опытов по смешиванию соды с уксусом и газировки с мятными конфетами. Так что ощутимая экономия здесь все-таки вторична. Будем развлекаться) Если кому-то лень читать весь текст — в конце поста будут подробные рецепты с рекомендациями.
                  Читать дальше →
                • Консоль 21 века: mosh, tmux, fish

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

                    Но если вы проводите за своим инструментом до 80% рабочего времени, то желательно убедиться, что вы не тратите время впустую и что работа доставляет вам удовольствие. В этой статье я бы хотел немного рассказать про те инструменты, которыми я лично пользуюсь каждый день, и про то, как они улучшают user experience (и, часто, продуктивность) при работе с консолью и с удаленными серверами в частности.

                    Проблемы ssh


                    При работе с удаленными серверами по ssh есть много вещей, которые могут фрустрировать, но основных проблем две, и первая из них принципиально неразрешима в рамках ssh:

                    1. При высоком round-trip latency (>100 ms) пользовательский ввод появляется с ощутимой задержкой, а при использовании мобильного интернета с edge (latency 1000 ms) работа становится подобна пытке
                    2. При временных проблемах (несколько минут) с доставкой пакетов, соединение может порваться с write failed: broken pipe, причем узнаете вы об этом только при попытке ввода или при использовании настроек вроде keepaliveinterval


                    Первая проблема неразрешима потому, что ssh by-design является просто транспортом для байтов, и существующие приложения на это поведение расчитывают. Поскольку ssh не пытается интерпретировать этот поток байтов, он не может осуществлять предиктивный ввод. Лично для меня именно эта проблема наиболее актуальна, поскольку мне приходится работать с серверами в европе и США, и во втором случае задержка составляет около 200 мс и является принципиально неустранимой, по крайней мере до изобретения квантовой коммуникации или чего-нибудь подобного. Вторая же проблема проявляется в наших условиях относительно редко, но всё же неприятно переустанавливать все соединения при сбоях сети (и перезапускать упавшие приложения, если они почему-то не были запущены в screen).

                    Читать дальше →
                  • Акции: первый серьезный опыт

                      Мой первый опыт инвестирования случился еще в школе, у нас уже появился dial-up, а спустя некоторое время и первые компании, предлагающие торговать на Forex. Отношение в тот момент ко всей этой торговле было исключительно игровое – я совершал сделки без особого анализа, используя самые простые индикаторы уровней на графике цены. Спустя годы я пришел «взрослую биржу».

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

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

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


                      Читать дальше →
                    • Здравствуйте, я Meklon и я кофеин-зависимый



                        Другие статьи цикла:
                        Хроники лаборатории: как мы молотый кофе считали софтом для анализа клеточных структур
                        Компот из кофейных сухофруктов. Знакомимся с каскарой — лучшим другом велосипедиста

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

                        На Хабре/Гиктаймсе уже не раз обсуждался кофе и все, что с ним связано. Я решил написать пост, посвященный этому напитку и различным эффектам кофеина с медицинской точки зрения. Если хватит времени — возможно это будет цикл статей с экспериментами над людьми, computer vision и прочим непотребством. Увидим. А пока, товарищи кофеиноманы и им сочувствующие, добро пожаловать под кат.
                        Получить свою порцию кофеина
                      • Здоровье гика: кофеманим правильно

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


                          Действительно, о кофе не писал только ленивый. Буквально каждый ресурс, так или иначе касающийся темы работы и фриланса, тут отметился. Неудивительно — кофе уже даже не одно десятилетие является напитком №1 в офисах всего мира, да и дома люди предпочитают начать день с чашечки ароматного напитка, дабы побыстрее согнать с себя остатки сна и нормально осознать окружающую реальность. И несмотря на то, что, казалось бы, врачи и учёные только и делают, что изучают кофе и его влияние на организм человека, про него по-прежнему рассказывают кучу небылиц. Да что там — учёные по многим нюансам воздействия кофе сами не могут прийти к компромиссу, так как многие исследования прямо опровергают друг друга. И постоянно проводятся новые…

                          Итого, давайте-ка поговорим о кофе в контексте только действительно подтверждённых (или, по крайней мере, подтверждённых большинством исследователей) фактов — что от него бывает, что не бывает, как его правильно пить и пить ли вообще.
                          Читать дальше →
                        • REST-сервер для простого блога на Haskell

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

                          И тут-то меня ждало разочарование: я не был способен написать ничего кроме hello world-a. Т.е. я примерно представлял себе, как написать какую-нибудь консольную утилиту типа find или вроде того, — но первая же встреча с IO разрушала все мои представления. Библиотек для Haskell вроде бы много, а документации по ним почти совсем нету. Примеров решения типовых задач тоже очень мало.

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

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

                          Для самых нетерпеливых: исходники здесь.
                          Читать дальше →