• Повышаем информативность ошибок в Go – github.com/ztrue/tracerr

      После многолетнего опыта работы с php и js, я привык иметь в ошибках стектрейс и смотреть на место, где произошла ошибка прямо из эррор-репорта. Пересев на Go пару лет назад, я был несколько удивлен, что в Go другие правила и нужно угадывать стектрейс по какой-нибудь строке типа `invalid character`. А если она произошла на проде и не известно, как ее воспроизвести, то это превращалось в целый аттракцион.

      Поскольку я уверен, что не один от этого страдал, то сделал пакет, который умеет так:

      golang error output

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



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

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

        • Translation



        Содержание



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


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


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


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



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

        Читать дальше →
      • 50 оттенков Go: ловушки, подводные камни и распространённые ошибки новичков

        • Translation
        • Tutorial


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

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

        Подопытное приложение
        Клиент просматривает список доступных квартир и бронирует их, также он может размещать на сервисе свои квартиры.

        При классическом подходе для построения чаще всего выбирается фреймворк и внутри него реализуются компоненты. В случае с микросервисами для каждого компонента строится отдельное приложение и подбирается свой набор инструментов. Компоненты чаще всего взаимодействуют через REST API.
        image
        Компоненты: C — данные по квартирам (ядро), 1 — бронирование, 2 — оплата, 3 — логирование броней, 4 — размещение квартир, 5 — администрирование контента.

        Обратите внимание, что перед созданием микросервисного приложения придется как следует продумать бизнес-логику и разбить приложение на самодостаточные компоненты. А теперь поговорим о том, почему микросервисы это круто.
        Читать дальше →
      • Микросервисы (Microservices)

        От переводчика: некоторые скорее всего уже читали этот титанический труд от Мартина Фаулера и его коллеги Джеймса Льюиса, но я все же решил сделать перевод этой статьи. Тренд микросервисов набирает обороты в мире enterprise разработки, и эта статья является ценнейшим источником знаний, по сути выжимкой существующего опыта работы с ними.

        Термин «Microservice Architecture» получил распространение в последние несколько лет как описание способа дизайна приложений в виде набора независимо развертываемых сервисов. В то время как нет точного описания этого архитектурного стиля, существует некий общий набор характеристик: организация сервисов вокруг бизнес-потребностей, автоматическое развертывание, перенос логики от шины сообщений к приемникам (endpoints) и децентрализованный контроль над языками и данными.
        Читать дальше →
      • Инструкция: Как создавать ботов в Telegram

        24 июня разработчики Telegram открыли платформу для создания ботов. Новость кого-то обошла стороной Хабр, однако многие уже начали разрабатывать викторины. При этом мало где указаны хоть какие-то примеры работающих ботов.
        Попробую это исправить
      • Вёрстка адаптивных email-писем: подробное руководство (часть 2)

        • Translation


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

        Сегодня речь пойдет о применении media queries для разных устройств, оптимизации изображений для «мобайла» и повышении эффективности форм подписки.
        Читать дальше →
      • Вёрстка адаптивных email-писем: подробное руководство (часть 1)

        • Translation


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

        Зачем нужно адаптировать письма для мобильных устройств


        Значительная часть аудитории различных компаний, занимающихся email-маркетингом, просматривают письма на мобильных устройствах. Во время исследования Campaign Monitor от 2011 года выяснилось, что почти 20% открытий писем происходили на смартфонах и планшетах — в 2009 году эта цифра находилась на уровне всего в 4%. Почти 90% от этих открытий осуществлялись на устройствах под iOS. Сейчас цифры еще выше.

        В этом руководстве мы рассмотрим несколько способов улучшения отображения почтовых рассылок на мобильных устройствах (от использования media queries при вёрстке адаптивных шаблонов до более продвинутых техник). Кроме того, мы рассмотрим различные вопросы дизайна, которые возникают еще на этапе планирования рассылки, а также поговорим о том, каким образом стоит размещать формы подписки для получения писем на смартфонах и планшетов.
        Читать дальше →
      • Flux для глупых людей

        • Translation
        • Tutorial
        Пытаясь разобраться с библиотекой от Facebook ReactJS и продвигаемой той же компанией архитектурой «Flux», наткнулся на просторах интернета на две занимательные статьи: «ReactJS For Stupid People» и «Flux For Stupid People». Чуть раньше я поделился с хабравчанами переводом первой статьи, настала очередь второй. Итак, поехали.

        Flux для глупых людей


        TL;DR Мне, как глупому человеку, как раз не хватало этой статьи, когда я пытался разобраться с Flux. Это было не просто: хорошей документации нет и многие ее части перемещаются.

        Это продолжение статьи «ReactJS For Stupid People».
        Читать дальше →
      • Задача о 64 монетах, двух заключённых и одной шахматной доске

        • Translation


        Примечание переводчика: я заменил оригинальные обозначения сторон монеты head/tail на аверс/реверс, чтобы не вносить путаницу русскоязычными орёл/решка. На иллюстрации выше слева аверс (head), справа реверс (tail).

        Спасение невозможно?


        Это одна из тех типичных загадок о заключённых, в которых вы приговорены к смерти и можете спастись, только если докажете свои умственные способности тюремщику. Вы и ваш друг были заключены в тюрьму. Ваш тюремщик предлагает вам испытание. Если вы его выполните, вы оба будете освобождены.
        Читать дальше →
      • Как легко расшифровать TLS-трафик от браузера в Wireshark

        • Translation
        Многим из вас знаком Wireshark — анализатор трафика, который помогает понять работу сети, диагностировать проблемы, и вообще умеет кучу вещей.

        image

        Одна из проблем с тем, как работает Wireshark, заключается в невозможности легко проанализировать зашифрованный трафик, вроде TLS. Раньше вы могли указать Wireshark приватные ключи, если они у вас были, и расшифровывать трафик на лету, но это работало только в том случае, если использовался исключительно RSA. Эта функциональность сломалась из-за того, что люди начали продвигать совершенную прямую секретность (Perfect Forward Secrecy), и приватного ключа стало недостаточно, чтобы получить сессионный ключ, который используется для расшифровки данных. Вторая проблема заключается в том, что приватный ключ не должен или не может быть выгружен с клиента, сервера или HSM (Hardware Security Module), в котором находится. Из-за этого, мне приходилось прибегать к сомнительным ухищрениям с расшифровкой трафика через man-in-the-middle (например, через sslstrip).

        Логгирование сессионных ключей спешит на помощь!


        Что ж, друзья, сегодня я вам расскажу о способе проще! Оказалось, что Firefox и Development-версия Chrome поддерживают логгирование симметричных сессионных ключей, которые используются для зашифровки трафика, в файл. Вы можете указать этот файл в Wireshark, и (вуаля!) трафик расшифровался. Давайте-ка настроим это дело.
        Читать дальше →
      • Архитектурный дизайн мобильных приложений

          Признак плохого дизайна №1:
          Наличие объекта-«бога» с именем, содержащим «Manager», «Processor» или «API»


          Ведущий iOS-разработчик Redmadrobot Егор BepTep Тафланиди — о том, как добиться стройного архитектурного дизайна мобильного приложения, используя классические шаблоны проектирования и логическое разделение исходного кода на модули.

          Читать дальше →
        • Архитектурный дизайн мобильных приложений: часть 2

          • Tutorial
          Чтобы направить всю энергию системы в необходимом направлении, нужно эту систему ограничить правилами.


          Привет, Хабр! Продолжаем серию статей об архитектурном дизайне мобильных приложений. Под катом поговорим о проектировании слоёв UI. Добро пожаловать!
          Читать дальше →
        • Brackets для сомневающихся и новичков

          • Tutorial

          СД: НЧ


          Без плагинов Brackets не лучше других редакторов, но с ними его стоит хотя бы попробовать.

          Введение


          Не так давно на Хабре было опубликовано множество статей, касающихся тем или иным образом редактора Brackets. У многих людей сразу же появились вполне справедливые вопросы:
          1. Чем он лучше используемого мной %EDITOR_NAME%?
          2. Много ли под него плагинов?
          3. Стоит ли связываться или лучше использовать какую-нибудь известную IDE или текстовый редактор?

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

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

            Разработка ПО – нелинейный процесс

            Разработка программного обеспечения — нелинейный процесс. Если на проект выделено 5 разработчиков, которые за 5 месяцев должны разработать продукт (25 чел./мес.), то 25 разработчиков не смогут сделать эту же работу за 1 месяц (те же 25 чел./мес.).


            image
            Читать дальше →
          • Секции теста IELTS

              image

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

              Сегодня же мы хотим более подробно затронуть тему 4-х секций IELTS — Reading, Speaking, Writing и Listening. У каждой из частей есть свои особенности, на которые мы и обратим внимание.

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


              Читать дальше →
              • +18
              • 14.6k
              • 4
            • Как я покупал 3D-принтер


                Данный пост является своеобразным предостережением тем, кто задумал купить 3D-принтер. Этот, казалось бы, простой процесс для цивилизованных стран, может вдребезги разлететься о суровые Российские реалии. Я, сам того не ожидая, сумел пройтись по всем возможным граблям, и на собственной шкуре убедился, как же в действительности обстоят дела по «ту сторону экрана». Итак, приглашаю Вас поучиться на чужих ошибках.
                Читать дальше →