LINUX.ORG.RU

Сообщения lodin

 

MVC::Neaf - Not Even A (Web) Framework

Форум — Development

Тут меня некоторые попрекают, что я в 2016 году начинаю проект на perl. Вы будете смеяться, на я ещё и фреймворк под него напилил. Простенький, но, как мне кажется, не лишённый некоторых здравых идей. Суть такова:

1. Приложение разбивается на маленькие процедуры-хэндлеры, привязанные к пути в URI (см. тж. https://metacpan.org/pod/Dancer )

2. Хэндлер получает на вход объект запроса, из которого потом достаются параметры, куки, заголовки и т.д. (см. тж. https://metacpan.org/pod/Kelp )

3. Параметры и куки нельзя достать без валидации, например, при помощи регулярного выражения:

  $req->param( foo => qr/\d+/ );

См. тж. perl -T

В качестве альтернативы есть самовалидирующиеся формы на базе Validator::LIVR или самописного каличного движка (но ЛИВР лучше).

См. тж. https://metacpan.org/pod/Validator::LIVR и https://metacpan.org/pod/Data::CGIForm

4. Хэндлер может вернуть ссылку на хэш с какими угодно параметрами, которая затем передаётся в шаблонизатор для рендеринга. На данный момент поддерживается Template::Toolkit и JSON/JSONP

Также есть ограниченный набор ключей с минусом, которые используются для управления самим фреймворком - -template, -status и т.п

5. Хэндлер может выбросить исключение: die 404 - легальный способ вернуть настраиваемую страницу not found. Все нормальные исключения (не трёхцифренные и не специальные объекты самого Neaf) трактуются как error 500.

6. Один и тот же код может в неизменном виде запускаться как cgi, psgi и под Apache2 + mod_perl (с некоторым бубном). Также поддерживается дебаг из командной строки:

   perl myapp.pl --help
   perl myapp.pl --list

7. Кроме этого есть поддержка статических страниц (не надо держать отдельно нормальный веб-сервер, чтобы проверить CSS или логотип), сессий (в несколько недоделанном виде, планируется улучшение), отложенные действия, выполняемые после запроса, ну и по мелочи ещё.

8. Также есть экспериментальный синтаксический сахар типа get '/foo' => sub { ... }; и экспериментальные же хуки, позволяющие воткнуться в обработку запроса за пределами хэндлера. Хуки привязаны к путям, т.е. для /foo/bar будут выполнены как «/», так и «/foo» и «/foo/bar».

Пример кода:

    use strict;
    use warnings;
    use MVC::Neaf;

    MVC::Neaf->route( "/" => sub {
        my $req = shift;

        return {
            -template => \'Hello, [% name %]!',
            -type     => 'text/plain',
            name      => $req->param( name => qr/\w+/, "Stranger" ),
        },
    });

На каждую фичу есть небольшой пример, они же используются как дополнительные смоук-тесты к 80% покрытию юнит-тестами. см. https://github.com/dallaylaen/perl-mvc-neaf/tree/master/example

Собственно проект:

https://github.com/dallaylaen/perl-mvc-neaf

 

lodin
()

Potracheno — система учёта технического долга

Новости — Open Source
Группа Open Source

Вышла и потихоньку развивается бета-версия системы учёта технического долга. Система сделана в виде баг-трекера, который устанавливается параллельно основному трекеру проекта (jira, redmine и т.д.) на любое устройство с доступом в сеть (тестовый сервер, ноутбук разработчика, кофеварка и т.п.). Однако, вместо времени, использованного для решения проблемы, она учитывает время, потерянное в силу того, что проблема всё ещё не решена.

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

Поддерживаемые на данный момент функции:

  • Заведение тикетов, смена статусов, комментарии;
  • Теги а-ля stackoverflow;
  • Учёт потраченного времени;
  • Предложения решений (solution proposals) с оценкой времени на реализацию;
  • Персональная настраиваемая лента событий и слежение за тикетами;
  • Разнообразные отчёты, в т.ч. по тикетам, из-за которых уже потеряли больше времени, чем нужно на их исправление.

Проект реализован на языке Perl и использует базу данных sqlite. По ссылке содержится подробная инструкция по установке, скриншоты, текущий вишлист и всё такое.

>>> Гитхаб

 , , , ,

lodin
()

Сип в гостях

Форум — Desktop

Предположим, у меня есть подключение к гостевому безлимитному интернету - то есть, адрес выдаётся по DHCP и заранее неизвестен, сеть за NAT-ом и повлиять на настройки этого NAT-а я не могу. Достоверно известно, что работает исходящее TCP.

Есть ли комбинация sip-провайдера и софтфона, которая работает в таких условиях и при этом умеет приземлять звонки? Принимать звонки не нужно, только наружу звонить.

Пробовал звонить twikle-ом через sipnet.ru , звонок проходит, но звука нет и, более того, никаких следов звука в wireshark-е.

Про скайп где-то слышал, но как бы хотелось бы поддержать сиповиков, если это ещё возможно.

 

lodin
()

Grey+ превращается в нажатие левой кнопки мыши

Форум — Desktop

Почему-то при нажатии на «+» на цифровой клавиатуре получается нажатие мыши вместо ожидаемого плюса. Плюс, который shift+«=», работает нормально.

Что это за зверь, где искать?

Гугл по запросу «grey plus» «mouse click» выдаёт много нерелевантной всячины.

lodin
()

Городской телефон с радиотрубкой и функцией «тихая ночь»

Форум — Talks

Было бы здорово, если бы на городском телефоне можно было выставить время, с которого и по которое он при вызове не звонит, а, допустим, только мигает.

Это явно можно сделать при помощи крона и такой-то матери. Хотелось бы обойтись для такой задачи без включённого компьютера общего назначения.

В каких моделях трубок это может быть, как оно называется и как искать?

 ,

lodin
()

Зачем, всё-таки, матан программисту?

Форум — Talks

Тут родилась примерно следующая гипотеза:

Over 90% матанализа в ВУЗе - это упражнения на интегрирование и дифференцирование. Они, в свою очередь, на 90% суть преобразования сложного выражения в эквивалентную форму с целью упростить его вид, выделить независимые части и т.д. То есть, по-нашему, по-рабоче-крестьянски, это рефакторинг.

Весьма практичное умение, без которого программа превращается в говнокод. Причём, чтобы успевать рефакторить и в сроки укладываться, надо это делать без усилия, между делом, на рефлексах - что, собственно, и тренируется на первом курсе.

Дискасс.

 ,

lodin
()

Зачем шифруют название компании в объявлениях о найме?

Форум — Talks

Например, «Известная российская интернет-компания, офис около м. Аэропорт» (речь о DC).

Даже если не знать, какая именно компания там расположена, это довольно быстро гуглится, и потом обязательно в тему придёт человек, который знает о чём речь.

Почему бы тогда не написать название компании прямым текстом?

lodin
()

Gnucash не пролезает в монитор

Форум — Desktop

После установки конских шрифтов gnucash расползся в ширину.

В результате при просмотре счёта столбцы «остаток», «дата», «приход/расход» невозможно лицезреть одновременно, а едва до середины заполненное «описание» почему-то не получается сократить в размерах. Можно ли как-то это побороть?

(Я готов даже на более мелкий шрифт для gnucash, но не для всех приложений).

В FAQ написано, что описание, мол, особый столбец и всегда ресайзится до максимума, исходя из ширины окна. Но окно-то у меня и не сужается...

 

lodin
()

Мониторилка чего угодно

Форум — Desktop

Глядя на мониторилку CPU в LXDE, подумал, что неплохо бы сделать такую же, но с iowait ещё. И отдельную для сетевых интерфейсов. И ещё...

Собственно, а почему бы не написать универсальную?

Приверно так.

* программа создает окошко, пригодное для размещения на панели, размером %width * %height, цвета %background

* раз в %period секунд читает одну строку из вывода команды %command (если там eof, перезапускает команду).

* строка вида: <#color> <number>, ...

* последние %width строк масштабируются так, чтобы сумма значений в максимуме была равна %height

* рисуется график. Или просто прошлый сдвигается влево, если не было перемасштабирования.

А ещё нужно по правой кнопке показывать окошко с полями ввода для всего перечисленного, но я-то, положим, и текстовым конфигом обойдусь.

Осталось найти кого-то, кто это осилит... Или уже существующий аналог.

 

lodin
()

Карманный imap

Форум — General

Не так давно озаботился вопросом поиска почтового клиента, который бы нормально работал с imap-ящиком при отсутствии сети. В процессе гугления наткнулся на imapfilter и offlineimap, которые вроде бы решают большую часть проблем (а значит, почтовик можно выбирать по рюшечкам вроде сворачивания в трей).

Таким образом, возникает вопрос о постановке imap-сервера. Желательно, чтобы почту он держал в $HOME/что-то-там, а то как-то глупо: хомяк зашифрован, а почта - нет.

И ещё интернет говорит про какое-то sieve (то бишь, «решето») для фильтрации почты. Следует ли предпочесть его imapfilter-у (который на lua), или наоборот?

Да и вообще, стоит ли со всем этим заморачиваться?

lodin
()

Как назывался уровень xmoto, где рушится домик?

Форум — Games

Домик составлен из палочек, а по ним надо ездить, стараясь, чтобы тебя не завалило, когда всё это рухнет.

Перемещено JB из talks

 ,

lodin
()

sudo-like ssh

Форум — General

Можно ли сделать так, чтобы после успешного захода по ssh ещё некоторое время (5 минут, скажем) можно было с этого же виртуального терминала на эту же машину попасть без ввода пароля?

Про ключи знаю, но ключи без пароля вроде как не очень хорошо, а вот если бы ключ генерировался тут же на месте и с очень маленьким временем жизни...

lodin
()

Приблизительный статистический анализ большого объема данных

Форум — Development

Предположим, у нас есть много статистических данных. Например, время отклика нагруженного сервиса для множества запросов. Мы хотим их как-то обработать: посчитать перцентили, понять, есть ли выбросы и т.д. То есть просто матожидания и дисперсии недостаточно.

При этом:

  • Данные не влезают в память (и, к примеру, хадуп тоже не из чего построить)
  • Данные легко могут иметь разброс на порядки

У меня нарисовался велосипед, который выдает правдоподобные квантили, не имея всех данных в памяти. При этом, однако, теряется точность. Грубо говоря, в результатах будет фиксированная (заранее заданная) относительная погрешность.

Но при анализе производительности это как будто и не страшно. В крайнем случае, можно прогнать ещё раз данные, вырезать интересный интервал и получить для него более детальную картину.

Возникает вопрос - а есть ли подобные (вероятно, лучшие) решения вообще-то? Гугл по «statistical approximate algorithm large data» выдает море информации, по понять что из этого то, а что нет, я не смог.

Поиск осложняется тем, что матстатистику я не знаю, что знал всё забыл.

 ,

lodin
()

А почему в lua...

Форум — Development

Disclaimer: мой «опыт» с lua составляет примерно два вечера, основной язык в данный момент Perl.

Как известно, вызов метода в lua выглядит вот так:

  object:method(137); -- означает object["method"](object, 137);

Т.е. «класс» и «экземпляр» в простейшем случае совпадают. В то же время, есть перегрузка операторов вида

  setmetatable(object, meta); 
  object + 137; -- означает meta["__add"](object, 137)

Виденные мной тьюториалы по ООП в lua, в частности, предлагают перегружать __index (т.е. оператор []), чтобы получить разделение «экземпляра» и «класса». Но это же хак (не говоря уже о том, что в таблице-экземпляре можно перезаписать method и тогда __index не вызовется).

Пример: http://lua-users.org/wiki/SimpleLuaClasses

Почему бы не соединить лучшее из двух миров? Например:

  setclass(object, meta); -- никто не говорил слова "bless"
  object:method(137); -- означает meta["method"](object, 137);

Или еще проще (проще ли?) - добавить метаметод __method, который будет действовать аналогично __index, но для для object:method(...)

Наверняка такой вопрос уже задавался - хотелось бы увидеть внятное объяснение, почему чего-то подобного ещё не сделали (в т.ч., если «ненужно», то почему)?

Перемещено true_admin из talks

 , ,

lodin
()

[mediawiki] Добавить категорию нескольким страницам

Форум — Talks

Допустим, у меня есть вики на движке MediaWiki (от Википедии который), в ней категория «Требования» и много-много страниц с требованиями. И нет желания ползать по ним и втыкать заветное [[Категория:...]] руками.

Можно это как-то автоматизировать?

Нагуглил: http://www.mediawiki.org/wiki/Extension:MassEditRegex

Видимо, без установки плагина не получится... Но вдруг, вдруг?

 

lodin
()

[sound] Lenovo x220i + микрофон

Форум — Linux-hardware

У новых Lenovo появился прекрасный, чудесный, чтоб ему, разъем «для гарнитуры». Как обычный джек, но с тремя, а не двумя секциями. Фокус в том, что в наушники-то он отлично играет, а вот с микрофона ничегошеньки не передает. Ни с обычного, ни с гарнитуры от нокии, которая судя по найденному в интернете должна подходить.

В документации от ядра/альсы моего ноута нету, есть сетапы от похожих моделей, но они не подходят. (Вернее, они работают точно так же).

Может, там есть какая-то ручка: «здесь у нас микрофон, точка прописью», а я не знаю?

Может, надо написать каким-то волшебным людям (alsa mailing list? Я не готов читать его ВЕСЬ ради одного ценного юз-кейса!)?

В общем, рекомендации приветствуются.

 

lodin
()

[usb][sound] Приличная USB-звуковуха

Форум — Linux-hardware

Гуглом гуглятся всякие m-audio pro и иже с ними. И описания проблем, но вроде бы старые описания. В каком сейчас состоянии все это, смогу я петь сиплым шепотом через такую карточку?

Хотелось бы услышать истории успеха по применению данных устройств в Linux, а также по втыканию в них миди-клавиатуры. Чтобы не оказалось, что в дорогущей красивой коробочке с кучей клевых ручечек половина функционала не работает в linux, а оставшаяся работает только в винде/макоси.

 ,

lodin
()

Bluetooth как метеор, мелькнет и пропадает

Форум — Desktop

Прикупил ноут с БТ, возникла следующая проблема: телефон и ноут друг друга обнаруживают, удается даже ввести на обоих пин-код, но на этом все заканчивается.

Если пробовать законнектить телефон, вот что получается:

-bash$ sudo hcitool cc --role m 30:38:55:62:FF:84 &&  hcitool con; while sleep 1; do hcitool con; done
Connections:
	< ACL 30:38:55:62:FF:84 handle 11 state 7 lm MASTER 
Connections:
	< ACL 30:38:55:62:FF:84 handle 11 state 1 lm MASTER 
Connections:
	< ACL 30:38:55:62:FF:84 handle 11 state 8 lm MASTER 
Connections:
Connections:
Connections:
^C

hcitool auth проваливается:

sudo hcitool cc --role m 30:38:55:62:FF:84 && sudo  hcitool auth 30:38:55:62:FF:84
HCI authentication request failed: Input/output error

Система убунту, ядро 3.0.3, до этого было 2.6.32 и там blueetooth работал при помощи гномовского апплета. Соответственно, скорее всего, регрессия в ядре.

Как понять, что именно сломалось?

lodin
()

Заменить menu key на win key

Форум — Desktop

Как-то так сложилось, что к клавише вин у меня приделано множество полезных буквосочетаний, а вот меню ни для чего полезного не используется. Можно ли как-то переколдовать menu key в win key?

lodin
()

[just for lulz] Git глазами пользователя

Форум — Talks

http://lodin.nataraj.su/i/share/git-makes-cvs.png

Для Ъ: логотип гита (точнее, http://git.wiki.kernel.org*) и довольно коряво приделанная к нему подпись, что это-де CVS переворачивается в гробу. Кстати, если кто-то переделает это в нормальный демотиватор, буду только за.

*Для ЪЪ: речь идет об официальной вики git-а.

lodin
()

RSS подписка на новые темы