Архив рубрики: software

Забывчивый верстак

MySQL Workbench — графический клиент к популярной СУБД MySQL — штука хорошая. Я, пожалуй, поставил бы его на второе место среди известных мне клиентов, но в связи с тем, что самый с моей точки зрения лучший клиент — EMS Studio for MySQL — сейчас выпускается только под винду, приходится использовать всё-таки верстак воркбенч.

Среди нужных мне функций — сохранение паролей к базам данных и SSH-туннелям до них: достаточно ввести один раз, поставить галочку, что пароль должен быть сохранён, и всё — пароль сохранится в Gnome Keyring. Точнее, сохранялся в предыдущих версиях, а в 6.2 эта штука сломалась. Пишут, что в версиях 6.2.5 и 6.3.0 проблема устранена, но у меня установлена более древняя версия.

Проблема решается путём присваивания переменной окружения GNOME_KEYRING_CONTROL значения 1 — можно сделать это прямо в файле /usr/bin/mysql-workbench

#!/bin/bash

# Uncomment the following line if you're having trouble with gnome-keyring lockups.
# This will cause passwords to be stored only temporarily for the session.
#WB_NO_GNOME_KEYRING=1
export GNOME_KEYRING_CONTROL=1

/usr/bin/workbench

После этого MySQL Workbench пароли всё-таки запоминает.

Выпускаем джинна

Похоже, с нынешней тенденцией писать редакторы на яваскрипте и запихивать в них ещё и тормозящий браузер, придётся переходить всё-таки на лёгкий софт, потому что не только монстр Komodo тормозит, но даже якобы не такие уж и тяжёлые Atom и Visual Studio Code не отличаются достойной скоростью.

Vim шустр, но всё-таки без постоянной практики его клавиатурные команды забываются. GEdit управляется более знакомыми клавишами, но слишком прост (хотя там за счёт плагинов можно подключить всякие интересные возможности).

geany

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

Statt zu schlafen

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

Могу:

  • Программировать на Перле — как древние 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 (нем.) — вместо того, чтобы спать

Re: А воз и ныне там

