
Lua *
Скриптовый язык программирования
Ещё один простой процессор на verilog
В статье описан очередной примитивный процессор и ассемблер для него.
Вместо обычных RISC/СISC, процессор не обладает набором инструкций как таковым, есть только единственная инструкция копирования.
Подобные процессоры есть у Maxim серия MAXQ.
История о том, что не надо делать во время разработки
Я как разработчик вступил в проект в 2015-2016 точно не помню, но он работал 2-3 года ранее. Проект был очень популярен в своей сфере, а именно игровых серверов. Как странно не звучало, но проекты по игровым серверам ведутся и по сей день, недавно вакансии видел и чуток поработал в одной команде. Поскольку игровые сервера строятся на уже созданной игре, следовательно для разработки используется скриптовый язык который встроен в движок игры.
Мы разрабатываем почти с нуля проект на Garry’s Mod (Gmod), важно подметить, что на момент написания статьи Гарри создает уже новый проект S&Box на движке Unreal Engine. Мы же до сих пор сидим на Source.
Который вообще не подходит для нашей тематики сервера.

Релиз XMPP (Jabber) сервера Prosody 0.11.0
Представлен первый релиз 0.11-ой стабильной ветки XMPP сервера Prosody с исправлениями более чем 2000 ошибок.
Основные изменения
Наиболее значительные улучшения коснулись модулей MUC и pubsub.
Вместе эти компоненты реализуют два из самых обширных расширений XEP стандарта XMPP, которые в настоящее время предоставляет протокол. Хотя предыдущие версии уже довольно давно поддерживали MUC и pubsub, оба они довольно сложны, и после первоначальной реализации стало понятно, что необходимо провести обновление и рефакторинг кода, чтобы увеличить покрытие требуемой XEP функциональности, улучшить структуру кода и масштабируемость решений.
Также было осуществлено много других изменений, улучшений, исправлений ошибок, и проведено работ над производительностью, которые вошли в этот выпуск.
Встраиваемые языки: почему Lua?

«Lock-free, or not lock-free, that is the question» или «Здоровый сон хуже горькой редьки»
На написание данной статьи меня подвигли комментарии к статье "Как правильно и неправильно спать".
Речь в данной статье пойдёт о разработке многопоточных приложений, применимости lock-free к некоторым кейсам возникшим в процессе работы над LAppS, о функции nanosleep и насилии над планировщиком задач.
NB: Всё обсуждаемое касается разработки на C++ под Linux, но может быть применимо ко всем POSIX.1-2008 совместимым системaм (с оглядкой на конкретную реализацию).Вобщем всё довольно сумбурно, надеюсь ход мысли в изложении будет понятен. Если интересно то прошу под кат.
DNS over TLS — Шифруем наши DNS запросы с помощью Stunnel и Lua
DNS (англ. Domain Name System — система доменных имён) — компьютерная распределённая система для получения информации о доменах.
TLS (англ. transport layer security — Протокол защиты транспортного уровня) — обеспечивает защищённую передачу данных между Интернет узлами.
После новости "Google Public DNS тихо включили поддержку DNS over TLS" я решил попробовать его. У меня есть Stunnel который создаст шифрованный TCP туннель. Но программы обычно общаются с DNS по UDP протоколу. Поэтому нам нужен прокси который будет пересылать UDP пакеты в TCP поток и обратно. Мы напишем его на Lua.
Вся разница между TCP и UDP DNS пакетами:
4.2.2. TCP usage
Messages sent over TCP connections use server port 53 (decimal). The message is prefixed with a two byte length field which gives the message length, excluding the two byte length field. This length field allows the low-level processing to assemble a complete message before beginning to parse it.
RFC1035: DOMAIN NAMES — IMPLEMENTATION AND SPECIFICATION
То есть делаем туда:
- берём пакет из UDP
- добавляем к нему в начале пару байт в которых указан размер этого пакета
- отправляем в TCP канал
И в обратную сторону:
- читаем из TCP пару байт тем самым получаем размер пакета
- читаем пакет из TCP
- отправляем его получателю по UDP
Генерация трафика в юзерспейсе

Генерация трафика посредством MoonGen + DPDK + Lua в представлении художника
Нейтрализация DDoS-атак в реальных условиях требует предварительных тестирования и проверки различных техник. Сетевое оборудование и ПО должно быть протестировано в искусственных условиях близких к реальным — с интенсивными потоками трафика, имитирующего атаки. Без таких экспериментов крайне затруднительно получить достоверную информацию о специфических особенностях и ограничениях, имеющихся у любого сложного инструмента.
В данном материале мы раскроем некоторые методы генерации трафика, используемые в Qrator Labs.
ПРЕДУПРЕЖДЕНИЕ
Мы настойчиво рекомендуем читателю не пытаться использовать упомянутые инструменты для атак на объекты реальной инфраструктуры. Организация DoS-атак преследуется по закону и может вести к суровому наказанию. Qrator Labs проводит все тесты в изолированном лабораторном окружении.
Corona SDK аномалия библиотеки json
Corona SDK точный таймер
В статье будет решаться следующая задача: Сделать приложение которое будет показывать время прошедшее с момента включения приложения с его обновлением 1 раз в секунду.
Прыжок в облако. Строим бюджетное решение для интернета вещей на NodeMCU + Azure IoT Hub
Самое популярное назначение IoT устройств это сбор телеметрии. На сегодняшний день цены на облачные IoT сервисы снизились настолько, что позволить себе их использовать может и обычный рядовой пользователь. Сегодня расскажем о том, как отправить данные в облако с платы NodeMCU используя язык Lua.

