Письменництво з Git

Протягом певного часу я застосовую т.зв. керування версіями до текстів. Це дає мені можливість:

  1. бачити зміни, які я зробив відносно останньої «зафіксованої» версії файлу;
  2. порівнювати між собою будь-які з раніших версій файлу;
  3. паралельно працювати над кількома варіянтами того ж файлу, які відрізняються у певних місцях, але мають значну частину спільного тексту; тобто спробувати, наприклад, переробити певний розділ і подивитись «що із того вийде», залишивши стару версію цього розділу доступною до повернення в документ навіть після будь-якого редагування инших розділів;
  4. синхронізувати версію одного файлу із версією другого (наприклад, текст із ілюстрацією);
  5. відіслати комусь документ для редагування й переглянути усі корекції при отриманні; обирати, яку корекцію прийняти, а яку ні.

Це далеко не вичерпний перелік. Як це працює? У вас є тека з файлами, а всередині цієї теки є під-тека .git, де зберігаються попередні версії файлів та інформація про послідовність та зв’язок між змінами. Єдина вимога — навчити вашу систему керування версіями порівнювати різні версії файлів того формату, в якому ви пишете ваш текст.

Продовжити читання «Письменництво з Git»

Час із різних часових поясів з допомогою GNU date

Сьогодні о 2-й годині дня за Новим Йорком NASA розпочнуть трансляцію, присвячену польоту астероїда 2012 DA14 біля нашої планети. На сайті NASA подано час «2 p.m. EST». Як дізнатись, яка це буде година в тому місці планети, де перебуваєте ви?

У кожній системі GNU/Linux (а також инших системах, якщо додатково заінсталювати) є команда date. Якщо просто відкрити термінал і запустити її, вона видасть вам поточну дату, день тижня, час і часовий пояс. Але це далеко не все, що вона вміє робити.

Продовжити читання «Час із різних часових поясів з допомогою GNU date»

Git annex: розподілене зберігання великих файлів

Хочу познайомити вас із дивовижним знаряддям на ім’я git-annex. Зацитую український Вікіпідручник програми:

«Уявімо, що у вас є переносний компутор з невеликим вінчестером. Також у вас є стаціонарний компутор, на який і з якого ви можете пересувати через мережу файли. Ви працюєте, і в певний момент вам бракне місця на переносному компуторі — й ви пересуваєте частину файлів на стаціонарний. А ще частину — на зовнішній вінчестер. І ви опиняєтесь в становищі, коли ваші дані розпорошені між трьома різними пристроями.

Чи не чудово було б, якби в кожен такий момент ви могли продовжувати бачити перелік усіх ваших файлів, а також мали можливість легко отримати будь-який з них, не шукаючи перед тим півдня, на якому пристрої ви його розмістили? І якщо вам треба «розчистити» місце для отримання інших файлів, бути певними, що ви не вилучите файли, яких більше ніде немає? І ще: якщо ви змінюєте, переміщуєте чи перейменовуєте файли на одному з ваших пристроїв, щоб ці самі зміни автоматично відтворювались і на решті ваших пристроїв, на які ви скопіювали свої файли? Ви, мабуть, довго мріяли про таку можливість, чи не так?»

Git-annex забезпечує вам такі можливості. Огляд та приклади використання програми можна прочитати у Вікіпідручнику (який можна також редагувати й доповнювати), тому дублювати їх тут немає сенсу. Скажу тільки, що якщо система керування версіями git є дуже вдалим інструментом для роботи з кодом програм та текстовими документами, то git-annex (який, як ви, мабуть, здогадались, працює на основі git) — настільки ж вдалим знаряддям для синхронізації та розподіленого зберігання великих об’ємів даних між різними присторями. Git-annex, на відміну від простого git, не зберігає повної історії кожного файлу, завдяки чому добре пасує до зберігання великих бінарних файлів, як то звукові чи відео-записи. Крім того, програма дає можливість мати в репозиторії тільки частину повного набору його файлів, а решту зберігати в инших репозиторіях-клонах.

Тобто зберігання самих даних відділене від зберігання структури тек та історії дій. При тім, git-annex дбає, щоб кожен файл зберігався хоча б в одному з репозиторіїв-клонів. Таким чином ваші дані є упорядкованими незалежно від того, на скількох пристроях вони зберігаються.

Якщо вас зацікавила програма, її Вікіпідручник допоможе ознайомитись із нею глибше.

Чому слід використовувати ogg (vorbis) замість mp3

В тому, щоб попрощатись з mp3, є дві потреби, одна етична, друга — практична.

Почнемо з другої.

Один пан зробив гарний експеримент: він закодував звуковий файл різними форматами на кількох щаблях якости так, щоб на кожному зі щаблів отримати найбільш подібні розміри файлу в різних форматах. Ми підемо трохи далі й спробуємо з допомогою програми Audacity порівняти результати, які він отримав для mp3 та ogg. Критерієм слугуватиме аналіз звукових частот, наявних у файлі. Для цього ми скористаємось функцією «Побудувати графік спектру». Хоча такий аналіз показує далеко не все, він може бути гарною підказкою, якщо ви хочете перевірити, наскільки сильно змінився ваш файл після збереження з тим чи иншим параметром стиснення (майте на увазі: після закодування Audacity продовжує працювати з нестисненим оригіналом, тому для порівняння якости ви мусите окремо відкрити ваш закодований файл).

Продовжити читання «Чому слід використовувати ogg (vorbis) замість mp3»

Пошук українською

