Обновить
20.95

Lua *

Скриптовый язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

VShard — горизонтальное масштабирование в Tarantool

Время на прочтение14 мин
Охват и читатели11K


Меня зовут Владислав, я участвую в разработке Tarantool — СУБД и сервера приложений в одном флаконе. И сегодня расскажу вам, как мы реализовали горизонтальное масштабирование в Tarantool при помощи модуля VShard.
Читать дальше →

Ещё один простой процессор на verilog

Время на прочтение7 мин
Охват и читатели15K

В статье описан очередной примитивный процессор и ассемблер для него.
Вместо обычных RISC/СISC, процессор не обладает набором инструкций как таковым, есть только единственная инструкция копирования.


Подобные процессоры есть у Maxim серия MAXQ.


https://github.com/pavel212/cpu

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

История о том, что не надо делать во время разработки

Время на прочтение6 мин
Охват и читатели11K
Пролог: Для начала я расскажу о проекте, чтобы были представления о том как мы работали над проектом и для воссоздания той боли, которую мы чувствовали.

Я как разработчик вступил в проект в 2015-2016 точно не помню, но он работал 2-3 года ранее. Проект был очень популярен в своей сфере, а именно игровых серверов. Как странно не звучало, но проекты по игровым серверам ведутся и по сей день, недавно вакансии видел и чуток поработал в одной команде. Поскольку игровые сервера строятся на уже созданной игре, следовательно для разработки используется скриптовый язык который встроен в движок игры.

Мы разрабатываем почти с нуля проект на Garry’s Mod (Gmod), важно подметить, что на момент написания статьи Гарри создает уже новый проект S&Box на движке Unreal Engine. Мы же до сих пор сидим на Source.
Который вообще не подходит для нашей тематики сервера.
image
Read more →

Релиз XMPP (Jabber) сервера Prosody 0.11.0

Время на прочтение4 мин
Охват и читатели7.5K

Представлен первый релиз 0.11-ой стабильной ветки XMPP сервера Prosody с исправлениями более чем 2000 ошибок.


Основные изменения


Наиболее значительные улучшения коснулись модулей MUC и pubsub.


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


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

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

Встраиваемые языки: почему Lua?

Время на прочтение8 мин
Охват и читатели42K
Этот материал продолжает серию публикаций, основанных на докладах, которые мы сделали на конференции Games Gathering 2017 в декабре прошлого года. В одном из докладов была затронута тема выбора встраиваемого скриптового языка.


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

«Lock-free, or not lock-free, that is the question» или «Здоровый сон хуже горькой редьки»

Время на прочтение7 мин
Охват и читатели7.7K

На написание данной статьи меня подвигли комментарии к статье "Как правильно и неправильно спать".


Речь в данной статье пойдёт о разработке многопоточных приложений, применимости lock-free к некоторым кейсам возникшим в процессе работы над LAppS, о функции nanosleep и насилии над планировщиком задач.


NB: Всё обсуждаемое касается разработки на C++ под Linux, но может быть применимо ко всем POSIX.1-2008 совместимым системaм (с оглядкой на конкретную реализацию).

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

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

DNS over TLS — Шифруем наши DNS запросы с помощью Stunnel и Lua

Время на прочтение5 мин
Охват и читатели22K


источник изображения


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


То есть делаем туда:


  1. берём пакет из UDP
  2. добавляем к нему в начале пару байт в которых указан размер этого пакета
  3. отправляем в TCP канал

И в обратную сторону:


  1. читаем из TCP пару байт тем самым получаем размер пакета
  2. читаем пакет из TCP
  3. отправляем его получателю по UDP
Читать дальше →

Генерация трафика в юзерспейсе

Время на прочтение11 мин
Охват и читатели12K

Генерация трафика посредством MoonGen + DPDK + Lua в представлении художника

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

В данном материале мы раскроем некоторые методы генерации трафика, используемые в Qrator Labs.

ПРЕДУПРЕЖДЕНИЕ

Мы настойчиво рекомендуем читателю не пытаться использовать упомянутые инструменты для атак на объекты реальной инфраструктуры. Организация DoS-атак преследуется по закону и может вести к суровому наказанию. Qrator Labs проводит все тесты в изолированном лабораторном окружении.
Читать дальше →

Corona SDK аномалия библиотеки json

Время на прочтение4 мин
Охват и читатели1.9K
Всем привет. Мало для кого будет секретом, что использование json в ваших проектах на Corona SDK может сделать некоторые вещи довольно удобными. Я обнаружил одну интересную аномалию при работе с библиотекой, которая как показала практика, вовсе не является ошибкой, а скорее особенностью о которой стоит знать и быть к ней готовым. Рассмотрим все подробно.
Читать дальше →

Corona SDK точный таймер

Время на прочтение3 мин
Охват и читатели2.6K
Всем привет. В этой краткой статье я расскажу как сделать в вашем приложении на Corona SDK таймер с приемлемым показателем точности отсчета. Так же рассмотрим в чем заключаются проблемы стандартного таймера.

