• Опрос разработчиков от StackOverflow (2017)

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


      Кстати, на КДПВ — список "Most Loved" языков, это языки, на которых опрашиваемые пробовали писать, и им понравилось.


      Читать дальше →
    • Знакомство с React Loadable

      Привет, Хабр. Представляю вам свободный перевод статьи Джеймса Кайла «Introducing React Loadable». В ней Джеймс рассказывает, что такое компонент-ориентированный подход к разделению кода и представляет разработанную им библиотеку Loadable — инструмент, позволяющий реализовать этот подход в React.js приложениях.

      image
      Единый файл сборки и сборка из нескольких файлов

      От переводчика: я позволил себе не переводить некоторые глаголы и термины, повсеместно использующиеся в непереведенной транслитерованной форме (как, например, «прелоадер» и «рендеринг»), полагаю, они будут понятны даже пользователям, читающим исключительно материалы на русском языке.
      Читать дальше →
      • +16
      • 24.2k
      • 4
    • Pivoting или проброс портов

      Наткнулся на статью "SSH-туннели — пробрасываем порт" и захотелось ее дополнить.

      Итак, какие еще способы тунеллирования есть:

      1. Динамический доступ через SSH


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

      Тут может пригодиться динамический доступ через SSH. Для его конфигурации используется опция ssh -D.

      ssh -D 127:0.0.1:2222 user@remotehost
      

      После подключения вы получите динамический socks4 прокси-сервер, слушающий на своей машине на порту 2222 и предоставляющий доступ к удаленной сети.

      Как воспользоваться этим доступом? Один из вариантов — использовать proxychains.

      • Устанавливаем Proxychains:

        apt-get proxychains
        

      • Конфигурируем proxychains для использования порта 2222 (на нем слушает наш прокси). Для этого редактируем файл /etc/proxychains.conf и меняем текущую конфигурацию в разделе [ProxyList] с socks4 127.0.0.1 9050 на socks4 127.0.0.1 2222
      • Теперь мы можем использовать proxychains с (почти) любой утилитой. Например, можно запустить сканирование всей удаленной сети при помощи nmap:

        proxychains nmap -sT -sV -v -P0 адрес_подсети маска_подсети
        

      Читать дальше →
      • +12
      • 23.7k
      • 7
    • Итоги и разбор заданий онлайн-тура NeoQUEST-2014

        Настала пора подвести итоги онлайн-тура NeoQUEST-2014, в том числе:
        — разобрать все 7 заданий квеста (на каждый день недели!);
        — поведать о победителях и их наградах;
        — рассказать, что ждет участников и гостей мероприятия в очном туре NeoQUEST-2014, который пройдет 3 июля в Санкт-Петербурге в Политехническом Университете.
        Читать дальше →
      • Производительность без цикла событий

        • Translation


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

        Про Go часто говорят, что он хорош для серверов: здесь есть статические бинарники (static binaries), развитый concurrency, высокая производительность. В этой статье мы поговорим о двух последних пунктах: о том, как язык и среда выполнения (runtime) ненавязчиво позволяют Go-программистам создавать легко масштабируемые серверы и не беспокоиться из-за управления потоками (thread) или блокирующих операций ввода/вывода.
        Читать дальше →
      • Опасный target="_blank"

          Большинство создают внешние ссылки через target="_blank" и не знают одного интересного нюанса — страница, на которую мы попадем таким образом, получит частичный контроль над ссылающейся на нее страницей через js свойство window.opener.

          Через window.opener.location мы сможем сделать редирект на, к примеру, фишинговую страницу. Это своего рода tabnabbing, только более продвинутый. Так как жертва меньше всего ожидает подмены страницы, в открытой ранее, доверенной вкладке браузера.
          Читать дальше →
        • Рассылка пуш уведомлений на Go


            Если вы последний год пользовались мобильными приложениями от ВКонтакте (пусть даже не официальными), то этот материал раскроет немного данных по тому, как у нас это время работают пуш уведомления. Пушилка реализована на языке Go, и рассылает до 9 миллиардов пушей в сутки на четыре целевых платформы: GCM, APNS, MPNS, WNS.

            В этом посте решил рассказать об общей архитектуре пушилки, проблемах и их обходе, нагрузках и производительности решения. Много букв и мало кода.
            Читать дальше →
          • Как я взломал Facebook и обнаружил чужой бэкдор

            • Translation


            Исследователь по безопасности Orange Tsai взломал один из серверов Facebook и обнаружил бэкдор для сбора учетных записей сотрудников компании, оставленный злоумышленником.
            Читать дальше →
          • Golang и ООП

            • Tutorial
            Если вы еще не пресытились постами в блогосфере на тему «является ли Go ООП-языком», то вот вам еще один. И краткий ответ — «да, но это не важно».
            Впрочем, я постараюсь не зацикливаться на терминологии и академических определениях, а сделать акцент на том, как мы делаем это в Go.


            Читать дальше →
          • Реальная оценка или почему наступают дедлайны?

            • Translation
            image

            Как опытный менеджер проектов, я часто сталкивался с заявленными программистами сроками выполнения задачи, умножал их на Пи и брал следующий по счету порядок. Так 1 день превращался в 3.14 недель. Я познал на собственной шкуре, что программисты — никудышные оценщики.

            Для пущей точности я сделал таблицу, которая помогает перевести программистские оценки в приближенные к реальности.
            Читать дальше →
          • Краш-курс по интерфейсам в Go

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

            В этой статье вы узнаете:

            • в чем отличие от интерфейсов в Java
            • важные и неочевидные последствия этих отличий
            • как устроены интерфейсы под капотом
            • вспомним про пустой интерфейс (interface{})
            • затронем сакральную тему про дженерики
            • разберемся, кто и зачем должен создавать интерфейс
            • и постараемся научиться не абьюзить интерфейсы и начать жить

            Header
            (artwork by Svitlana Agudova)
            Читать дальше →
          • Go и Protocol Buffers, ускорение

            • Tutorial
            Некое продолжение статьи Go и Protocol Buffers толика практики (или быстрый старт, для тех кто ещё не знаком). Процессы кодирования/декодирования в определённые форматы в Go тесно связяны с рефлексией. А как мы с Вами, дорогой читатель, знаем — рефлексия — это долго. О том какие методы борьбы существуют эта статья. Думаю что, искушённые вряд ли найдут в ней, что-либо новое.
            Почему бы и не глянуть
            • +9
            • 16.8k
            • 5
          • Go и Protocol Buffers толика практики (или быстрый старт, для тех кто ещё не знаком)

            • Tutorial
            Весьма короткий пример как использовать Protocol Buffers в Go. Речь пойдёт о proto3, т.е. 3-ей версии протокола (на текущим момент альфа), обобщённо пример справедлив и для второй версии. Не будет описания самого Protocol Buffers. Впрочем чего тянуть
            Сами всё увидите
            • +10
            • 17.8k
            • 6
          • Крупнейший хакатон в истории разработки ПО с призовым фондом в 140000$

              image

              22-25 февраля 2016 года будет проходить знаковое событие в сфере разработки ПО — hack.summit(). Это крупнейшая виртуальная конференция в истории. Самая большая в истории конференция по программированию. Самый крупный из проходивших в мире хакатонов с общим призовым фондом в 140000$ (на главной странице проекта почему то фигурирует 150000$, но в описании призовых мест 100k, 30k и 10k, может чего пропустил).

              Для тех, кому достаточно hack.summit().
              Читать дальше →
              • +13
              • 15.5k
              • 3
            • С-вызовы в Go: принцип работы и производительность


                Язык Go в последнее время неоднократно обсуждался на хабре — его и критиковали , и хвалили. Мы в Intel любим Go и участвуем в open-source разработке этого проекта. Если вы тоже используете Go, интересуетесь его внутренним строением и вопросами наиболее эффективного программирования на этом замечательном языке, то добро пожаловать под кат. Статья будет о том, каким образом в Go реализован механизм внешних вызовов, и насколько быстро он работает.
                Читать дальше →
                • +25
                • 15.5k
                • 4
              • Docker: Окружение для тестирования



                  Последние пять лет принесли в нашу жизнь огромное количество технологий, с помощью которых можно быстро создавать изолированные окружения для разработки и тестирования. Но не смотря на это, организовать стабильное окружение для тестирования — далеко не самая простая задача. А если нужно тестировать сетевые взаимодействия компонентов и анализировать предельный уровень нагрузки на них, то задача становится еще сложнее. Добавив возможность быстрого развертывания окружения и гибкой настройки отдельных компонентов, мы сможем получить небольшой интересный проект.
                  В этой статье мы подробно расскажем о создании окружения на базе Docker контейнеров для тестирования нашего клиент-серверного приложения. При этом, если смотреть глобально, то данная статья будет хорошей иллюстрацией использования Docker и его ближайшей экосистемы.
                  Читать дальше →
                  • +17
                  • 64.8k
                  • 3
                • HighLoad++ 2015 глазами иностранного докладчика

                    Всем привет!

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

                    Заявку подавал я 19 января этого года, а 5го октября ее одобрили. Радости, конечно же было много и пришла пора готовиться к докладу.
                    Читать дальше →
                    • +10
                    • 7.9k
                    • 6
                  • 58 признаков хорошего интерфейса

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

                    1 Один столбец вместо нескольких


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

                    image
                    Читать дальше →
                  • Пишем быстрый и экономный код на JavaScript

                    • Translation
                    Такой движок JS, как V8 (Chrome, Node) от Google, заточен для быстрого исполнения больших приложений. Если вы во время разработки заботитесь об эффективном использовании памяти и быстродействии, вам необходимо знать кое-что о процессах, проходящих в движке JS браузера.

                    Что бы там ни было — V8, SpiderMonkey (Firefox), Carakan (Opera), Chakra (IE) или что-то ещё, знание внутренних процессов поможет вам оптимизировать работу ваших приложений. Но не призываю вас оптимизировать движок для одного браузера или движка – не делайте так.

                    Задайте себе вопрос:
                    — можно ли что-то в моём коде сделать более эффективным?
                    — какую оптимизацию проводят популярные движки JS?
                    — что движок не может компенсировать, и может ли сборка мусора подчистить всё так, как я от неё ожидаю?



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



                      Декабрь для меня получился наиболее удачным за четыре года участия в разнообразных программах bug bounty, и я хотел бы поделиться информацией об одной из обнаруженных уязвимостей. Речь пойдет о небезопасной обработке Request-URI (Request Target). На этот раз красивой комбинацией уязвимостей порадовал Facebook.
                      Читать дальше →
                      • +98
                      • 51.4k
                      • 8