Израильские PHP-разработчики как назвали оператор двойного двоеточия на иврите — так оно в пхп и просочилось.
Но в пхп с юникодом — фигня. Потому-то T_PAAMAYIM_NEKUDOTAYIM пишется всё-таки латинскими буквами 🙂
Израильские PHP-разработчики как назвали оператор двойного двоеточия на иврите — так оно в пхп и просочилось.
Но в пхп с юникодом — фигня. Потому-то T_PAAMAYIM_NEKUDOTAYIM пишется всё-таки латинскими буквами 🙂
The same in English: Perl: testing with Komodo IDE
В перловых приложениях, написанных с использованием фреймворка Mojolicious, лежащие в каталоге t тесты запустить достаточно просто — одна из доступных «из коробки» команд приложения — как раз test, которая без дополнительных параметров запускает все имеющиеся тесты:
$ ./app-name.pl test [Fri Sep 9 13:21:06 2016] [debug] Some message Running tests from "/path/to/t". /path/to/t/1868-prev-next.t .. ok /path/to/t/1869-design.t ..... ok ... All tests successful. Files=8, Tests=171, 5 wallclock secs ( 0.08 usr 0.01 sys + 3.76 cusr 0.28 csys = 4.13 CPU) Result: PASS
Для упрощения процесса я обычно создаю Makefile, в котором пишу
SCRIPT=info.pl
APP=perl $(SCRIPT)
test: $(SCRIPT)
$(APP) test
и всё, в общем-то, прекрасно работает — тесты запускаются привычной командой make test.
Недавно поставил себе свежую ActiveState Komodo IDE и, пока испытательный срок не кончился, пробую всякие её возможности, среди которых есть и тестирование. Выяснилось, что Komodo пытается найти Makefile и запустить тесты через него, но понять результаты оно не может и выводит перед каждой строкой сообщение **** Unrecognized input

Можно запускать тесты по-другому — командой prove — она выдаёт похожий результат:
$ prove -l t/1868-prev-next.t .. ok t/1869-design.t ..... ok ... All tests successful. Files=8, Tests=171, 5 wallclock secs ( 0.07 usr 0.00 sys + 3.86 cusr 0.23 csys = 4.16 CPU) Result: PASS
Разница заключается в том, что не выводятся отладочные сообщения и вместо абсолютных путей к файлам отображаются относительные. Этого оказалось достаточно для того, чтоб Комодо больше не ругалось:

Что-то стало модно всё подряд писать на яваскрипте. Куда ни глянь — всюду JavaScript, даже за пределами веба. Генератор карт TileMill — на яваскрипте. Текстовые редаторы и IDE теперь тоже на нём же пишут. Потому-то современные редакторы, наверное и тормозят — у них ведь помимо редактора ещё целый браузер внутри! У Komodo Edit и Komodo IDE — Mozilla Firefox, у Атома и Visual Studio Code — Chromium.

