четверг, апреля 18, 2013

Perl. Сортировка ключей хеш-массива по значениям этих ключей



В процессе выполнения тестовых заданий для новой работы столкнулся с задачей вывода сортированных данных.
Итак, имеем структуру:
$VAR1 = bless( {
                 'DOMAINS' => {
                                'yandex.ru' => 1,
                                'INVALID' => 5,
                                'rambler.ru' => 1,
                                'vk.com' => 1,
                                'mail.ru' => 2
                              }, 
               }, 'MyModule' );
необходимо выводить данные хеш-массива DOMAINS, отсортированные по значениям(values) данного массива.
Недолго думая обратился за ответом к замечательной книге Perl: изучаем глубже, в которой было найдено решение:
foreach my $domain (sort { $self->{DOMAINS}->{$b} cmp $self->{DOMAINS}->{$a} } 
                keys $self->{DOMAINS}) {
        print $domain . "\t" . $self->{DOMAINS}->{$domain} . "\n";
    }
В результате получаем то, что требовалось:
INVALID 5
mail.ru 2
yandex.ru 1
rambler.ru 1
vk.com 1

Perl. Перехват warn'ов и carp'ов



Сейчас немного про перл.
В перле есть замечательная функция eval, которая умеет перехватывать критические ошибки, которые были вызваны die и/или croak. Но эта функция не умеет работать с предупреждениями, которые генерируются с помощью функций warn и carp. Ну и что такого, спросите вы, предупреждения для того и существуют, чтобы информировать пользователя/разработчика о некорректной работе скрипта или модуля. Но порой всё-же требуется, чтобы наш скрипт, написанный на перле, умел перехватывать подобные сообщения, сгенерированные модулями или функциями, чтобы, например, обрабатывать подобные сообщения особым образом.

Отображение киррилицы(cp1251/win1251) в Sublime Text 2


Файлы в редакторе Sublime Text 2 по умолчанию открываются в кодировке UTF8, но иногда требуется работать с файлами, которые были созданы в кодировке cp1251(кодировка, используемая по умолчанию в операционных системах семейства Windows).
Для этих целей вы можете переназначить fallback-кодировку, которую будет использовать сублим текст, если файл не в кодировке UTF8.
Для этой цели откройте меню Preferences -> Settings - Default. В открывшемся окне воспользуйтесь поиском(ctrl-f), найдите строку
"fallback_encoding": "Western (Windows 1252)",
и замените её на
"fallback_encoding": "Cyrillic (Windows 1251)", (запятая в конце строки обязательна!).
Сохраните файл. Отлично! Теперь сублим текст умеет открывать файлы в кодировке cp1251 корректно и ваша жизнь станет чуточку проще)

воскресенье, апреля 14, 2013

Добавление в Sublime Text 2 горячих клавиш для работы с языком Perl


В повседневной работе использую этот замечательный редактор. Всем он хорош - подсветка синтаксиса, скорость работы, автоподстановка. Только сильно не хватало мне горячих клавиш для проверки синтаксиса и запуска скрипта на perl. Sublime Text 2 позволяет в данном случае забиндить на стандартную комбинацию(ctrl-b) только одно действие.
После недолгого гугления было найдено решение, написанное для языка Go и без проблем адаптированное для Perl.
Для начала необходимо создать свой плагин. Для этого открываете Tool->New Plugin. Вводите следующий код:
import sublime, sublime_plugin 
   
class RunBuildCommand(sublime_plugin.WindowCommand): 
    def run(self, build_system): 
        self.window.run_command( "set_build_system", {"file": build_system } )
        self.window.run_command( "build" )

Сохраняете данный плагин под именем RunBuild.py
После этого в папке ~/.config/sublime-text-2/Packages/User создаёте два файла следующего содержания:
~/.config/sublime-text-2/Packages/User/Perl-build.sublime-build :
{
    "cmd": ["/usr/bin/perl", "$file"],
    "file_regex": ".* at (.) line ([0-9])",
    "selector": "source.perl"
}

~/.config/sublime-text-2/Packages/User/Perl-check.sublime-build :
{
    "cmd": ["/usr/bin/perl", "-c", "$file"],
    "file_regex": ".* at (.) line ([0-9])",
    "selector": "source.perl"
}

После этого открываете Preferences->Key Binding - User и добавляете следующие строчки:
[
    {
        "keys": ["alt+c"],
        "command": "run_build",
        "args": {
                "build_system": "Packages/User/Perl-check.sublime-build"
        }
    },
    {
        "keys": ["alt+b"],
        "command": "run_build",
        "args": {
                "build_system": "Packages/User/Perl-build.sublime-build"
        }
    }
]
После этого у вас на комбинациях alt-c и alt-b появляются проверка синтаксиса и выполнение скрипта соответственно.

среда, апреля 10, 2013

Меняю направление деятельности


Решил поменять сферу деятельности, переквалифицироваться в программиста.
Если честно, давно уже думал соскочить с админства, т.к. всё это обслуживание телефонного парка порядком приелось, хочется чего-то нового.
Сегодня(уже вчера, получается) было небольшое собеседование по телефону. Отныне буду перловым разработчиком в одной крупной компании. Для того, чтобы меня окончательно взяли на работу необходимо выполнить 2 тестовых задания. Одно уже сделал, со вторым разбираюсь, курю мануалы по фреймворку catalyst. Но с телефонией я не прощаюсь, хочу лишь подойти к ней с другой стороны, с позиции разработчика. Для этого сейчас активно прокачиваю свои навыки в программировании, в частности, читаю умные книги по C/C++. В общем, посмотрим, что будет дальше. Удачи мне.

понедельник, апреля 08, 2013

Проблема с работой Mantis после обновления Postgresql


Столкнулся на работе с такой неприятностью - после обновления СУБД Postgresql с версии 8.4 до версии 9.1 перестали подгружаться прикреплённые файлы в тикетах мантиса. После того, как спала паника начался судорожный поиск решения проблемы. Был даже запилен трабл-тикет на багтрекере мантиса. Но в итоге всё оказалось проще.
В 9-й версии поменяли формат вывода данных типа bytea. Для того, чтобы решить проблему потребовалось ввести в базе мантиса следующий запрос:
ALTER DATABASE bugtracker SET bytea_output='escape'
Данный запрос устанавливает формат вывода bytea таким же, какой был в версии 8.4. После проделанной процедуры всё успешно заработало.