• WebSocket: Реализация web-приложения с использованием Jetty Web Socket. Часть 1

    Добрый день, Хабражитель!

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

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

    Для реализации такой задачи есть три решения:
    • «бесконечный iframe»,
    • используя XMLHttpRequest (a.k.a. Ajax),
    • используя WebSocket.

    Первое решение я сразу «отметаю» (причины объяснять не буду, web-разработчики меня поймут).

    Второе решение нравится гораздо больше, но у него есть свои минусы:
    • браузер отправляет запрос каждую секунду создавая лишнюю нагрузку на:
      • сервер;
      • ОС, на которой работает браузер;
      • и еще раз на сервер, так как сервер постоянно выполняет запрос БД на выборку последних уведомлений.
    • тяжело отследить онлайн-статус пользователя (то есть нужно, например, хранить сессии в БД и постоянно мониторить каждую на timeout).

    Третье решение — как раз то, что доктор прописал.

    Итак, WebSocket.
    Читать дальше →
  • Делаем вебсокеты на PHP с нуля

    Некоторое время назад я выбирал библиотеку для работы с вебсокетами. На просторах интернета я натыкался на статьи по интеграции node.js с yii, а почти все статьи о вебсокетах на хабре ограничивались инструкциями к тому, как использовать phpdaemon.

    Я изучал библиотеки phpdaemon и ratchet, они достаточно монструозны (причём используя ratchet для отправки сообщения конкретному пользователю рекомендовано дополнительно использовать wamp). Мне не совсем было понятно для чего использовать таких монстров, которые требуют установку других монстров. Почитав исходники этих, а также других библиотек, я разобрался как всё устроено и мне захотелось написать простой вебсокет-сервер на php самостоятельно. Это помогло мне закрепить изученный материал и наткнуться на некоторые подводные камни, о которых я не имел представления.

    Так я решил написать необходимый для меня функционал с нуля.

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

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

    «Работать в Unity так приятно и удобно: много возможностей для самореализации» — говорили мне, но всё оказалось не так просто. В данной статье не будет петься хвалебных од Unity. Эта статья о суровых реалиях, ограничениях и сложностях, с которыми столкнулась наша маленькая команда инди-разработчиков при создании своей первой, но достаточно крупной игры Death Point.



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

    Первые проблемы возникли в тот момент, когда я наконец решил попробовать на зубок систему освещения. В виду того, что мы хотели достигнуть кроссплатформенности для игры, было принципиально важно поддерживать одинаково высокий уровень графики на любом устройстве. Именно здесь я впервые погряз в слабой, как потом стало понятно, документации Unity.
    Читать дальше →
    • +52
    • 18.5k
    • 7
  • Новые практические курсы по JavaScript и ES6


      Привет, Хабр!


      Последние несколько месяцев мы в Хекслете работали над новыми курсами и обновлениями платформы. Сейчас на сайте доступно четыре "профессии", так мы называем последовательные программы обучения по разным направлениям, от новичка до джуниора. Одна из профессий окончена, а в остальных продолжают выходить новые курсы. Сегодня хочу рассказать про самое важное для нас сегодня направление — JavaScript, в частности профессию "Фронтэнд JS-программист".


      Мы пошли не стандартным путем "hello world, сделаем форму, добавим анимацию, изучим ООП", а взяли за основу подход к изучению программирования в целом, а не конкретно языка JavaScript. Язык же используется как инструмент решения задач и применения изученных концепций и идей. При это мы изучаем свежий стандарт ES6 и с самого начала знакомим учащихся с правильным окружениям и техниками: модули, пакетный менеджер, отладка, модульное тестирование.


      Вот как выглядит программа обучения:


      1. Жизнь программиста. Про профессию, виды компаний и виды разработки.
      2. Основы программирования. Фундамент: кодинг, ошибки, отладка, функции, побочные эффекты, типы данных. И, конечно, базовые штуки вроде чисел, строк, условий и т.д.
      3. JS: подготовка к работе. Установка и настройка окружения — node, npm, atom.
      4. JS: Составные данные. Как из простых типов данных составлять более сложные. Абстракция от чисел до объектов.
      5. Bash: Основы командной строки.
      6. JS: Последовательности. Пишем свой генератор HTML и изучаем filter, map, reduce.
      7. JS: Программирование, управляемое данными. Типы, сообщения, ООП и TDD.
      Читать дальше →
    • Логика сознания. Часть 2. Дендритные волны

        В предыдущей части мы показали, что в клеточном автомате могут возникать волны, имеющие специфический внутренний узор. Такие волны могут запускаться из любого места клеточного автомата и распространяться по всему пространству клеток автомата, перенося информацию. Соблазнительно предположить, что реальный мозг может использовать схожие принципы. Чтобы понять возможность аналогии, немного разберемся с тем, как работают нейроны реального мозга.
        Читать дальше →
      • Перехват функций .NET/CLR

        Иногда при разработке программного обеспечения требуется встроить дополнительную функциональность в уже существующие приложения без модификации исходного текста приложений. Более того, зачастую сами приложения существуют только в скомпилированном бинарном виде без наличия исходного текста. Широко известным способом решения указанной задачи является т.н. “сплайсинг” – метод перехвата функций путем изменения кода целевой функции. Обычно при сплайсинге первые байты целевой функции перемещаются по другим адресам, а на их исходное место записывается команда безусловного перехода (jmp) на замещающую функцию. Поскольку сплайсинг требует низкоуровневых операций с памятью, то он осуществляется с использованием языка ассемблера и С/C++, что также накладывает определенные ограничения на реализацию замещающих функций – они обычно также реализованы на С/C++ (реже на ассемблере).

        Метод сплайсинга для перехвата API-функций в Windows широко описан в Интернете и в различных литературных источниках. Простота указанного перехвата определяется следующими факторами:
        1. целевая функция является статической – она сразу присутствует в памяти загруженного модуля;
        2. адрес целевой функции легко определить (через таблицу экспорта модуля или функцию GetProcAddress).

        Реализация замещающих функций на C/C++ при перехвате API-функций является оптимальным вариантом, поскольку Windows API реализовано, как известно, на языке C, и замещающие функции могут оперировать теми же понятиями, что и заменяемые.
        Читать дальше →
      • Разработка первой игры [на Unity3D]

          Когда-то я пошел на ПОВТ (можете вставить свою специальность в IT) для того чтобы узнать как писать игры. Хотя обучение и было несколько отдалено от интересующей тематики, оно принесло фундаментальные знания, без которых было бы очень тяжело. Дальнейшая после выпуска работа в нескольких компаниях только затягивала в энтерпрайз, отдаляя от геймдева. Но, время от времени, покупая новую игру, или наблюдая за разработкой очередного тайтла, возникает очень навязчивая идея — «Хочу этим заниматься!».

          Первые попытки обычно ничем хорошим не заканчиваются — множество мини прототипов так и остаются на самой ранней стадии, или укладываются «в стол». Это не плохой этап и от него никуда не деться. Со временем, желание завершить что-либо станет настолько навязчивым, что вы сможете это сделать.

          За последний проект я взялся очень крепко и довел до стадии релиза.

          В данной статье хотелось пройти по базовым этапам создания новой игры, с изрядной долей субъективного мнения. Я не буду углубляться в детали реализации и код — больше хотелось поделиться своим опытом и помочь тем, кто вынашивает свои идеи, но не предпринимает дальнейших шагов. Если вы готовы, то
          Добро пожаловать!
        • Короткая шпаргалка по блокировкам при чтении и изменении данных в зависимости от уровня изоляции транзакции в MSSQL

            Read Uncommitted

            • если в одной транзакции поменять данные — селект этих данных (в другой транзакции или без транзакции) не будут ждать окончания первой транзакции и вернут записанные данные незакомиченных транзакций
            • если в одной транзакции считать данные — апдейты этих данных в другой транзакции не будут ждать окончания первой транзакции
            • шаред локи не используются. Что аналогично установке NOLOCK хинта во все селекты в Read Commited
            • эксклюзивные локировки устанавливаются в процессе выполнения стейтмента и снимаются по окончанию транзакции


            Read Committed + read_committed_snapshot off

            (alter database xxx set read_committed_snapshot off)

            • если в одной транзакции поменять данные — селект этих данных (в другой транзакции или без транзакции) будут ждать окончания первой транзакции. Селект с NOLOCK хинтом вернёт изменённые, но не закомиченные данные.
            • если в одной транзакции считать данные — апдейты этих данных в другой транзакции не будут ждать окончания первой транзакции
            • шаред локировки устанавливаются в процессе работы стейтмента и снимаются по окончанию стейтмента
            • эксклюзивные локировки устанавливаются в процессе выполнения стейтмента и снимаются по окончанию транзакции


            Дальше
          • SQL Server 2016 Stretch Database

            • Tutorial


            Первого июня состоялся релиз SQL Server 2016, который привнес в привычную разработку большое число нововведений, среди которых уже давно анонсированную технологию Stretch Database, позволяющую динамически переносить «горячие» и «холодные» данные из SQL Server в Azure.

            С точки зрения маркетинга, Stretch Database очень хорошо распиарили. Приводили разумные аргументы, что по мере накопления в базе исторических данных возрастает сложность и стоимость её эксплуатации. И предлагали разумное решение — автоматический перенос архивных данных по мере устаревания в «облако». Честно признаюсь, идея мне понравилась.

            Начиная с SQL Server 2016 RC0 я начал тестировать технологию Stretch Database на двух проектах, которые помогаю развивать. Первый — это трекер рабочего времени для которого характерна OLTP нагрузка, второй — внутренний проект с DW нагрузкой.
            Подробнее
          • Создаем новую OS. Действительно новую, реально операционную, и правда – систему


              О создании новой операционной системы в последнее время говорят немало, особенно в России. В сумме размер всех публикаций по данной теме наверняка превышает размеры исходного кода любой операционной системы. Так что остается только одна проблема – от этих разговоров никаких новых OS не появляется. Всё, что предъявляется публике (и на что тратятся бюджетные деньги), на поверку оказывается кастомизированными сборками OS семейства Linux, а значит, не содержит ничего принципиально нового. Но, если о чем-то не говорят, это не значит, что его не существует.
              В этой статье – проект принципиально новой OS, созданный в нерабочее время одним из ведущих сотрудников (Principal Engineer) российского подразделения Intel.
              Читать дальше →
            • Введение в Roslyn. Использование для разработки инструментов статического анализа


                Roslyn является платформой, предоставляющей разработчику различные мощные средства для разбора и анализа кода. Но наличия таких средств недостаточно, нужно понимать, что и для чего необходимо использовать. Данная статья несёт цель ответить на подобные вопросы. Помимо этого, будет рассказано об особенностях разработки статических анализаторов, использующих Roslyn API.
                Читать дальше →
              • Рудольф Сворень — человек легенда (автор книги «Электроника шаг за шагом»). Часть 2

                  "Knowledge is power" — известная фраза («Знание — сила») не менее значима и в наши дни.

                  Знание определяет профессионализм и ценность сотрудника, успешность компании, уровень развития государства и в итоге возможности всего человечества.

                  Учителя, книги — это главная сила знаний, но и их успешность зависит от выбранной стратегии и от самого стиля объяснения учебного материала.

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

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


                  «Книга редкая и отличная по содержанию и манере изложения. Рудольф Сворень вне конкуренции. Замечательные рисунки Фролова дополняют текст и увлекают еще больше. Сын подрастёт, обязательно распечатаю для него. Жаль, теперь таких книг не делают в принципе»

                  Примерно так же оценивают то, что сделал Рудольф Анатольевич Сворень, который более 40 лет был редактором и автором в журнале «Наука и жизнь».

                  «С удовольствием читал публикации Свореня в „Науке и жизни“ на протяжении многих-многих лет. Как-то он чувствовал грань между „простотой изложения“ и „примитивностью изложения“. Даже будучи уже вполне „образованным“, было интересно взглянуть на давно известную вещь как-бы со стороны, глазами пацана. И понимаешь, что если бы эта статья попалась тебе в отрочестве, то ты бы понял всё, о чем в ней говорится!»

                  К сожалению, очень мало информации об этом замечательном человеке, поэтому мы хотели бы заполнить этот пробел — публикацией воспоминаний от Рудольфа Анатольевича (первая часть). И так же мы планируем организовать переиздание классической книги «Электроника шаг за шагом» (об этом в конце статьи).

                  Вторая часть воспоминаний Рудольфа Анатольевича Свореня и его планы (публикуется впервые):


                  Мой переход в редакцию [журнала «Радио»] совпал по времени с невиданно быстрым прогрессом радиоэлектроники – появились и совершили переворот в схемотехнике серийные транзисторы, а вскоре их высокочастотные и достаточно мощные типы. Широко осваивались сантиметровые и дециметровые диапазоны. Были созданы новые технологии производства транзисторов, а затем и интегральных схем – достаточно вспомнить, что уже несколько лет выпускаются размером с почтовую марку интегральные схемы, в каждой из которых до трех миллиардов (!!!) сложным образом точно соединенных деталей. А ведь для того, чтобы получился миллиард песчинок, нужно собрать 6 тысяч мешков песка. Отметим, что вся эта новейшая техника выпускалась, как говорится, без прикосновения человеческой руки – её делали и проверяли автоматы.
                  Читать дальше →