Раз уж в третьем OJS так и не добавили многоязычность, попробую портировать свой хак на последнюю из версий второй ветки — 2.4.8.1. В прошлый раз, когда портировал из 2.4.2 на 2.4.7.1, обошёлся изменением не более, чем семидесяти трёх файлов, хотя если поискать все, где попадаются слова firstname, middlename, lastname, fullname и citation, получится почти в пять раз больше. И это ещё без учёта файлов с переводами */locale/*.xml

diff

Поглядим через неделю-другую, что получится.

Рельсы мимо шахты

Пробую запустить тестовую копию свежего Редмайна:

$ bundle exec rails server
=> Booting WEBrick
=> Rails 4.2.6 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2016-09-28 13:45:09] INFO  WEBrick 1.3.1
[2016-09-28 13:45:09] INFO  ruby 2.3.0 (2015-12-25) [x86_64-linux]
[2016-09-28 13:45:09] INFO  WEBrick::HTTPServer#start: pid=8196 port=3000

Ну да, запускается, но входящих соединений не видит. Если запускать командой bin/rails server — аналогично.

Оказалось, что сервер, слушая по умолчанию соединения с локалхостом, игнорирует те, где указано любое другое имя. Если его указать — всё получается.

bundle exec rails server -b your.host.ru

Запущен отладочный сервер Redmine

А воз и ныне там

В Open Journal Systems данные людей — пользователей и авторов — могут быть только на одном языке. В багтрекере уже шесть лет висит bug 5598 — allow for author names in multiple languages. В последнем комментарии разработчик честно сообщает:

This hasn’t yet been prioritized for a specific release, but I’d say it’s very unlikely to be implemented for OJS 2.x; it’ll become a higher priority after OJS 3.0 is released.

Итак, OJS 3.0.0 вышла — и действительно, ничего не поменялось: раз эта задача не была приоритетной, то и многоязычности нет.

SQL-запрос

Значит, придётся и дальше поддерживать свой хак, пытаясь всё-таки сделать из него нормальный плагин.

Нормальные герои всегда идут в обход

После всей суеты с обновлением операционной системы на окружающих меня компьютерах наконец-то везде, где надо, установил свежий нотный редактор MuseScore. Как и было обещано разработчиками MuseScore, экспорт в LilyPond оттуда убран, но зато экспорт в MusicXML исправлен: если этот XML-файл при помощи musicxml2ly преобразовать в формат Лилипонда, то на получившийся файл Лилипонд не ругается, как это было в 2013 году. Тексты в XML- и ly-файлах — в правильной кодировке и не теряются (так было в 2009). Единственный сразу заметный недостаток — гадкая кириллица, но это легко чинится заменой гарнитуры на какую-нибудь другую: Обыкновенную новую либо Журнальную.

Ноты

Справился с ошибкой svn E155010

Решил как-то добавить древние файлы в систему контроля версий, да не смог:

$ svn st | grep -e '^\?' | cut -c9-999 | xargs svn add
A         noframe.html.en
svn: E000013: Can't create temporary file from template '/usr/local/www/path/to/svn-XXXXXX': Permission denied

Оказалось, не имел права писать во временный каталог Subversion .svn/tmp где-то выше. Изменил права, повторяю попытку добавления — фиг:

$ svn st | grep -e '^\?' | cut -c9-999 | xargs svn add
svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted

Команда svn cleanup тоже не помогла

$ svn cleanup
svn: E155010: The node '/usr/local/www/path/to/af_0011.html.ru' was not found.

Гугление с чтением форумов не особо помогло — пришлось ковырять базу данных, где Subversion хранит состояние рабочей копии — это файл .svn/wc.db, для работы с которым нужен SQLite. Будете ковырять — не забудьте сделать резервную копию!

$ sqlite3 wc.db

sqlite> SELECT * FROM LOCK;
sqlite> SELECT * FROM WC_LOCK;
1|path/to|-1
sqlite> DELETE FROM WC_LOCK;
sqlite> SELECT * FROM WORK_QUEUE;
26|(sync-file-flags path/to/af_0011.html.ru)
sqlite> DELETE FROM WORK_QUEUE;

В моём случае сработало.

Всюду яваскрипт

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

ls ~/bin/komodo/lib/mozilla

Красим школы и стоянки

В прошлых сериях экспериментов с ТайлМиллом доводилось раскрашивать находящиеся в университетском городке здания и добавлять номера домов. Теперь попробуем раскрасить какую-нибудь территорию, да и здания можно перекрасить как-нибудь иначе. Заодно и повод подвернулся: авторы сайта mapstr.ru решили поменять самодельную карту Стерлитамака на OpenStreetMap — там город неплохо отрисован (хотя, конечно, есть ещё, что улучшать), им в целом нравится стиль, которым отрисована карта окрестностей нашего университета, но им хочется, чтоб было как в ДубльГИСе — чтоб стоянки, дворы и частный сектор были залиты разными цветами. Ну и школы с детсадами хочется выделить цветом.

Делаем так:

1. Перед импортом данных OSM в PostGIS в файле imposm-mapping.py указываем, что нам нужно предназначение здания, а относится ли оно к университету, нас не интересует:

buildings = Polygons(
    name = 'buildings',
    fields = (
        ('area', PseudoArea()),
        ('addr:housenumber',String()),
        ('building:levels',Integer()),
        ('height',Integer()),
        ('amenity',String()),
    ),
    mapping = {
        'building': (
            '__any__',
        ),
        'railway': (
            'station',
        ),
        'aeroway': (
            'terminal',
        ),
    }
)

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

landusages = Polygons(
    name = 'landusages',
    fields = (
        ('area', PseudoArea()),
        ('residential', String()),
        ('z_order', ZOrder([
            'pedestrian',
             ...

2. Импортируем данные.

3. Запускаем TileMill, выбираем нужный проект, идём в свойства слоёв, путём редактирования фрагмента SQL-запроса добавляем поля:

  • amenity — к слою #buildings
  • residential — к слоям #landuse, #landuse_gen0, #landuse_gen1

4. Исправляем стилевые правила:

В базовом файле base.mss указываем необходимость особенной заливки частного сектора

#landuse[zoom>12] {
  [type='allotments']    { polygon-fill: @agriculture; }
  // ...
  [type='residential']   {
    polygon-fill: @residential;

    [residential='rural']   {
      polygon-fill: @rural;
    }
  }
}

а также зданий образовательных учреждений: детских садов, школ, ПТУ/техникумов/колледжей и институтов/академий/университетов:

// At the highest zoom levels, render buildings in fancy pseudo-3D.
// Ordering polygons by their Y-position is necessary for this effect
// so we use a separate layer that does this for us.
    [type != 'hedge'] {
     building-fill: @building;
     building-height: 2 + [building:levels] * 2;
     [height>0] {
       building-height: 2 + [height] / 1.5;
     }

      // Our buildings
      [amenity = 'kindergarten'] {
        building-fill: @kindergarten_building;
        line-color:darken(@kindergarten_building,10%);
      }

      [amenity = 'school'] {
        building-fill: @school_building;
        line-color:darken(@school_building,10%);
      }

      [amenity = 'college'] {
        building-fill: @college_building;
        line-color:darken(@college_building,10%);
      }
      [amenity = 'university'] {
        building-fill: @university_building;
        line-color:darken(@university_building,10%);
      }
    }

    [type = 'hedge'] {
      building-fill:@wooded;
      building-height:1.25;
    }
  }
}

добавляем цвета в палитру palette.mss

@residential:       #e9e1cd;
@rural:             #ece2b5;
@commercial:        #e7e0f4;
@industrial:        #eeeeee;
@parking:           #e5eaf0;

/* Buildings */
@building:          #bbaa99;
@educational_mix:   #0099ff;

@kindergarten_building: mix(@building, @educational_mix, 90%);
@school_building:       mix(@building, @educational_mix, 85%);
@college_building:      mix(@building, @educational_mix, 80%);
@university_building:   mix(@building, @educational_mix, 75%);

Результат — на http://mapstr.ru/map/

Фрагмент карты Стерлитамака