• Интерпретаторы байт-кодов своими руками


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


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


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

      Читать дальше →
    • Видео с камеры наблюдения на сайте бесплатно и без смс

      • Tutorial
      Появилась необходимость показывать видео с камеры на сайте в режиме онлайн. Виделось несколько вариантов (дополню вариантами из комментов, если будут):

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

      Этот вариант рассмотрим ниже. Т.к. "flash умер" или "flash вот-вот умрет", вариант с размещением flash плейера на сайте не рассматривался. Тернистый путь поисков решений в интернетах не привел к готовому решению. Пришлось изобрести велосипед.

      Подробнее изобретения под катом.
      Читать дальше →
    • Вышел Riot.js 3.0

        image22 ноября года сиего вышло обновление Riot.js — минималистичной библиотеки для создания веб-интерфейсов. Как пишут её авторы на главной странице своего сайта, Riot.js — это «Simple and elegant component-based UI library». И она действительно очень простая и элегантная.

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

        Для меня программирование и API различных популярных библиотек всегда было чем-то похожим на математику. На основе чего работает вся математика? На основе чистых и минималистичных формул, доведённых до совершенства. За время существования этой науки человечество смогло довести различные сложнейшие идеи до коротких и чистых выражений. И примерно тем же самым занимаются и хорошие библиотеки и фреймворки в мире программирования. Они предоставляют инженерам ПО простой и понятный API для решения проблем. Все мы знаем jQuery с его короткими и лаконичными методами для работы в браузере и её девиз "write less, do more". Или, скажем, многие знают о такой замечательной библиотеке, как Sugar.js для добавления разумной порции сахарка вашим глобальным объектам JavaScript. И Riot.js — в точности об этом же, только на тему веб-компонентов с учётом всех последних тенденций в эволюции веб-технологий.
        Читать дальше →
      • Аспекты HTML & CSS

        В данном материале собраны аспекты, которые полезно знать и помнить html developer-у. Часть вопросов посвящена IE — сам отказался от поддержки IE6, однако знать особенности его поведения не будет лишним.
        Читать дальше →
      • Умный термостат ITEAD TH10. Что внутри?



          Китайский производитель DIY-девайсов ITEAD в последнее время активно развивает свою линейку устройств интернета вещей на базе ESP8266. Эта продукция разительно отличается от всех конкурентов двумя важными параметрами. Низкой стоимостью и возможностью прошивки в них своей логики. Эдакое arduino для реального применения.

          Сегодня я расковыряю разберу одну из новинок — ITEAD TH10, Wi-Fi-термостат с нагрузочной способностью 10А. Он попадает в руки покупателя вот в такой симпатичной коробочке, а в ней…
          Читать дальше →
        • «Address Already in Use» или как избежать проблем при завершении TCP соединения

          • Перевод
          • Tutorial
          Корректное отключение

          Для корректного завершения сетевого подключения обе стороны должны послать пакеты с сигналом о завершении (FIN), которые указывают что стороны не будут больше отсылать данные, также каждая сторона должна подтвердить (ACK) получение сигнала о завершении сетевого обмена данными. FIN инициируется когда приложение вызывает метод close(), shutdown() или exit(). После завершения работы метода close() ядро переходит в режим ожидания подтверждения от второй стороны приема сигнала о завершении. Это делает возможной ситуацию когда процесс инициировавший отключение будет завершен прежде чем ядро освободит рессурсы связанные с подключением, и снова разрешит использовать порт для связывания с другим процесоом (в этом случае, при попытке использования порта мы получим исключение AddressAlreadyInUse).


          Читать дальше →
          • +25
          • 23,8k
          • 3
        • Exploring JavaScript Symbols. Использование символов

          • Tutorial
          Это вторая статья из серии про символы и их использование в JavaScript. Предыдущая часть: «Symbol — новый тип данных в JavaScript».

          С появлением символов объект Object был расширен одним методом, который позволяет получить все символы объекта:

          	var role = Symbol('role');
          	var score = Symbol('score');
          	var id = 100;
          	var name = 'Moderator';
          
          	var user = { id: id, name: name };
          
          	user[role] = 'admin';
          	user[score] = 50000;
          
          	Object.getOwnPropertySymbols( user ); // [Symbol(role), Symbol(score)]
          

          Наличие этого метода лишает нас возможности создавать по-настоящему приватные свойства.
          Читать дальше →
          • +20
          • 11,4k
          • 5
        • Многофункциональный датчик температуры/влажности на ESP8266 или еще один шаг к «интернету вещей»

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

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

          image
          Читать дальше →
        • ESP8266: Революция в мире интернета вещей



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

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

            В 2014 году сразу несколько производителей объявили о выпуске соответствующих наборов микросхем. Сегодня речь пойдет о чипе ESP8266 китайской компании Espressif. Модулями UART-WIFI на базе этого чипа уже наводнен весь Китай и стоят они всего от $4,5 (с бесплатной международной доставкой).
            Читать дальше →
          • Конвертируем svg to png

            • Tutorial
            Иногда появляется необходимость сохранить svg в png средствами браузера. К сожалению, браузер не имеет волшебного api, который позволил бы это сделать без различных хаков. Что же делать, если все таки хочется добиться желаемого?
            Читать дальше →
          • Концепция Tibbo AggreGate – платформы для Интернета вещей

              Развитие Интернет быстро достигает уровня, когда он «просто есть». Нам все чаще не приходится задумываться, как именно мы сейчас подключены к сети, кто наш оператор связи, и, тем более, как подключение организовано технически. Повсеместное проникновение беспроводных сетей и постепенное распространение IPv6 позволяет тысячам простых устройств и датчиков беспрерывно общаться друг с другом и отправлять свои данные «в облако». Быстрое усложнение инфраструктуры привело к замене термина «Машина-к-машине» (Machine-to-Machine, M2M) на более актуальный термин «Интернет вещей» (Internet of things, IoT).



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

              Читать дальше →
            • Никогда не «не делай» того, о чем пожалеешь или умный дом с CCU.IO

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

                Хочу представить программную платформу автоматизации для дома на базе Node.js, которую можно скачать со всеми исходниками и установить прямо сейчас практически одним кликом (Windows) или одной командой (Linux/Debian).


                Подробности
              • Очередной умный дом, в трех частях. Часть вторая, программно-серверная. +Бонус

                  В первой части я рассказал про железную часть. Теперь настал черед рассказать о софте.

                  Итак, в начале было слово был четырехканальный выключатель света, с подключенными к нему разными датчиками. Физический интерфейс — RS485. Поверх RS485 реализован упрощенный вариант MODBUS ASCII. Реализованы только функции 03 и 06, в отличие от стандарта адресация байтовых регистров начинается с нуля. Плюс к тому добавлена поддержка широковещательных посылок, ответ на которые не выдается. Ими устанавливается время, либо отключаются все выходы. Через переходник RS485 — RS232 контроллер был подключен к COM порту.
                  Читать дальше →
                • Запускаем сторонний код в песочнице

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

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

                    В статье пойдет речь об атаках, которые могут совершать злоумышленники и о методах безопасного выполнения стороннего кода.
                    Читать дальше →
                  • Ресайз картинок в браузере. Все очень плохо

                      Если вы когда-нибудь сталкивались с задачей ресайза картинок в браузере, то вы наверное знаете, что это очень просто. В любом современном браузере есть такой элемент, как холст (<canvas>). На него можно нанести изображение нужных размеров. Пять строчек кода и картинка готова:

                      function resize(img, w, h) {
                        var canvas = document.createElement('canvas');
                        canvas.width = w;
                        canvas.height = h;
                        canvas.getContext('2d').drawImage(img, 0, 0, w, h);
                        return canvas;
                      }
                      

                      Из холста картинку можно сохранить в JPEG и, например, отправить на сервер. Можно было на этом закончить статью, но сперва давайте взглянем на результат. Если вы поставите рядом такой холст и обычный элемент <img>, в который загружена та же картинка (исходник, 4 Мб), то вы увидите разницу.

                      img
                      Читать дальше →