Как стать автором
Обновить
3

Lua *

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

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

Хватит качать и хранить нули

Время на прочтение13 мин
Количество просмотров15K

Скачиваемый файл заполнен нулями


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


Нуль-блоки не надо хранить на диске. Благодаря sparse флагу, операционная система просто помечает этот участок файла как заполненный нулями и не хранит эти нули на диске.


Свойства файла заполненного нулями

Файл размером 16MB занимает на диске 4KB


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


Откуда берутся нуль-блоки в файле


  1. Раздающий не дождался полного скачивания и проверки файла и выложил неполный(partial) файл.
  2. Результат повреждения сектора диска раздающего.

Это те варианты, которые пришли в голову.


Почему эти файлы продолжают распространяться


  1. Видео/аудио файл может иметь нуль-блок в середине и спокойно воспроизводится, просто перескакивая то место, где попался нуль-блок. Тем самым он может казаться целым.
  2. Образ диска также может иметь нуль-блоки в разных местах и это проявит себя только при попытке чтения файлов из этих блоков.
Читать дальше →
Всего голосов 30: ↑22 и ↓8+14
Комментарии90

Задай вопрос автору языка Lua

Время на прочтение1 мин
Количество просмотров5.9K


В это воскресенье в офисе Mail.ru Group прошла конференция Lua in Moscow 2019. Приглашённой звездой был Роберто Иерусалимский, один из создателей языка Lua, ведущий архитектор и автор обучающих материалов. Под его чутким руководством язык развивается с далёкого 1993 года, так что Роберто можно назвать одним из столпов Lua-сообщества. Он уже трижды выступал у нас: Lua Workshop 2014, Митап в Mail.ru 2016, Lua in Moscow 2017.

И в этом году Роберто не улетел домой сразу после конференции, а придёт к нам в гости 6 марта по приглашению команды Tarantool. Мы хотим задать Роберто волнующие нас вопросы и приглашаем «виртуально» к нам присоединиться. Пишите в комментариях, что вы хотели бы спросить у патриарха о текущем состоянии Lua и о перспективах развития языка. Самые интересные вопросы мы включим в интервью.

А чтобы не было дублирований, под катом вы найдёте список вопросов, которые мы подготовили от себя.
Спрашиваем Роберто Иерусалимского
Всего голосов 41: ↑39 и ↓2+37
Комментарии42

Программа конференции Lua in Moscow 2019

Время на прочтение4 мин
Количество просмотров2.5K


Как мы сообщали в предыдущем анонсе, 3 марта (воскресенье) в офисе Mail.ru Group пройдёт третья международная конференция Lua in Moscow 2019.
Программа
Всего голосов 24: ↑24 и ↓0+24
Комментарии8

Конференция Lua in Moscow 2019

Время на прочтение1 мин
Количество просмотров3.6K


В первое воскресенье марта в офисе Mail.ru Group пройдёт третья международная конференция Lua in Moscow 2019. Вас ждут выступления автора языка Роберто Иерусалимского и лучших зарубежных и отечественных экспертов по Lua и LuaJIT.

Lua — уникальный язык программирования, который используется далеко не только в индустрии компьютерных игр, но и как встроенный язык расширений в таких инструментах web-программирования, как Redis, nginx, Tarantool, OpenResty. Lua также применяется для анализа больших данных и научных вычислений, используется во многих роутерах, принтерах и других подобных устройствах.

Даже если вы ещё не пишете на Lua, приходите! Наверняка эта конференция откроет вам глаза на что-то новое и интересное!
Читать дальше →
Всего голосов 52: ↑52 и ↓0+52
Комментарии4

Истории

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

Время на прочтение14 мин
Количество просмотров8.6K


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

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

Время на прочтение7 мин
Количество просмотров13K

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


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


https://github.com/pavel212/cpu

Читать дальше →
Всего голосов 24: ↑23 и ↓1+22
Комментарии14

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

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

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

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

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

Время на прочтение4 мин
Количество просмотров7.1K

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


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


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


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


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

Читать дальше →
Всего голосов 18: ↑17 и ↓1+16
Комментарии10

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

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


Читать дальше →
Всего голосов 53: ↑46 и ↓7+39
Комментарии75

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

Время на прочтение7 мин
Количество просмотров6.6K

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


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


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

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

Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии42

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

Время на прочтение5 мин
Количество просмотров20K


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


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
Читать дальше →
Всего голосов 27: ↑22 и ↓5+17
Комментарии21

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

Время на прочтение11 мин
Количество просмотров9.9K

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

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

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

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

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

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

Время на прочтение4 мин
Количество просмотров1.8K
Всем привет. Мало для кого будет секретом, что использование json в ваших проектах на Corona SDK может сделать некоторые вещи довольно удобными. Я обнаружил одну интересную аномалию при работе с библиотекой, которая как показала практика, вовсе не является ошибкой, а скорее особенностью о которой стоит знать и быть к ней готовым. Рассмотрим все подробно.
Читать дальше →
Всего голосов 9: ↑8 и ↓1+7
Комментарии7

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

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн

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

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

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

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

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

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


Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии1

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

Время на прочтение8 мин
Количество просмотров4.6K

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


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


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


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


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

Читать дальше →
Всего голосов 21: ↑19 и ↓2+17
Комментарии8

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

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

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

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

Программа и спикеры – ниже.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии0

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

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

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

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

  • Введение и теория.
  • Как использовать эти технологии.
  • Оценка производительности.
  • Полезные ссылки.
Читать дальше →
Всего голосов 36: ↑31 и ↓5+26
Комментарии7

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

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

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

Время на прочтение8 мин
Количество просмотров3.8K

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


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


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

Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии2
Изменить настройки темы

Вклад авторов