shoorick: (Рыжий)
Учёт домашних доходов с расходами — сплошное расстройство. Теперь вот вместо того, чтоб спать, пытаюсь вспомнить, что же умею делать за деньги, потому что на одну зарплату прокормить семью вообще нереально.

Могу:

  • Программировать на Перле — как древние CGI-приложения, так и современные, с использованием фреймворков Mojolicious, Dancer, Catalyst.

  • Программировать на PHP: в основном допиливать существующие приложения, а не писать с нуля что-то большое.

  • Настраивать CMS Drupal и WordPress, а также дорабатывать их темы оформления.

  • Настраивать и дорабатывать Open Journal Systems, включая реализацию многоязычности имён — делал это в OJS 2.4.2, 2.4.7.1, 2.4.8.1, думаю, и в Open Conference Systems смогу реализовать.

  • Кроссбраузерно верстать веб-страницы.

  • Немножко программировать на Руби (в том числе, с использованием Ruby on Rails) — наверное, на юниорском уровне.

  • Немножко программировать на ЯваСкрипте — как голый JavaScript, так и с jQuery.

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

  • (хоть и не считаю это основными профессиональными навыками) фотографировать, петь, аккомпанировать на шестиструнной гитаре, водить легковой автомобиль, быть Дедом Морозом, набирать ноты в MuseScore и LilyPond — медленно, но красиво.


1000 рублей

Хочу от 15 USD / 1 kRUB в час.




Statt zu schlafen (нем.) — вместо того, чтобы спать

http://shoorick.ru/2016/10/18/statt-zu-schlafen/
shoorick: (Рыжий)
Израильские PHP-разработчики как назвали оператор двойного двоеточия на иврите — так оно в пхп и просочилось.

Паамаим некудотаим

Но в пхп с юникодом — фигня. Потому-то T_PAAMAYIM_NEKUDOTAYIM пишется всё-таки латинскими буквами :-)

http://shoorick.ru/2016/09/20/paamayim-nekudotayim/
shoorick: (Рыжий)
Предварительные финансовые итоги уходящего года неутешительны: мало того, что от кредиторской задолженности не удалось избавиться — она многократно выросла, превысив месячный доход. Учёт расходов не помог их уменьшить — не на чем экономить. Значит, надо больше зарабатывать. Для начала попробуем взять дополнительную работу на несколько часов в день, не бросая работу основную: на ней никак не выйдет передать дела за две недели — слишком много накопилось за пятнадцать лет.

Итак,
ищу работу программистом, желательно на перле, удалённо либо в Челябинске, до 20 часов в неделю, от 15 долларов в час.
Резюме — http://shoorick.ru/resume/alexander_sapozhnikov.html
shoorick: (Рыжий)
Для вставки использующих библиотеку Leaflet подвижных карт на сайт, работающий под управлением вордпресса, есть разные пути: можно, например, вставить нужный HTML-код прямо в текст страницы — оно будет работать (вот пример), но ковыряться в коде каждый раз, когда нужна карта — неудобно. Такой метод подойдёт лишь тогда, когда надо вставить одну карту и забыть о ней.

Если же карт много, можно воспользоваться монстрообразным плагином Leaflet Maps Marker — он многое умеет, но страшен. Меня пугает обилие кнопочек, ссылочек и призывов перейти на платную версию.

Нужен способ, позволяющий в удобном виде описывать карту и куда-нибудь эту карту вставлять. Питерский осмер Илья Зверев несколько дней назад написал библиотеку MapBBCode для встраивания карт на форумы. На форумах для форматирования текста часто используют команды разметки вида [tag]text[/tag], действующие аналогично тэгам языка HTML, основное их отличие, бросающееся в глаза — квадратные скобки вместо угловых. Подобный код используется и для описания карты в MapBBCode.

Такие же коды применяются и в вордпрессе — с их помощью можно, например, вставлять на страницы аудиозаписи, видеоролики, фотогалереи — подобная функциональность есть в могучем плагине Jetpack. Можно и карты вставлять — так сделано в уже упоминавшемся Leaflet Maps Marker.

