• Прототипное ООП для 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
      • 10,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
          Читать дальше →
        • Стартуют продажи Samsung Galaxy Camera в USA и UK

            Стартуют продажи весьма оригинального устройства от Samsung — Samsung Galaxy Camera, 16 мегапиксельной цифровой камеры, работающей под управлением операционной системы Android 4.1 Jelly Bean.

            Устройство работает на базе четырехядерного процессора Exynos 4412 с частотой 1.4ГГц. Есть WiFi, 3G.
            А также, ксеноновая вспышка и 21 кратный оптический зум.

            image

            В США продажа начнется 16 ноября компанией AT&T с ценой $499,99.
            В Великобритании на этой неделе по цене £420 с VAT.

            Ссылки

            Обзор устройства
            промо-сайт Samsung.
          • Windows 8 для разработчиков: возрождение мечты? (1/2)

            • Перевод
            Ранее в этом месяце Microsoft несколько шокировала Windows-разработчиков: платформа .NET, которую компания продвигала на протяжении последнего десятилетия как основную для разработчиков, не будет использоваться при построении приложений для нового интерфейса Windows 8. Вместо этого, разработчики должны использовать HTML5 и JavaScript.

            Многие из них, что естественно, задались вопросом, который пока не получил ответа: «Как я смогу использовать имеющийся у меня опыт для разработки новых приложений?» Microsoft же хранит молчание и не планирует сообщать ничего до конференции BUILD (бывшая PDC) в сентябре.

            Но, вероятно, не все так мрачно, как многие думают. Ранние сборки Windows 8 утекли в интернет, и были приложены значительные усилия, чтобы понять, как они работают. Что ж, все выглядит так, словно разработка приложений под Windows 8 не только не ужасна, но и наконец-то сможет избавить разработчиков от многих раздражающих препятствий на их пути. Если у Microsoft получится реализовать все запланированное, следующая версия Windows станет настолько же важным релизом, насколько важным должен был стать релиз Windows Longhorn.
            Читать дальше →
          • Драм-машина на Perl в 120 строк

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

              image

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


              Читать дальше →
            • Союзмультфильм на YouTube

                image

                Буквально вчера обнаружил, что на YouTube появился канал «Союзмультфильм» со старыми, добрыми, советскими мультфильмами. Пока доступно только 48 видеозаписей, но их количество увеличивается с каждым днем!

                http://www.youtube.com/user/Soyuzmult
              • Интерпретатор 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!
                  
                • Работа с закладками в GMail

                    Эта статья о том, как можно сделать менеджер закладок используя Google Mail и Google Docs.
                    При этом Вы их никогда не потеряете (даже удалив из GMail, копия останется в Docs), а добавление нового URL будет происходить в два клика!

                    image

                    подробности
                  • Ubuntu 10.04 и Windows 7 на Mac Mini

                      На прошлой неделе я заменил свой старый шумный компьютер на mac mini.
                      Иногда приходится работать как в Windows, так и в Linux, то долго не думая,
                      установил на него сразу три операционные системы.

                      image

                      Под хабракатом небольшая заметка о том, что из этого получилось и как это сделать.
                      В статье будут использоваться
                      1. Mac OS X 10.6 Snow Leopard
                      2. Windows 7 Home Basic
                      3. Ubuntu 10.04 Lucid Lynx

                      Читать дальше →
                    • Реверси на 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

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

                            Читать дальше →
                          • Perl и GUI. Работа с меню

                              Обзор виджетов Tk, я начну с рассмотрения главного меню c учетом особенностей различных ОС.

                              Для начала создадим заготовку для нашего приложения:

                              #!/usr/bin/perl -w
                              use strict;
                              use Tkx;
                              
                              our $PROGNAME = 'app';
                              our $VERSION = '0.1';
                              <habracut>
                              
                              my $windowingsystem = Tkx::tk_windowingsystem();
                              my $IS_AQUA = ($windowingsystem eq 'aqua');
                              
                              # Учитывая, что имена некоторых кнопок могут различаться, 
                              # в OSX это Control, в Win/X11 это Ctrl, добавим еще несколько переменных
                              # (пригодится для хоткеев)
                              my $plat_acc_ctrl = ($^O eq 'darwin') ? ('Control-') : ('Ctrl+');
                              my $plat_evt_ctrl = ($^O eq 'darwin') ? ('Control-') : ('Control-');
                              
                              # Главное окно.
                              my $mw = Tkx::widget->new('.');
                              
                              Tkx::tk( appname => $PROGNAME );
                              Tkx::wm_minsize( $mw => qw(320 200) );
                              
                              # новое меню прикрепляется с помощью параметра -menu
                              $mw->configure(
                                -menu => make_menu( $mw ),
                              );
                              
                              
                              Tkx::MainLoop;
                              1;
                              
                              sub on_quit {
                                Tkx::tk___messageBox( -message => 'Goodbye ;]' );
                                exit;
                              }
                              
                              sub show_about {
                                Tkx::tk___messageBox( -message => "$PROGNAME $VERSION" );
                              }
                              
                              sub make_menu {
                               my $mw = shift || return;
                              
                               # По умолчанию, все меню выглядит подобно в GIMP, их можно открепить
                               # Поэтому, выключим данную опцию
                               Tkx::option_add('*Menu.tearOff', 0)
                              
                               # ... продолжение ниже
                              
                                return $m; 
                              }
                              


                              Все как обычно, File, Edit, Help. (меню каскадное). Новый объект создается с помощью метода new_menu(); (подобно контейнеру)

                              my $m = $mw->new_menu(); # Верхний уровень
                              my $fm = $m->new_menu(); # File
                              my $em = $m->new_menu(); # Edit
                              
                              # А теперь, добавим наши пункты в верхний уровень
                              $m->add_cascade( -label => 'File', -menu => $fm, -underline => 0 );
                              $m->add_cascade( -label => 'Edit', -menu => $em, -underline => 0 );
                              
                              


                              Добавление осуществляется через add_cascade(), где
                              -label — это заголовок меню.
                              -menu — виджет
                              -underline — индекс буквы подчеркивания. Необходимо для быстрой навигации с помощью кнопки Alt+буква (нумерация идет с 0)

                              смотрим, что получилось.
                              image

                              Толку от пустого меню нету, поэтому «набьем» его командами

                              # Меню File
                              $fm->add_command(
                                -label => 'Do something',
                                -underline => 0,
                                -command => sub { },
                              );
                              
                              # разделитель
                              $fm->add_separator();
                              
                              $fm->add_command(
                                -label => 'Quit',
                                -underline => 0,
                                -accelerator => "${plat_acc_ctrl}Q",
                                -command => [\&on_quit],
                              );
                              
                              Tkx::bind( all => "<${plat_evt_ctrl}q>" => [\&on_quit] );
                              
                              # Меню Edit
                              $em->add_command(
                                -label => 'Cut',
                                -underline => 2,
                                -accelerator => "${plat_acc_ctrl}X",
                                -command => sub { Tkx::event_generate(Tkx::focus(), '<
                              Читать дальше →
                            • IPC::Open3. Решение проблемы с STDERR

                                Когда мы пишем графическое приложение, бывает что требуется вызывать внешние программы и читать из STDOUT/STDERR.
                                С этим прекрасно справляется модуль IPC::Open3.

                                Однако, программу Вы написали, все работает, но Вы не хотите чтобы пользователь (или Вы) видели ненужное окно терминала.

                                Есть несколько вариантов его скрыть:
                                Читать дальше →
                              • Perl и GUI. Упаковка виджетов

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

                                  Существует несколько упаковщиков, это pack, place, grid. Каждый из них подходит под определенные задачи, но grid является наиболее эффективным.

                                  grid это таблица, и все виджеты располагаются в ее ячейках. Позиция указывается через строку и столбец, соответственно row и column.

                                  вызывать можно как напрямую через Tkx: Tkx::grid( $объект, ... )
                                  так и через родителя(им может выступать любой виджет, обычно окно или фрейм)
                                  $объект->g_grid( ... )

                                  Одна таблица, может быть вложена в другую в зависимости от иерархии.
                                  Читать дальше →