• Прототипное ООП для Lua

      Привет, я придумал свой велосипед для реализации прототипного подхода ООП в Lua.

      Основные фишки
      • Single inheritance
      • Traits
      • LuaJIT


      Перейдем сразу к примерам.

      -- подключаем модуль
      local object = require("object")
      
      -- определяем наш класс, который на самом деле объект
      local HelloClass = object:extend(function(class)
        -- конструктор (необязательно)
        function class:init(name)
          self.name = name
        end
      
        -- метод класса
        function class:sayHello()
          print("Hello " .. self.name)
        end
      end)
      
      local hello = HelloClass:new("John")
      hello:sayHello()
      

      Читать дальше →
      • +10
      • 9,1k
      • 4
    • Обзор Komodo Edit и Komodo IDE 8

        Привет. На хабре много обзоров различных сред разработки, но совсем мало информации про Komodo Edit и Komodo IDE.
        Я пользуюсь Komodo с 2010 года и за это время вышло несколько мажорных релизов и хочу с вами поделиться кратким обзором основных возможностей.



        Komodo Edit — это кросс-платформенный текстовый редактор, который построен на движке Mozilla, поддерживает большое количество языков. Проект является полностью открытым и распространяется под лицензией MPL (Mozilla Public License). Разработка проекта ведется на GitHub.
        Как и у всех, есть авто-дополнение со справочной информацией, поддержка плагинов, макросы, сниппеты.
        Главная фича, которая мне понравилась, это удаленное редактирование кода, подобно Sublime если прикрутить к нему плагины для работы по SFTP. В восьмой версии также появился визуальный скроллинг, аналогично тому, который есть в Sublime.

        Читать дальше →
      • Вычисление рекуррентных соотношений на Perl

          Привет,
          в этом посте я расскажу рецепт добавления функциональности в Перл.

          Как уже стало понятно из названия, мы будем вычислять рекуррентные соотношения.
          Например, формулы для вычисления факториала выглядят вот так:
          f(0) = 1
          f(n) = n * f(n-1)
          


          Функциональные языки программирования позволяют определять такие функции достаточно просто, в Erlang это делается следующим образом:
          factorial(0) ->
              1;
          factorial(N) ->
              N * factorial(N-1).


          А теперь попробуем сделать нечто похожее, что позволяло бы нам писать код вида:
          #!/usr/bin/perl -I./lib
          use strict;
          use bigint;
           
          use Recurrent;
           
          recurrent fac => {
              arg(0) => lambda { my($n) = @_; return 1 },
              arg(n) => lambda { my($n) = @_; return $n * fac($n-1) },
          };
           
          print fac(100);

          Из примера видно, что у нас появились новые функции recurrent, arg, n и lambda. На самом деле, практическая польза есть только у recurrent, все остальные нужны лишь для получения более «красивого» кода.

          Давайте напишем модуль Recurrent.pm
          Читать дальше →
        • Драм-машина на Perl в 120 строк

            Попробуем написать простенькую драм-машину на перле используя MIDI и Tkx в качестве графического тулкита.

            image

            Основные возможности
            1. 47 инструментов, одновременно может быть использовано 4.
            2. Управление с клавиатуры.
            3. Регулятор громкости.
            4. Регулятор BPM от 60 до 600 ударов в минуту.


            Читать дальше →
          • Интерпретатор Brainfuck на Bash

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

              Сегодня я решил запустить свой первый хелловорлд на этом языке. Я счастливый пользователь NetBSD на тостере, и у меня не получилось настроить интернет. Поэтому, я не смог воспользоваться уже готовыми решениями для запуска программ на Brainfuck'e.

              Выход оставался один — написать интерпретатор самому. Из софта были только Bash и системные утилиты.

              $ cat bf.sh
              #!/bin/bash
              C="s[0]=0; p=0;"
              while read -n1 c; do case $c in
              	\+) C="$C s[\$p]=\$((\${s[\$p]}+1));";;
              	\-) C="$C s[\$p]=\$((\${s[\$p]}-1));";;
              	\>) C="$C p=\$((\$p+1));";;
              	\<) C="$C p=\$((\$p-1));";;
              	\.) C="$C printf \\\\\$(printf '%03o' \${s[\$p]});";;
              	\,) C="$C read -n1 c; s[\$p]=\`printf '%d' \"'\$c\"\`;";;
              	\[) C="$C while [[ \${s[\$p]} > 0 ]]; do ";;
              	\]) C="$C done;";;
              esac; done < $1; 
              eval $C
              
              $ cat hello.b
              ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
              .>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
              ------.--------.>+.>.
              
              $ ./bf.sh hello.b
              Hello World!
              
            • Реверси на TCL в 64 строки

                На хабре уже есть топики про написание игры Реверси (Отелло) на Python, Silverlight.
                Изобретем велосипед на Tcl/Tk. Кроссплатформенно (работает даже на Windows Mobile при небольшой модификации), всего в 64 строки.

                image

                Код, небольшое описание и скрин с WinMobile под хабракатом.
                Читать дальше →
              • Компиляция Perl под Windows

                  Под Microsoft Windows существует несколько популярных дистрибутивов Perl.
                  Это Strawberry Perl и ActivePerl. Первый предназначен исключительно для Windows, второй собирается под различные платформы (полный список можно найти на официальном сайте). Важно учесть, что в ActivePerl, модули распространяются в уже готовом виде, и бывает так, что приходится ждать пока обновят репозитории.

                  В этом небольшом HowTo я расскажу, как подготовить рабочую среду Perl из сорцов.

                  Читать дальше →
                • Perl и GUI. Взаимодействие приложений

                    Иногда возникает необходимость сделать обмен данными между приложениями (например выполнить какую-либо команду в Internet Explorer, Excel).
                    Платформа Microsoft Windows предоставляет нам несколько механизмов, это и OLE, COM и… DDE.

                    DDE был введен в 1987 году, позже была сетевая реализация NetDDE, и используется до сих пор.
                    Работать с DDE очень просто, не требуется подключать с CPAN дополнительные модули, все есть в tkkit.

                    Рассмотрим на примере двух приложений приёмника и отправителя.

                    image

                    Описание и код под хабракатом.

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