Я попробовал минувшей ночью написать свой плагин — получилось. Теперь для того, чтоб вставить карту, достаточно написать
[map]55.16473,61.32601[/map]

вместо этого кода отобразится карта.

Исходный код — https://github.com/shoorick/mapbb-wordpress, ZIP-архив — https://github.com/shoorick/mapbb-wordpress/archive/master.zip.
shoorick: (Default)
В 2013 году в CMS WordPress появилась новая тема — Twenty Thirteen, которая достаточно хороша: написана с использованием HTML5, корректно ведёт себя на разных размерах экрана и не страдает обилием ненужных финтифлюшек. Но не обошлось и без ложки дёгтя: в теме используются взятые с Google Fonts шрифты Bitter и Source Sans Pro — они весьма хороши, но в них нет кириллицы. Понятно, что можно, создав дочернюю тему, поправить используемые в ней стилевые правила, указав нужные шрифты, однако хочется сделать всё правильно: и загрузить нужный шрифт, и избежать загрузки ненужного.

Поиск не дал готового решения (что, вообще-то, странно) — пришлось изобретать самому, руководствуясь тем, что нашлось. Итак, для замены шрифтов надо:

  1. Создать дочернюю тему;

  2. В стилевом файле style.css дочерней темы указать нужные шрифты;

  3. Отключить загрузку ненужных и добавить загрузку нужных шрифтов, добавив в файл functions.php дочерней темы такой код:


if ( ! function_exists('child_fonts_url')) {
    function child_fonts_url() {

        $fonts_url = '';

        $open_sans = _x( 'on', 'Open Sans font: on or off', 'child' );
        $open_sans_condensed
           = _x( 'on', 'Open Sans Condensed font: on or off', 'child' );

        if ( 'off' !== $open_sans || 'off' !== $open_sans_condensed ) {
            $font_families = array();

            if ( 'off' !== $open_sans )
                $font_families[] = 'Open Sans:400italic,400,700';

            if ( 'off' !== $open_sans_condensed )
                $font_families[] = 'Open Sans Condensed:300';

            $query_args = array(
                'family' => urlencode( implode( '|', $font_families ) ),
                'subset' => urlencode( 'latin,cyrillic' ),
            );
            $fonts_url = add_query_arg(
                $query_args,
                '//fonts.googleapis.com/css'
            );
        }

        return $fonts_url;
    } // function child_fonts_url
}

function disable_twentythirteen_fonts() {
    wp_deregister_style('twentythirteen-fonts');
}

add_action( 'wp_enqueue_scripts', 'disable_twentythirteen_fonts', 11 );
wp_enqueue_style( 'child-fonts', child_fonts_url() );

Здесь child — имя дочерней темы. Функция child_fonts_url списана с twentythirteen_fonts_url из темы Twenty Thirteen — изменены лишь используемые шрифты (имена шрифтов и переменных, список начертаний и наборов символов) да название функции.
shoorick: (Рыжий)
Голый WordPress работает. Jetpack — почти что нет: не взлетает при попытке привязки его к wordpress.com. Первым делом заподозрил, что не хватает каких-нибудь модулей PHP, но документация вордпресса говорит, что ничего не надо — достаточно веб-сервера (рекомендуются Apache или nginx), PHP ≥ 5.2.4 и MySQL ≥ 5.0, а на jetpack.me тоже ничего нужного нет.

За бубном тянуться лень, поэтому пойдём правильным путём: будем читать логи. Однако, там нифига нет. Оказывается, надо включить режим отладки — написать в wp.config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Такие настройки включат запись сообщений об ошибках, но не позволят сыпаться им на страницу.

