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

Пользователь

Отправить сообщение

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

Время на прочтение 3 мин
Количество просмотров 12K
Привет, я придумал свой велосипед для реализации прототипного подхода ООП в 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()

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

Обзор Komodo Edit и Komodo IDE 8

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



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

Читать дальше →
Всего голосов 40: ↑35 и ↓5 +30
Комментарии 44

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

Время на прочтение 3 мин
Количество просмотров 4.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
Читать дальше →
Всего голосов 24: ↑20 и ↓4 +16
Комментарии 15

Обзор Hackberry — одноплатного компьютера от Miniand

Время на прочтение 2 мин
Количество просмотров 36K
Недавно мне приехал Hackberry, одноплатный компьютер от производителя «свистков» MK802, MK803 — компании Miniand.



Подробности, плюсы и минусы под катом

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

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

Время на прочтение 1 мин
Количество просмотров 15K
Стартуют продажи весьма оригинального устройства от 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.
Всего голосов 10: ↑7 и ↓3 +4
Комментарии 20

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

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

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

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

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

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

image

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


Читать дальше →
Всего голосов 76: ↑70 и ↓6 +64
Комментарии 20

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

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

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

http://www.youtube.com/user/Soyuzmult
Всего голосов 252: ↑247 и ↓5 +242
Комментарии 131

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

Время на прочтение 1 мин
Количество просмотров 2.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!
Всего голосов 108: ↑101 и ↓7 +94
Комментарии 37

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

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

image

подробности
Всего голосов 113: ↑97 и ↓16 +81
Комментарии 30

Ubuntu 10.04 и Windows 7 на Mac Mini

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

image

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

Читать дальше →
Всего голосов 142: ↑117 и ↓25 +92
Комментарии 140

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

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

image

Код, небольшое описание и скрин с WinMobile под хабракатом.
Читать дальше →
Всего голосов 39: ↑36 и ↓3 +33
Комментарии 20

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

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

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

Читать дальше →
Всего голосов 23: ↑18 и ↓5 +13
Комментарии 29

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

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

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

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

image

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

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

Perl и GUI. Виджеты

Время на прочтение 4 мин
Количество просмотров 2.9K
Эта статья будет продолжением обзора виджетов графической библиотеки Tk (tkx).

image

Мы рассмотрим:
Label
Button
Entry
CheckButton
RadioButton
ComboBox
Frame

Читать дальше →
Всего голосов 40: ↑34 и ↓6 +28
Комментарии 10

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

Время на прочтение 3 мин
Количество просмотров 3K
Обзор виджетов 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(), '<
Читать дальше →
Всего голосов 31: ↑24 и ↓7 +17
Комментарии 22

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

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

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

Есть несколько вариантов его скрыть:
Читать дальше →
Всего голосов 5: ↑4 и ↓1 +3
Комментарии 6

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

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

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

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

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

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

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность