Смена hostname андроида

Стандартно android-устройства имеют hostname вида android-<imei-number>.

Для того чтобыизменить это необходимо в /system/build.prop добавить строчку net.hostname=<hostname>, где <hostname> — желаемое имя.

Пакеты ruby для ubuntu

В 14.04 lts-версии убунты до сих пор используется ruby 2.0 (который зачем-то в зависимостях тащит за собой 1.9).
Есть куча способов решить эту проблему и почти все из них требуют самостоятельной сборки из исходников. Поэтому пришлось искать ppa. Выбрал этот от Brightbox. В репозитории есть пакет версий 2.2, 2.1, 2.0, 1.9.3 и 1.8.7 (причем два последних с патчами для произовдительности). Думаю что хостнг для себя собирает правильно.

brother hl-2130 и linux

Потребовалось настроить печать с помощью принтера Brother HL-2130 в линуксе. Причем необходимость такая возникает не в первый раз, и каждый раз приводит к долгому гуглению.

Вообще производитель предоставляет дравера (в виде rpm или deb пакетов). Но только для ахритектуры i386. А целевая система — arm.

Необходимо установить cups, hplip, hpijs, foomatic-filters, foomatic-db-engine и запустить cups. После чего при добавлении принтера выбрать Or Provide a PPD File: Choose file и выбрать файл скачанный отсюда. Файл для Brother HL-2140, но подходит и для HL-2130.

Возможности c++11

Недавно узнал о нескольких новых возможностях с++11. Они настолько удобные, что непонятно, как я раньше о них не узнал.

range-based циклы

Если у объекта есть методы begin() и end(), то вместо обычного for с итераторами можно использовать такой:

std::vector<int> vec;
//наполняем вектор значениями
for (auto& it: vec)
{
	//делаем все что нужно
}

Подходит это способ не всегда, т.к. внутри цикла мы ничего не знаем о позиции элемента в контейнере.

auto

Ключевое слово auto позволяет не указывать тип переменной, разрешая компилятору самому вычислить тип. Как в примере выше вместо std::vector<int>::const_iterator.

nullptr

Ключевое nullptr слово специального типа std::nullptr_t. Сущестуют неявные преобразования к нулевому указателю любого типа. Подробнее.

raw string literal

Позволяет не экранировать символы. Использование показано в следующем примере в конструкторе регулярного выражения. Подробности.

regex

Регулярные выражения. Просто приведу пример того как я использовал. Необходимо было вытащить данные о загрузке сети из /proc/net/dev:

std::ifstream stream;
std::regex rgx(R"%(^.*(lo|eth\d):\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+\d+\s+\d+\s+\d+\s+\d+\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+\d+\s+\d+\s+\d+\s+\d+.*$)%");
std::smatch m;
stream.open("/proc/net/dev", std::fstream::in);
if (stream.fail())
{
	return -1;
}
while (!stream.eof())
{
	std::getline(stream, tempString);
	std::regex_match(tempString, m, rgx);

	if (m.empty())
		continue;

	//достаем из массива m все что нам нужно.
}

Подробнее можно почитать тут. Тут следует отметить, что в gcc нормальная поддрежка регулярных выражений появилась начиная с версии 4.9, версия 4.8 бросала исключения из конструктора.

остальное

Также в стандарте появлись еще некоторые интересные вещи: лямбда-функции, constexpr(спецификатор указывающий на возможность вычисления во время компиляции), static_assert (кидает ошибку компиляции, если не выполнилось условие), final и override спецификаторы виртуальных функций и наверное что-то еще. Из перечисленных в прошлом предложени использовал лямбды, про остальное только читал.

Плагин спойлер для Jekyll

Глядя на длиннющий gist из прошлого поста начал искать плагин, создающий спойлер. Оказалось что в html5 для этого есть специальный тег <details>. Из минусов — не работает в IE и Firefox’e, но те кто их использует сами виноваты.