Чтение логов с последующими экспериментами показало, что для работы вордпресса с джетпаком нужны хотя бы модули xml и ctype — без них джетпак не хочет общаться с wordpress.com. По умолчанию эти модули в PHP включены, однако некоторые экономные хостинг-провайдеры их отключают.
shoorick: (Default)
Два дня гугления, помноженные на эксперименты с бубном, показали: если в своей теме многоязычного сайта на Drupal 7 надо вывести меню, то надо писать не так, как советует подавляющее большинство источников:
<?php print render( menu_tree('menu-info-about') ); ?>
а по-другому:
<?php print render( i18n_menu_translated_tree('menu-info-about') ); ?>
Если же пойти первым путём, то в выводимое меню попадут пункты на ненужных языках.
shoorick: (Default)
Обновлял сегодня php и его модули на сервере с FreeBSD — получил сообщение:
Your apache does not support DSO modules
Обновил апач — после этого и php5-* нормально обновились.
shoorick: (Default)
В этом вашем друпале, как показал метод научного тыка, вывести нужное меню можно командой
<?php print render( menu_tree('menu-info-for-root') ); ?>
Но найти информацию об этом на drupal.org с его миллионом страниц или, что ещё хуже, на drupal.ru, который представляет из себя форум, где одни чайники спрашивают совета у других — нереально.

Тот, кто ругает Mojolicious за корявую документацию — не видел, наверное, тот ужас, который творится в друпале.

Я негодую.
shoorick: (Default)
Понадобилось перенести сайт с малоизвестной CMS на Drupal. Две недели гуглил и читал крохи найденной документации. Понял, что общедрупальный бардак с документацией в полной мере относится и к модулям: например, в рекомендуемом для переездов модуле Migrate я так и не смог за эти две недели разобраться: вместо внятного руководства — какие-то блоги да презентации, целевой аудиторией имеющие телепатов. Человеку, даже знающему PHP и умеющему слегка настраивать Drupal, но не писавшему под него модулей, что-либо понять в таком мануале, а тем более, сделать работающий пример — нереально.

Плюс к тому меня вот уже который год удивляет адресация на друпальных сайтах: их авторы вместо того, чтобы сделать правильные адреса, оставляют всё как есть. Даже на drupal.org полно страниц с адресами типа /node/шестизначный_номер.

Дело кончилось тем, что за день я написал перловый скрипт, который и перегнал мне данные (хотя как-то не совсем правильно), выдав в итоге кучу SQL-запросов. Сами данные также были предварительно обработаны перлоскриптами.
shoorick: (Default)
Ковыряю шестой Drupal, а точнее — сделанный на нём OpenPublish. В его установщике нашёл чудесное: он ищет файлы, обходя дерево каталогов. Вместо того, чтобы один раз обойти дерево, записать его в память и потом обращаться сразу к памяти, это $%#$@# чудо каждый раз, для каждого файла, вызывает функцию поиска, которая рекурсивно вызывает саму себя и, за счёт большого количества файлов в дереве, помирает, не уложившись в допустимое время. Попробовал увеличить время жизни до рекомендованных двух минут (даже до четырёх пробовал) — всё равно не успевает. Попробую увеличить до десяти...

upd/17:25: Проработал 5 минут и молча сдох, даже не сказав в лог, почему. За это время функция file_scan_directory была вызвана почти 60 тысяч раз.
shoorick: (Default)
Когда я был маленький в прошлом тысячелетии только-только начинал осваивать HTML и ничего не знал ни про .htaccess, ни про httpd.conf, в некоторых каталогах, не предназначенных для просмотра посетителем, оставлял маленький файлик-перенаправление index.html, простой до безобразия:
<meta http-equiv="Redirect" content="0;URL=somewhere">
Оказывается, в природе существуют люди, которые и по сей день разбрасывают файлы. Но ещё проще — без перенаправления: либо пустые, либо вот такие:
<html><body bgcolor="#FFFFFF"></body></html>
Не иначе, боятся обидеть посетителя 403-й ошибкой, а .htaccess отредактировать религия не позволяет.

Веселее другое — эти люди ещё и популярную CMS выпускают по имени Joomla! Я только что на одном подопытном сайте насчитал почти 700 таких файлов. Зачем они там?!
shoorick: (Default)
Столкнулся со странным поведением пхпшной функции is_dir: для некоторых (не всех) существующих каталогов она возвращает false. От наличия прав чтения/записи/исполнения проверяемого каталога ситуация не зависит.

FreeBSD 6.2, Apache 1.3.34, PHP 4.4.6.

