Pull to refresh
67
0
Send message

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

Reading time3 min
Views12K
Привет, я придумал свой велосипед для реализации прототипного подхода ООП в 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()

Читать дальше →
Total votes 16: ↑13 and ↓3+10
Comments4

Обзор Komodo Edit и Komodo IDE 8

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



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

Читать дальше →
Total votes 40: ↑35 and ↓5+30
Comments44

Вычисление рекуррентных соотношений на Perl

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

Как уже стало понятно из названия, мы будем вычислять рекуррентные соотношения.
Например, формулы для вычисления факториала выглядят вот так:
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
Читать дальше →
Total votes 24: ↑20 and ↓4+16
Comments15

Стартуют продажи Samsung Galaxy Camera в USA и UK

Reading time1 min
Views15K
Стартуют продажи весьма оригинального устройства от 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.
Total votes 10: ↑7 and ↓3+4
Comments20

Windows 8 для разработчиков: возрождение мечты? (1/2)

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

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

Но, вероятно, не все так мрачно, как многие думают. Ранние сборки Windows 8 утекли в интернет, и были приложены значительные усилия, чтобы понять, как они работают. Что ж, все выглядит так, словно разработка приложений под Windows 8 не только не ужасна, но и наконец-то сможет избавить разработчиков от многих раздражающих препятствий на их пути. Если у Microsoft получится реализовать все запланированное, следующая версия Windows станет настолько же важным релизом, насколько важным должен был стать релиз Windows Longhorn.
Читать дальше →
Total votes 134: ↑106 and ↓28+78
Comments98

Драм-машина на Perl в 120 строк

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

image

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


Читать дальше →
Total votes 76: ↑70 and ↓6+64
Comments20

Союзмультфильм на YouTube

Reading time1 min
Views1.5K
image

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

http://www.youtube.com/user/Soyuzmult
Total votes 252: ↑247 and ↓5+242
Comments131

Интерпретатор Brainfuck на Bash

Reading time1 min
Views2.1K
В последнее время популярность эзотерического языка 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!
Total votes 108: ↑101 and ↓7+94
Comments37

Работа с закладками в GMail

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

image

подробности
Total votes 113: ↑97 and ↓16+81
Comments30

Ubuntu 10.04 и Windows 7 на Mac Mini

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

image

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

Читать дальше →
Total votes 142: ↑117 and ↓25+92
Comments140

Реверси на TCL в 64 строки

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

image

Код, небольшое описание и скрин с WinMobile под хабракатом.
Читать дальше →
Total votes 39: ↑36 and ↓3+33
Comments20

Компиляция Perl под Windows

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

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

Читать дальше →
Total votes 23: ↑18 and ↓5+13
Comments29

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

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

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

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

image

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

Читать дальше →
Total votes 20: ↑15 and ↓5+10
Comments17

Perl и GUI. Работа с меню

Reading time3 min
Views3K
Обзор виджетов 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(), '<
Читать дальше →
Total votes 31: ↑24 and ↓7+17
Comments22

IPC::Open3. Решение проблемы с STDERR

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

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

Есть несколько вариантов его скрыть:
Читать дальше →
Total votes 5: ↑4 and ↓1+3
Comments6

Perl и GUI. Упаковка виджетов

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

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

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

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

Одна таблица, может быть вложена в другую в зависимости от иерархии.
Читать дальше →
Total votes 7: ↑6 and ↓1+5
Comments0
1

Information

Rating
Does not participate
Registered
Activity