Осталось только написать простой плагин и положить его в папку _plugins.

Код плагина

Использование тоже простое:

{% spoilerblock Заголовок %}
Текст спойлера
{% endspoilerblock %}

Деплой блога по веб-хуку после коммита

Написал небольшой скрипт на руби, который по коммиту в указанную ветку git-репозитория обновит блог. Скрипт писался для gitlab’а, документацию по веб-хукам можно гляднуть тут.

Код скрипта

Код конечно немного корявый, но все должно быть понятно.

Чтобы скрипт висел сервисом пришлось написать еще конфиг для upstart’а.

Текст конфига

Переезд на jekyll

Перенес блог на jekyll. До этого использовался движок E2 Эгея от Ильи Бирмана. Отличный движок для личного блога,но мне захотелось чего-то более простого в плане требований.

Jekyll — генератор статических сайтов. Ему не нужны базы данных, все посты и страницы — markdown или html файлы файлы.

На данный момент я использую предрелизную версию (v3.0.0.pre.beta4), т.к. в ней добавили инкрементальный билд (пересоздаются только измененные файлы). Вместе с плагинами Gemfile выглядит так:

source 'https://rubygems.org'
gem 'jekyll', '~>3.0.0.pre.beta4'
gem 'rouge' #syntax highlight
group :jekyll_plugins do
  gem 'jekyll-tagging'
  gem 'emoji_for_jekyll'
  gem 'jekyll-paginate'
  gem 'jekyll-compose' #jekyll post, jekyll draft, jekyll publish
end

Т.к для создания собственных стилей у меня оказалось мало опыта, использовал тему Hyde с небольшими изменениями:

Осталось настроить автоматическую сборку сайта по коммиту в репозиторий (одним из плюсов jekyll’а является то что его можно хранить в git-репозитории).

Производители железа и их SDK

Ситуация первая: Захотелось тут на работе на днях перейти на более новую версию Xilinx SDK (пользовался 2013.4, а уже есть 2014.3). Скачал, установил, запускаю — ничего не дает сделать и требует лицензию. Эту лицензию (бесплатную!) которую я пытался получить два дня. То место на страничке в аккаунте где можно получить эту лицензию тупо недоступно. Написано только что нельзя потому что «Vivado License Manager was not used to initiate this web session or because an Activation license has already been generated using this unique request ID» и читайте FAQ. Использовался license manager и специально заново созданный аккаунт, с которого никаких реквестов ранее не было. В итоге закончилось тем что я удалил из папки эклипса плагин com.xilinx.sdk.startup, который при запуске проверял наличие лицензии.

Ситуация вторая: Дома валяется development kit на ti-шном процессоре, для которого у них есть бесплатная версия Code Composer Studio. Но для того чтобы ее скачать необходимо зарегестрироваться (ну ок, это почти везде надо) и заполнить заявку в  которой указать кто ты, от какой компании и для чего тебе нужна их IDE. После чего заявку рассмотрят в течении двух дней (!), и возможно позволят скачать. На этом мое знакомство с ti заночилось.

Я считаю, раз уж ты делаешь бесплатную IDE то делай ее максимально доступной для пользователя. Особенно если это ide на основе eclipse и gcc.

IP-TV через роутер Mikrotik

В сети куча руководств по настройке ip-tv в роутерах mikrotik. В принципе даже без них все интуитивно понятно. Кроме одного момента.

Интернет у меня через pppoe, а порт в который воткнут кабель от провайдера своего ip не имеет. Т. е. чтобы заработало ip-tv необходимо в IP->Addresses добавить для ether1-gateway адрес типа 0.0.0.1/8.

Удаленный разлогин скайпа

Мало того что скайп на андроиде работает весьма хреново. Из него невозможно разлогиниться. Т. е. даже после удаления приложения статус будет «В сети».

Помогает от этого команда /remotelogout, написанная в любом чате скайпа. Посмотреть где скайп еще залогинен можно командой /showplaces.