Куда смотреть, что делать?
shoorick: (Default)
Пытался найти в завалах своих перлоскриптов функцию, возвращающую правильное слово в зависимости от идущего перед ним числа. Не нашёл. Пришлось взять валяющийся на видном месте пример на php и перевести его на перл:
=head1 METHODS

=head2 after_number

Возвращает, в зависимости от $howmany, правильную форму слова:
after_number(10, 'ив', 'ива', 'ивы') == 'ив'
after_number(21, 'ив', 'ива', 'ивы') == 'ива'
after_number(32, 'ив', 'ива', 'ивы') == 'ивы'

=cut

sub after_number	{
	my ($howmany, $s0, $s1, $s2) = @_;
	return $s2 if ($howmany != int $howmany);	# Нецелое число: 1.5 землекопа
	my $c = $howmany % 100;	# Оставляем 2 последних цифры
	# Особые варианты: x11..x14
	return $s0 if ($c >= 5 && $c <= 20);

	$c %= 10;	# Оставляем последнюю цифру
	return $s1 if ($c == 1);
	return $s2 if ($c >= 2 && $c <= 4);
	return $s0;
} # sub after_number
Чую, пора на CPAN выкладывать, чтобы в следующий раз не искать.
shoorick: (Default)
http://verplant.org/perl.vs.php.shtml помимо серьёзных аргументов содержит и такое:
  • Ich kenne einige Perl-Freaks aber kaum (fähige) PHP-"Programmierer".
  • Das Perl-Logo ist definitiv cooler.
  • Es gibt coole Perl-T-Shirts.
  • Larry Wall gibt coole Zitate von sich.
  • slashdot benutzt Perl
  • "hash" klingt besser als "associative array".
upd: Что по-русски значит:
  • Я знаю некоторых Perl-фриков, но вряд ли знаком с PHP-"программистами".
  • Логотип Перла определённо круче
  • Есть классные перловые футболки.
  • У Ларри Уолла есть классные цитаты.
  • slashdot использует Perl
  • "хэш" звучит лучше, чем "ассоциативный массив".
shoorick: (Default)
Очередная порция дров в костёр holywar:
PHP in contrast to Perl: Training Wheels without the Bike.
В общем-то, я уже знаю, что перл рулит, а пхп — нифига. Тут — очередная пачка аргументов:
shoorick: (Default)
Хозяйке на заметку:
function ru_numeral ($howmany, $s0, $s1, $s2)
{
// Возвращает, в зависимости от $howmany, правильную форму слова:
// ru_numeral(10, 'ив', 'ива', 'ивы') == 'ив'
// ru_numeral(21, 'ив', 'ива', 'ивы') == 'ива'
// ru_numeral(32, 'ив', 'ива', 'ивы') == 'ивы'
	$c = $howmany % 100;	// Оставляем 2 последних цифры
	// Особые варианты: x11..x14
	if (($c >= 5) && ($c <= 20)) return $s0;

	$c %= 10;	// Оставляем последнюю цифру
	switch ($c)
	{
		case 1:
			return $s1;
		case 2:
		case 3:
		case 4:
			return $s2;
		default:
			return $s0;
	} // switch
} // function ru_numeral
Где-то валялось то же самое на перле.
shoorick: (Default)
} // if право имеет
else
{
// тварь дрожащая
shoorick: (Default)
  1. Поставил на подопытную машину аналог Денвера — помесь перла (с мод_перлом и HTML::Mason), пхп, апача, изначально нацеленного на отладку перлоскриптов;
  2. Читаю «Embedding Perl in HTML with Mason», пробую запускать примеры оттуда;
  3. Спрашивается в задаче: нафига я осваиваю PHP n лет и сочиняю перловые собственные модули n+k лет? Всё украдено придумано до нас...
shoorick: (Default)
А вот что говорят граждане Рольский с Вильямсом (Dave Rolsky, Ken Williams) в книжке «Embedding Perl in HTML with Mason» насчёт отношения перла с библиотеками (в частности, с масоном) и пхп: здоровенная цитата на ангельской мове )

Profile

shoorick: (Default)
shoorick

December 2016

S M T W T F S
    1 23
45678910
11121314151617
18 19 2021222324
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 26th, 2017 04:18 pm
Powered by Dreamwidth Studios