• Классы в lua, или избавляемся от двоеточия

      Как всем известно, в lua нет как таковых классов и объектов. Однако есть метатаблицы и синтаксический сахар.
      С помощью указанных механизмов достаточно просто реализовать подобие классов.
      В итоге и получается нечто такое:
      Самый простой класс
      local MyClass = {} -- the table representing the class, which will double as the metatable for the instances
      MyClass.__index = MyClass -- failed table lookups on the instances should fallback to the class table, to get methods
      
      -- syntax equivalent to "MyClass.new = function..."
      function MyClass.new(init)
        local self = setmetatable({}, MyClass)
        self.value = init
        return self
      end
      
      function MyClass.set_value(self, newval)
        self.value = newval
      end
      
      function MyClass.get_value(self)
        return self.value
      end
      
      local i = MyClass.new(5)
      -- tbl:name(arg) is a shortcut for tbl.name(tbl, arg), except tbl is evaluated only once
      print(i:get_value()) --> 5
      i:set_value(6)
      print(i:get_value()) --> 6
      

      (взято с lua-users.org/wiki/ObjectOrientationTutorial)

      Всё это конечно хорошо, даже при определённой сноровке можно реализовать наследование…
      Но где public и private члены класса? Дефакто в этом примере они все public. Да ещё и надо помнить, где использовать двоеточие:
      MyClass:myFunc()
      

      а где просто одну точку:
      MyClass.myOtherFunc()
      

      А статические члены класса? Неужели придётся отказываться?
      Вот я и не захотел отказываться, и начал колхозить...
    • MySQL On air. Мониторим SQL запросы

      • Tutorial
      image
      Разбираясь как работает та или иная CMS приходится использовать различные инструменты, облегчающие работу.
      Наиболее интересная тема — это работа с баз(ой|ами) данных. Естественно для изучения запросов и результатов запросов нужно использовать что-то универсальное. Что-то, что будет работать стабильно как с известным движком, так и с самописной системой.
      Предположим у вас оказалась система управления контентом и вам необходимо посмотреть как реализовано добавление новых пользователей или смена паролей.

      Большинство инструментов позволяющих мониторить работу с БД являются платными [раз, два]. Я хотел что-то более легкое и удобное, поэтому выбрал mysql-proxy. Хотя возможности утилиты гораздо шире чем мне требуется, я опишу лишь основное. Работает как под Windows, так и под Unix системами.
      Как я это использую?
    • Terevaka — фреймворк высокого уровня на Lua для мобильных платформ

        Дорогие друзья, сегодня я расскажу вам о фреймворке высокого уровня на Lua для мобильных платформ собственной разработки. Как вы уже, наверное, догадались из названия, этот фреймворк использует другой низкоуровней фреймворк для отрисовки графики и для взаимодействия с системой. В качество него выступает MOAI. Для минимального ознакомления с ним, я рекомендую прочитать мою предыдущую статью habrahabr.ru/post/176765

        Прежде всего, какие задачи должен был решить новый фремворк?
        Во-первых, проблемы с фрагментацией экранов. А во-вторых (та-дам), хотелось иметь какой-то, пусть и простейший, графический редактор интерфейсов. В третьих, фреймворк должен был определить архитектуру и файловую структуру приложения в целом. Хочу сказать, что кода получилось немного (менее 600 строк), поэтому, даже если фреймворк вам не подойдет, как есть, будет несложно разобраться с его работай и заточить его под свои нужды.
        Warning: фреймворк заточен под landscape приложения, поэтому если вам нужен портретный режим, то скорее всего придется потратить некоторое время на доработку.
        Читать дальше →
      • Учим язык, смотря сериалы: vlc + lua + stardict + wordnet + anki = l'amour

          Очень уж мне нравится смотреть сериалы, а еще я учу с их помощью языки. И если раньше я прилежно останавливал видео на непонятном месте, перематывал назад, включал субтитры и забивал незнакомые слова в Анки, то сейчас я делаю то же самое. Разве что лень заставила этот процесс автоматизировать, что привело к созданию расширения Say It Again для проигрывателя VLC со следующими особенностями:

          • Навигация по субтитрам (переход к предыдущей, следующей фразе) — клавиши y, u;
          • Сохранение слова, его транскрипции и перевода вместе с контекстом (см. скриншот) — клавиша i;
          • Функция «Еще раз»: переход к предыдущей фразе, показ субтитра и пауза — клавиша backspace;
          • Подключение любых словарей в формате Stardict (в сети лежат словари из Lingvo x3);
          • Экспорт в Anki или другую программу, понимающую файлы в формате csv;


          Say It Again screenshot


          Зачем все это нужно и как это работает?
        • Шаблоны с переменным количеством аргументов на примере обертки для Lua

          Понадобилось мне прикрутить Lua к проекту на C++. Писать обертки в ручную — лень (слишком много писать), готовые не подходили по тем или иным причинам. Решил написать свою. А потому задался вопросом, как максимально упростить интерфейс? От одной только мысли об этом в голову лезли жутчайшие конструкции из шаблонов. Так оно в последствии и оказалось, но гораздо проще, чем представлялось.

          В C++11 появились шаблоны с переменным числом аргументов, это позволяет писать шаблонные функции/классы так, как в C++03 было невозможно вовсе. Такие шаблоны сильно упрощают задачу.

          Первым делом понадобилось написать обертку над простейшими действиями с интерпретатором (можно было бы обойтись простыми вызовами к C API Lua, но держать в памяти кучу индексов различных значений в стеке мне не хочется. Поэтому я обернул их в несколько функций, которые помимо того, что избавляют от необходимости передавать в каждую функцию указатель на состояние интерпретатора, практически не требуют индексов, так как они имеют значения по умолчанию.

          В итоге хотелось увидеть интерфейс близкий к следующему:

          lua.export_function(some_function);
          

          Читать дальше →
          • +19
          • 13,5k
          • 4
        • ImapFilter — мощный инструмент для сортировки почты

          По работе мне приходится ежедневно работать с большим количеством писем, и чтобы не упускать из виду важную информацию, их нужно сортировать. Первое время с этой задачей вполне себе справлялся настроенный Thunderbird на рабочей машине, но хотелось проверять почту не только на работе, но и дома, и еще где-нибудь — словом, в любом удобном месте при наличии желания и возможности. Стали появляться мысли о некоем серверном решении. Казалось бы — «все уже украдено до нас» (с) — связка fetchmail+procmail+(exim/postfix/sendmail и пр.)+mutt вполне себе рабочая и неплохо себя зарекомендовала, но мне не нужны были все возможности столь мощных почтовых программ, хотелось минимализма, простоты и функциональности.
          Читать дальше →
        • AdBlock похитил этот баннер, но баннеры не зубы — отрастут

          Подробнее
          Реклама
        • Lua: как перестать встраивать и начать жить

            Lua: как перестать встраивать и начать жить



            За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.

            Читать дальше →
          • Пишем на iPad'е под iPad

              Недавно в App Store появились первые игры написанные прямо на iPad, что лично меня очень радует. Можно сказать, что планшет становится не только средством потребления контента, но и его производства.

              image
              Под катом я расскажу, как и где это сделано, покажу простенький Hello World.

              Читать дальше →
            • Пишем интерпретатор Brainfuck на Lua

              Lua Logo
              Каждый программист за свою жизнь успевает изучить множество языков, в нескольких из них специализируется и продолжает работать продолжительное время, а остальные проходят мимо. По разным причинам. Стоит ли тратить время на изучение новых языков, когда уже определился с областью в которой будешь работать? Лично я уверен что стоит, хотя, быть может, многие скажут что важны фундаментальные знания в computer science, а на каком языке писать код не критично. В сущности так и есть. И тем не менее изучать языки интересно и полезно.
              Читать дальше →
            • Составление строк из множества частей

              • Перевод
              Роберто Иерусалимши рассказывает, как эффективно соединять немодифицируемые строки.
              Несмотря на то, что код написан на Lua, алгоритм подойдёт и для других языков, в которых строки нельзя изменять.
              Читать дальше →
            Самое читаемое