Задача — хочу шукати у мережі українською мовою. Пошуковики, як на мене, видають забагато результатів російською, це не відповідає моїй внутрішній політиці пріоритетів щодо рейтингів сайтів blah-blah-blah. Хочу — і все.

Для мене — користуюся Firefox’ом та шукаю в Google — вирішення виявилося досить простим: почитав про параметри пошуку Google, почитав по створення модуля пошуку для Firefox і зробив.

Сподіваюся, для тих, хто користується іншими переглядачами/пошуковиками, також щось таке знайдеться. Трохи згодом спробую розширити свої знання з цього приводу і поділитися.

Виявилося, це чудово працює і для Google Chrome — треба лише у віконечку, що вигулькне, змінити «ключове слово» з google.com на щось інше, та у налаштуваннях пошуку Chrome знайти MyGoogle серед «Інших пошукових систем» та встановити його «за умовчанням». І все чудово працює .)

Також замість пошуковика Google можна вписати (у XML файл, див. нижче) будь-який інший, треба лише знати параметри запиту (їх назви) для здійснення пошуку.

Не знаю, чи працюватиме це як треба скрізь :О) Бо використовується ie=uft-8&oe=utf-8. Цікаво, що буде, якщо їх не вказувати зовсім; спробую пізніше.

Релізація і сам модуль (встановіть і собі) »»

git та українські назви файлів

Якщо git status показує українські назви файлів як «"\320\277\321..."», спробуйте запустити комадну git config --global core.quotepath off. (Запозичено з http://stackoverflow.com/a/5855213/1142039).

Зберігання паролів у Emacs

Ми реєструємось на безлічі інтернетних ресурсів, і бажано на кожному із них використовувати пароль, який ви більше ніде не використовуєте. Тут ми опишемо як можна організувати зручну й незалежну від вебної переглядалки базу з паролями в простому текстовому файлі, зашифрованому через GPG, і зручно користуватись нею в текстовому редакторі GNU Emacs.

Для цього треба:

  1. Мати або створити власну пару ключів GPG;
  2. Налаштувати зберігання записів з допомогою функції forms-mode;
  3. Організувати собі функції-помічники, які б дозволили легко здійснювати пошук у базі і додавати до неї записи.

Це ми й спробуємо зробити.

Продовжити читання «Зберігання паролів у Emacs»

WordPress: грати всі долучення

Нещодавно мені закортіло написати короткий код (shortcode) для вставляння програвача з переліком всіх долучених до публікації аудіофрагментів.

Тобто, я хочу до даної публікації доліпити кілька mp3 файлів, підписати їх і у публікації використати якийсь короткий код… Словом, нижче.

У файлі functions.php дописуємо таке:

function get_player( $post ) {
  $urls    = array();
  $titles  = array();
  $artists = array();
 
  $attachments = get_children(
      array('post_parent' => $post->ID,
            'post_type' => 'attachment',
            'post_mime_type' => 'audio/mpeg',
            'order_by' => 'menu_order', 'order' => 'ASC'));
  if( $attachments ) {
    foreach ( $attachments as $att_id => $att ) {
      // allow non-latin chars in file names:
      $url = wp_get_attachment_url($att_id);
      $url = preg_replace('#(.*/)([^/]*)$#e', "'\\1'.rawurlencode('\\2')", $url);
      $url = rawurlencode( $url );
      $urls[] = $url;
 
      $title  = rawurlencode( str_replace(",", ":", $att->post_title) );
      $titles[] = $title;
 
    }
    $player_id = 'audioplayer-' . $post->ID;
    $player = '<p class="audioplayer_container"><div class="np-audioplayer" id="'. $player_id .'">(No Adobe Flash Player?..)</div></p>' . "\n"
            . '<script type="text/javascript">' . "\n"
            . '    AudioPlayer.embed("' . $player_id . "\", {\n"
            . '      soundFile: "' . implode(",", $urls)    . "\" // ,\n"
            . '      titles: "'    . implode(",", $titles)  . "\"\n"
            . "    });\n"
            . "</script>\n";
    return $player;
  }
  return false;
}
 
function playall( $atts ) {
  global $post;
  return get_player($post);
}
 
add_shortcode( "playall", "playall" );

Після цього ми можемо у тілі повідомлення написати [playall]. Ось тут — невеличка демонстрація.

Чому двічі rawurlencode? Не знаю 🙂

До речі, у налаштуваннях вордпресівського Audio Player’а треба вимкнути «криптування» посилань.

bc як конвертор основи

Утиліту bc (an arbitrary precision calculator language) можна досить зручно використовувати для конвертування чисел між основами, в тому числі у скриптах:

$ echo "ibase=16; obase=2; 5F" | bc
1011111
 
$ echo "ibase=16; obase=8; 32" | bc 
62
 
$ echo "ibase=10; obase=4; 12" | bc 
30

Може, комусь і згодиться.

Календар нашвидкуруч

  1. Запускаємо inkscape. Розгортаємо на весь екран, натискаємо п’ятірку («вписати документ у вікно»).
  2. Додатки –> Відтворити –> Календар
  3. На закладці «Локалізація» вписуємо назви місяців, днів тижня; на закладці «Кольори» можемо експериментувати з кольорами. Вибираєте системне кодування:
  4. О, до речі, у «Налаштуваннях» вибираємо понеділок як перший день тижня.

  5. Натискаєте «Застосувати». Як бачите, вікно налаштувань не ховається; при цьому на календарі можна клацнути (виділити його), щоб редагувати, посунути, видалити тощо:
  6. Тобто, зараз календар можна видалити, змінити налаштування і знов натиснути «Застосувати».

Додаткові «бантики» »»