LAppS: Пол миллиона 1KB-WebSocket сообщений в секунду с TLS на одном CPU
Для тех кто не в курсе: LAppS — Lua Application Server, это почти как nginx или apache, но только для WebSocket протокола, вместо HTTP.
HTTP в нём поддерживается только на уровне Upgrade запроса.
LAppS изначально затачивался на высокую нагрузку и вертикальную масштабируемость, и сегодня достиг пика своих возможностей на моём железе (ну почти, можно и дальше оптимизировать, но это будет долгий и упорный труд).
Самое главное, LAppS по производительности WebSocket стека, превзошёл библиотеку uWebSockets, которая позиционируется как самая быстрая WebSocket имплементация.
Заинтересованных прошу под кат.
Митап о написании приложений на Lua с помощью движка Corona
Это наш первый пост на Хабре и сразу с приглашением. Завтра, 24 августа вместе с Lua in Moscow организуем митап для разработчиков игр на Lua с использованием движка Corona.

Мы хотим сделать этот митап полезным, поэтому перехваливать движок не планируем, даже наоборот. В программе три доклада от экспертов отрасли, основанные на личном опыте разработки, факапах и боли. В перерывах между выступлениями, конечно, будет пицца, кофе и нетворкинг. Если у вас накопились вопросы, советы и просто нет планов на вечер пятницы, заглядывайте.
Программа и спикеры – ниже.
Ближайшие события
Уменьшаем количество слоёв архитектуры с 5 до 2

Работая над несколькими open-source проектами, в один прекрасный день я решил упростить себе жизнь и разработал Upstream-модуль для nginx, который помог мне убрать громоздкие слои многослойной архитектуры. Это был забавный опыт, которым я хочу поделиться в этой статье. Мой код лежит в открытом доступе тут: github.com/tarantool/nginx_upstream_module. Его можно поднять с нуля или скачать Docker-образ по этой ссылке: hub.docker.com/r/tarantool/tarantool-nginx.
На повестке дня:
- Введение и теория.
- Как использовать эти технологии.
- Оценка производительности.
- Полезные ссылки.
Нейробугу́рт. Как мы научили нейросеть придумывать мемы на год раньше Стэнфорда
Corona Native для Android — использование произвольного Java кода в игре написанной на Corona
Игровой движок Corona позволяет создавать кроссплатформенные приложения и игры. Но иногда предоставляемого им API бывает недостаточно. Для таких случаев есть Corona Native, позволяющий расширять функциональность с использованием родного кода для каждой платформы.
В статье пойдёт речь об использовании Java в проектах Corona для android
Для понимания происходящего в статье требуются базовые знания Java, Lua и движка Corona
Когда вызовы функций через внешний интерфейс быстрее нативных вызовов C
Дэвид Ю на GitHub разработал интересный тест производительности для вызовов функций через разные внешние интерфейсы (Foreign Function Interfaces, FFI).
Он создал файл общего объекта (
.so) с одной простой функцией C. Затем написал код для многократного вызова этой функции через каждый FFI с измерением времени.Для C «FFI» он использовал стандартную динамическую компоновку, а не
dlopen(). Это различие очень важно, так как действительно сказывается на результатах теста. Можно спорить, насколько честно такое сравнение с фактическим FFI, но всё равно его интересно измерить.Самый удивительный результат бенчмарка — то, что FFI от LuaJIT существенно быстрее, чем C. Он примерно на 25% быстрее, чем нативный вызов C для функции общего объекта. Как смог слабо и динамически типизированный скриптовый язык обогнать в бенчмарке C? Точен ли результат?
Приложения для Tarantool. Часть 3. Тестирование и запуск
Приложение для Tarantool — это, по сути, набор хранимых процедур, используемых как API. Данные обрабатываются на стороне хранилища, что позволяет значительно повысить производительность. Однако поддержка хранимых процедур может превратиться в кошмар.
Может. Но не сегодня.
Сегодня мы рассмотрим вопросы обеспечения качества приложения. В частности, поговорим о тестировании, разберемся, как запуститься в production, как использовать коннекторы, а также поговорим о тонкостях миграции схемы данных.

«Лаппландцы» и HTTP

Это не про настоящих лапландцев (с одной 'п'). Это про сервер приложений для микросервисов LAppS.
Если интересно то прошу под кат.
LAppS сервер приложений для микросервисной архитектуры

Предыстория
20-го декабря прошлого года я ушёл в отпуск, на целых 2 недели. Чем заняться в отпуске? Правильно, — кодом. Кодом, которым некогда заниматься в рабочее время. Последние несколько лет мне кодить приходилось очень мало. Руки стосковались. Какой код пишут в отпуске? Не знаю как вы, а я пишу велосипеды. Зачем? Причин может быть много, но основная, — мне интересно. Я люблю C++ и Lua. Я ещё и bash и awk люблю. Не закидывайте камнями, это личное, так получилось. JavaScript я не очень люблю (хотя последние 2 года если что-то и кодил то на JS), и это тоже личное.

