• Атом — минимальный кирпичик реактивного приложения

    Здравствуйте, меня зовут Дмитрий Карловский и я… клиент-сайд разработчик. За плечами у меня 8 лет поддержки самых различных сайтов и веб-приложений: от никому не известных интернет-магазинов, до таких гигантов как Яндекс. И всё это время я не только фигачу в продакшн, но и точу топор, чтобы быть на самом острие технологий. А теперь, когда вы знаете, что я не просто хрен с горы, позвольте рассказать вам про один архитектурный приём, которым я пользуюсь последний год.

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

    Осторожно: чтение может вызвать вывих мозга, приступ холивара, а также бессонные ночи рефакторинга.
    Читать дальше →
  • Пишем микросервис на KoaJS 2 в стиле ES2017. Часть I: Такая разная ассинхронность

      Koa v2

      У Вас никогда не возникало желания переписать все с чистого листа, «забить» на совместимость и сделать все «по уму»? Скорее всего KoaJS создавался именно так. Этот фреймворк уже несколько лет разрабатывает команда Express. Экспресовцы про эти 2 фреймворка пишут так: Philosophically, Koa aims to «fix and replace node», whereas Express «augments node» [С филосовской точки зрения Koa стремится «пофиксить и заменить ноду» в то время как Express «расширяет ноду»].

      Koa не обременен поддержкой legacy-кода, с первой строчки вы погружаетесь в мир современного ES6 (ES2015), а в версии 2 уже есть конструкции из будущего стандарта ES2017. В моей компании этот фреймворк в продакшене уже 2 года, один из проектов (AUTO.RIA) работает на нагрузке полмиллиона посетителей в день. Несмотря на свой уклон в сторону современных/экспериментальных стандартов фреймворк работает стабильнее Express и многих других фреймворков с CallBack-style подходом. Это обусловлено не самим фреймворком, а современными конструкциями JS, которые в нем применяются.

      В этой статье я хочу поделиться своим опытом разработки на koa. В первой части будет описан сам фреймворк и немного теории по организации кода на нем, во второй мы создадим небольшой рест-сервис на koa2 и обойдем все грабли, на которые я уже наступил.
      Читать дальше →
    • «Hello World!» на C массивом int main[]

      Я хотел бы рассказать о том, как я писал реализацию «Hello, World!» на C. Для подогрева сразу покажу код. Кого интересует как до этого доходил я, добро пожаловать под кат.

      #include <stdio.h>
      const void *ptrprintf = printf;
      #pragma section(".exre", execute, read)
      __declspec(allocate(".exre")) int main[] =
      {
          0x646C6890, 0x20680021, 0x68726F57,
          0x2C6F6C6C, 0x48000068, 0x24448D65,
          0x15FF5002, &ptrprintf, 0xC314C483
      };

      Реализация
    • Объясняя необъяснимое

      • Translation
      Друзья, мы с радостью продолжаем публикацию интересных материалов, посвященных самым разнообразным аспектам работы с PostgreSQL. Сегодняшний перевод открывает целую серию статей за авторством Hubert Lubaczewski, которые наверняка заинтересуют широкий круг читателей.



      Одна из первых вещей, которую слышит новоиспеченный администратор баз данных – «используй EXPLAIN». И при первой же попытке он сталкивается c непостижимым:

                                                              QUERY PLAN
      ---------------------------------------------------------------------------------------------------------------------------
       Sort  (cost=146.63..148.65 rows=808 width=138) (actual time=55.009..55.012 rows=71 loops=1)
         Sort Key: n.nspname, p.proname, (pg_get_function_arguments(p.oid))
         Sort Method: quicksort  Memory: 43kB
         ->  Hash Join  (cost=1.14..107.61 rows=808 width=138) (actual time=42.495..54.854 rows=71 loops=1)
               Hash Cond: (p.pronamespace = n.oid)
               ->  Seq Scan on pg_proc p  (cost=0.00..89.30 rows=808 width=78) (actual time=0.052..53.465 rows=2402 loops=1)
                     Filter: pg_function_is_visible(oid)
               ->  Hash  (cost=1.09..1.09 rows=4 width=68) (actual time=0.011..0.011 rows=4 loops=1)
                     Buckets: 1024  Batches: 1  Memory Usage: 1kB
                     ->  Seq Scan on pg_namespace n  (cost=0.00..1.09 rows=4 width=68) (actual time=0.005..0.007 rows=4 loops=1)
                           Filter: ((nspname <> 'pg_catalog'::name) AND (nspname <> 'information_schema'::name))
      

      Что бы это могло значить?
      Читать дальше →
    • Обзор новшеств Docker Engine с 1.0 до 1.7. Введение в Docker Compose

        В прошлых статьях мы уже рассматривали что такое Docker и как использовать Dockerfile и осуществлять коммуникацию между контейнерами.



        Эти статьи были написаны по Docker 1.1.2. С тех пор в Docker появилось много полезного, о чем мы расскажем в этой статье. Также мы рассмотрим подробнее Docker Compose, утилиту, позволяющую определять мультиконтейнерное приложение со всеми зависимостями в одном файле и запускать это приложение в одну команду. Примеры будут продемонстрированы на облачном сервере в InfoboxCloud.
        Читать дальше →
        • +22
        • 24.8k
        • 9
      • Некоторые тонкости работы с Github и NPM — со вкусом ES6

        • Tutorial
        Здравствуйте, меня зовут Александр, и я пишу велосипеды по выходным программист.



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

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

        • Tutorial


        И снова в эфире наша постоянная рубрика «Лекции Технопарка». На этот раз предлагаем вам ознакомиться с материалами курса «Проектирование высоконагруженных систем». Цель курса — получение студентами навыков проектирования высокоэффективных программных систем.
        Читать дальше →
        • +50
        • 64.9k
        • 5
      • (Перевод) Введение в разработку C++ в UE4

          Часть 1. Введение. Создание класса и добавление свойств. Расширение класса С++ с помощью Blueprint.
          Часть 2. Классы геймплея. Структуры. Отражение (reflection) в Unreal. Object/Actor итераторы. Менеджер памяти и сборщик мусора.
          Часть 3. Префиксы в именах классов. Целочисленные типы. Типы контейнеров. Итераторы контейнеров. Цикл For-each, хеш-функции.
          Часть 4. Бонусная. Unreal Engine 4 для Unity разработчиков.

          image

          Эта статья является переводом части документации по UE4. Оригинальную статью вы можете найти пройдя по это ссылке.
          Далее
          • +40
          • 140k
          • 8
        • Rust: абстракции и безопасность, совершенно бесплатно (видеозапись с выступления на митапе Saratov Open-IT)

            Привет.

            В прошлую субботу я выступал с докладом на очередном митапе Saratov Open-IT, где я рассказал про Rust — многообещающий системный язык программирования, разрабатываемый Mozilla Research и сообществом, и про то, какие проблемы он решает и какие у него есть особенности и инфраструктура. Надеюсь, что моё выступление будет интересно сообществу, поэтому выкладываю его здесь.

            (видео не вставлено в пост через тег <video> потому что он не работает с конкретной временной меткой; длительность — примерно полтора часа)
            http://www.youtube.com/watch?v=lmauAUF823k#t=2583

            Больше про Rust и про сам доклад
          • NetSetMan — программа для быстрой смены сетевых настроек на ноутбуке

              Ноутбуки прочно вошли в жизнь человечества. :)
              При перемещениях в течении дня, часто приходится менять сетевую конфигурацию для доступа к сети. За день можно побывать дома, на работе, в университете, в кафе на обеде, и во многих из этих мест есть доступ к сети internet, только приходится постоянно менять ip-шники, dns-ы, шлюзы и т.д.
              Чтобы не делать этого вручную предлагаю ознакомиться с удобной и бесплатной программой для смены настроек в 2 клика.
              NetSetMan - программа для быстрой смены сетевых настроек на ноутбуке
              ознакомиться
            • Введение в программирование через поведение (BDD)

              • Translation
              • Tutorial
              История: Эта статья впервые появилась в журнале Better Software в марте 2006. Она была переведена на несколько языков.

              Однажды я столкнулся с проблемой. Обучая разработчиков практикам agile программирования, таким как TDD в различных проектах, я часто встречал непонимание и растерянность. Они хотели знать, где начать, что тестировать, а что не тестировать, как много тестировать за раз, как называть тесты и как понять, почему тесты падают.

              Чем больше я пользовался TDD, тем больше я понимал, что не столько оттачиваю своё мастерство, достигая новых его вершин, сколько то, что это было движение в слепую. Я помню, как мне все чаще приходила мысль: «Эх, вот бы мне кто-нибудь сказал это раньше!», чем мысль: «Отлично, дорога ясна». Я решил, что нужно найти способ обучать TDD, показывающий, как верно работать с ним сразу и без ошибок.

              И этот способ — это программирование через поведение. Оно выросло из выработанных agile практик и призвано сделать их доступнее и эффективнее для команд, незнакомых с ними. Со временем, BDD стало включать в себя agile анализ и автоматическое приемочное (прим. acceptance) тестирование.

              Читать дальше →
            • Как прокачивать мозг

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

                Не правда ли, картинка объемна?

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

                Но обо всем по порядку.

                Понимание роли мозга


                Нет невежества страшнее, чем невежество по отношению к самому себе.

                Мозг управляет почти всем в нашем организме — от дыхания, работы органов чувств до сложных мыслительных процессов и воображения. Существует множество методик и советов по развитию, однако, как я убедился, мало какие делают упор на роль мозга в процессе.
                Читать дальше →
              • Многопоточная реализация алгоритма кеширования CART

                Некоторое время назад передо мной встала задача кеширования запросов в большую базу данных на диске в высоконагруженном многопоточном приложении (С++). Само приложение предназначалось для развертывания в облаке и диск очевидно стал бы самым узким местом. База при этом представляла из себя огромный граф, по которому одновременно ползало множество потоков. Таким образом кеш ко всему еще и должен был быть многопоточным.

                Идею использования внешних приложений, таких как memcached, я отбросил сразу же – это внесло бы в каждый переход по ребру графа неизбежный дополнительный лаг. Встал вопрос об имплементации внутри приложения.
                Читать дальше →
              • Применение принципа DRY в RSpec



                  DRY(Don’t Repeat Yourself) — один из краеугольных принципов современной разработки, а особенно в среде ruby-программистов. Но если при написании обычного кода повторяющиеся фрагменты обычно легко можно сгруппировать в методы или отдельные модули, то при написании тестов, где повторяющегося кода порой еще больше, это сделать не всегда просто. В данной статье содержится небольшой обзор средств решения подобных проблем при использовании BDD-фреймворка RSpec.
                  Читать дальше →
                • Пишем примитивный и никому не нужный компилятор

                    Я считаю, что каждый программист должен написать свой компилятор.

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

                    В посте мы рассмотрим, как можно написать свой компилятор C-подобного языка меньше чем за час, исписав всего 300 строчек кода. В качестве бонуса, сюда входит и код виртуальной машины, в байткод которой будет компилироваться исходник.
                    Читать дальше →
                  • Прокрастинация разрушила мою жизнь, часть 2: интересные ответы нытику

                      Вчера я опубликовал перевод топика «Прокрастинация разрушила мою жизнь» одного из североамериканских хлопцев с Hacker News. Сегодня вы можете ознакомиться с интересными ответами HN-юзеров.

                      юзер Isamu



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

                        Стэнфордский курс по основам языков программирования выложен на YouTube.



                        27 лекций минут по 20 каждая ведут стэнфордский преподаватель Джерри Кейн (экс-Стэнфорд, нынче Facebook), последняя лекция по Haskell преподается Сашей Рашем (Facebook). Рассматриваются концепции и основы C (куда ж без него), ассемблера, C++, Scheme, Python и Haskell.
                      • Онлайн P2P клиент

                          image

                          Месяца 3 назад я показал на Хабре первую бета-версию моего проекта. На тот момент было довольно много мелких багов и не большая стабильность всей системы в целом. На то это и приставка «бета» впринципе :)

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