В статье будет решаться следующая задача: Сделать приложение которое будет показывать время прошедшее с момента включения приложения с его обновлением 1 раз в секунду.
Читать дальше →

Прыжок в облако. Строим бюджетное решение для интернета вещей на NodeMCU + Azure IoT Hub

Время на прочтение14 мин
Охват и читатели12K

Самое популярное назначение IoT устройств это сбор телеметрии. На сегодняшний день цены на облачные IoT сервисы снизились настолько, что позволить себе их использовать может и обычный рядовой пользователь. Сегодня расскажем о том, как отправить данные в облако с платы NodeMCU используя язык Lua.


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

LAppS: Пол миллиона 1KB-WebSocket сообщений в секунду с TLS на одном CPU

Время на прочтение8 мин
Охват и читатели4.9K

Для тех кто не в курсе: LAppS — Lua Application Server, это почти как nginx или apache, но только для WebSocket протокола, вместо HTTP.


HTTP в нём поддерживается только на уровне Upgrade запроса.


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


Самое главное, LAppS по производительности WebSocket стека, превзошёл библиотеку uWebSockets, которая позиционируется как самая быстрая WebSocket имплементация.


Заинтересованных прошу под кат.

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

Митап о написании приложений на Lua с помощью движка Corona

Время на прочтение1 мин
Охват и читатели1.9K
Привет, геймдевы и не только!

Это наш первый пост на Хабре и сразу с приглашением. Завтра, 24 августа вместе с Lua in Moscow организуем митап для разработчиков игр на Lua с использованием движка Corona.

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

Программа и спикеры – ниже.
Читать дальше →

Ближайшие события

Уменьшаем количество слоёв архитектуры с 5 до 2

Время на прочтение4 мин
Охват и читатели12K

Работая над несколькими open-source проектами, в один прекрасный день я решил упростить себе жизнь и разработал Upstream-модуль для nginx, который помог мне убрать громоздкие слои многослойной архитектуры. Это был забавный опыт, которым я хочу поделиться в этой статье. Мой код лежит в открытом доступе тут: github.com/tarantool/nginx_upstream_module. Его можно поднять с нуля или скачать Docker-образ по этой ссылке: hub.docker.com/r/tarantool/tarantool-nginx.

На повестке дня:

  • Введение и теория.
  • Как использовать эти технологии.
  • Оценка производительности.
  • Полезные ссылки.
Читать дальше →

Нейробугу́рт. Как мы научили нейросеть придумывать мемы на год раньше Стэнфорда

Время на прочтение9 мин
Охват и читатели13K
К написанию статьи меня подтолкнула вот эта новость (+исследование) про изобретение генератора мемов учеными из Стэнфордского университета. В своей статье я попытаюсь показать, что вам не нужно быть ученым из Стэнфорда, чтобы делать с нейросетями интересные вещи. В статье я описываю, как в 2017 году мы обучили нейронную сеть на корпусе из примерно 30 000 текстов и заставили ее генерировать новые интернет-мемы и мемы (коммуникационные знаки) в социологическом смысле слова. Описан использованный нами алгоритм машинного обучения, технические и административные трудности, с которыми мы столкнулись.
Читать дальше →

Corona Native для Android — использование произвольного Java кода в игре написанной на Corona

Время на прочтение8 мин
Охват и читатели4.1K

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


В статье пойдёт речь об использовании Java в проектах Corona для android


Для понимания происходящего в статье требуются базовые знания Java, Lua и движка Corona

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

Когда вызовы функций через внешний интерфейс быстрее нативных вызовов C

Время на прочтение6 мин
Охват и читатели12K
Дополнено: хорошая дискуссия на Hacker News

Дэвид Ю на GitHub разработал интересный тест производительности для вызовов функций через разные внешние интерфейсы (Foreign Function Interfaces, FFI).

Он создал файл общего объекта (.so) с одной простой функцией C. Затем написал код для многократного вызова этой функции через каждый FFI с измерением времени.

Для C «FFI» он использовал стандартную динамическую компоновку, а не dlopen(). Это различие очень важно, так как действительно сказывается на результатах теста. Можно спорить, насколько честно такое сравнение с фактическим FFI, но всё равно его интересно измерить.

Самый удивительный результат бенчмарка — то, что FFI от LuaJIT существенно быстрее, чем C. Он примерно на 25% быстрее, чем нативный вызов C для функции общего объекта. Как смог слабо и динамически типизированный скриптовый язык обогнать в бенчмарке C? Точен ли результат?
Читать дальше →

Приложения для Tarantool. Часть 3. Тестирование и запуск

Время на прочтение5 мин
Охват и читатели8.7K

Приложение для Tarantool — это, по сути, набор хранимых процедур, используемых как API. Данные обрабатываются на стороне хранилища, что позволяет значительно повысить производительность. Однако поддержка хранимых процедур может превратиться в кошмар.


Может. Но не сегодня.


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


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

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

Время на прочтение4 мин
Охват и читатели2.6K


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


Если интересно то прошу под кат.

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

LAppS сервер приложений для микросервисной архитектуры

Время на прочтение10 мин
Охват и читатели5.1K

image


Предыстория


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

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