Вроде, недавно только поменял процесс подпиливания ильменского сайта — там теперь TDD — а уже каким-то образом 220 тестов написал. Хотя файлов, конечно, сильно меньше 🙂
All tests successful. Files=11, Tests=220, 14 wallclock secs ( 0.12 usr 0.02 sys + 9.66 cusr 0.64 csys = 10.44 CPU) Result: PASS
Хотя тесты сразу надо было начинать писать, с момента начала переписывания тринадцать месяцев назад.
Обнаружил в попавшемся на глаза чужом скрипте чтение переданных через командную строку параметров без упоминания массива @ARGV. Проверил — работает:
#!/usr/bin/perl
my $shifted = shift or die 'Not shifted';
print "Shifted value is $shifted\n";
Выдаёт
$ ./shift.pl Not shifted at ./shift.pl line 3. $ ./shift.pl ARGV?! Shifted value is ARGV?!
Век живи — век учись.
Пробую очередной текстовый редактор — Atom. Поначалу не удавалось его запустить — на сайте выложена версия для архитектуры amd64, а собрать из исходников не получилось (не очень-то и хотелось), однако нашёлся вариант для ленивых — PPA с поддержкой 32-битных версий убунты.
Хоть, конечно, и требует напильника, но пока нравится: работает шустро, клавиатурные сочетания для основных операций с текстом по умолчанию вполне подходящие плюс можно легко скачиватьи ставить модули для функций, которых по умолчанию нет. Вот, например, модуль linter-perl позволяет проверить синтаксис перловых файлов, а svn подсвечивает изменённые строки и файлы при использовании Subversion — до полноценного клиента, правда, ещё далеко.
Попробовал в яваскриптовый файл добавить shebang, чтоб проще было запускать:
#!/usr/bin/node
console.log('Hallo, Welt!');
Прекрасно работает. Node.js на shebang не ругается.
Функция selectall_arrayref перлового модуля DBI хороша для тех, кому лень писать:
This utility method combines «prepare», «execute» and «fetchall_arrayref» into a single call. It returns a reference to an array containing a reference to an array (or hash, see below) for each row of data fetched.
В большинстве случаев её вполне можно применять, что я и делаю, однако такой подход хорош не всегда: при попытке выполнить такой функцией запрос, возвращающий много данных, потребуется память под все эти данные.
Реальный пример: скрипт, извлекающий тайлы из пакета, созданного Тайлмиллом, пытался читать данные как раз функцией selectall_arrayref. Зная, что применяется запрос
SELECT * FROM tiles
и что представление tiles содержит, помимо прочего, содержимое тайлов, занимающее места больше всего остального, нетрудно догадаться, что попытка выполнения запроса потребует выделения памяти в объёме, сопоставимом с размером файла, в котором сидит база (пакет с тайлами — это база SQLite).
Набор тайлов для территории размером 600×400 км в средних широтах — например, с Челябинском по центру, Ашой на западе, Карталами на юге и Тюменью на северо-востоке — займёт больше гигабайта для набора масштабов не больше шестнадцатого. На практике так и получилось: скрипт отжирал больше гигабайта памяти и всё никак не мог приступить к полезной части, пытаясь отожрать ещё. Если же увеличивать масштаб, затраты вырастут ещё сильнее: добавим семнадцатый зум масштаб — понадобятся ещё три-четыре гигабайта, Добавим восемнадцатый, которого хватит даже для любопытных исследователей карт — ещё на десять-двадцать объём вырастет. Если будем сохранять тайлы с глубиной цвета 24 бита, а не восемь — ещё больше места израсходуем. Получается, что средних размеров российская область может занять своими тайлами десятки гигабайт. И скрипт бы безуспешно пытался эти десятки получить.
Переписал:
-my $tiles = $dbh->selectall_arrayref(
- 'SELECT * FROM tiles',
- { Slice => {} }
-);
-
-foreach my $tile ( @$tiles ) {
+my $sth = $dbh->prepare('SELECT * FROM tiles');
+ $sth->execute;
+
+while ( my $tile = $sth->fetchrow_hashref ) {
и всё наладилось: скрипт перестал жрать память (ему хватило десяти мегабайт) и ждать её выделения — сразу работает.
Вывод: не всегда надо экономить рабочее время программиста — иногда надо и о машинном времени задумываться.
На сайте Ильменского фестиваля теперь используется правильная карта — её можно двигать и масштабировать, включать отображение нужных маркеров и кликать по ним, чтоб получить подсказку.
Карта — OpenStreetMap, стиль отображения — свой собственный на основе OSM Bright, отрисованный с помощью TileMill, иконки — The Map Icons Collection. Библиотека для отображения — Leaflet c плагинами Leaflet-hash и Leaflet.fullscreen.
Схема с ёлками, если кому-то всё-таки нужна, спрятана под ссылкой, чуть ниже карты. Кроме того, при клике на кнопку с ромбами можно включить наложение этой схемы на карту.
Улучшенный Ильменский сайт вчера наконец-то переехал на ilmeny.org — там теперь и шустрый FastCGI-бэкенд, и HTML5/CSS3/SVG, и нормальный внешний вид на мобильных устройствах. Точнее, не сайт переехал, а адрес стал указывать на новый сайт вместо старого. Так что процесс разработки и тестирования можно считать завершённым — пора начинать собираться на фестиваль.
В течение суток по инерции может ещё показываться старый белый сайт, но это не страшно — содержимое у них совпадает, старые адреса работоспособны.