LE Blog

Инженер с поэтической душой

01.02.2010 firtree_right Попутно

Нашли нашу виллу в рекламных проспектах на просторах интернета. Вот она. Сейчас общий холл выглядит так:

hall

Кстати, спальня со своей ванной и гардеробной там, куда ведёт лестница на фотографии, сдаётся. Мы тут ещё до 21 февраля. Если кто желает занять спальню — излагайте ваши предложения. Вот, кстати, география.

Ещё заметил интересную особенность. Местные с трудом ориентируются на карте. Если им показать карту, то они долго будут тупить и ошибутся с определением текущего местоположения. Но если спросить у них дорогу, назвав место, то они подробно опишут, как туда добраться, где повернуть, на каком светофоре.

Вспоминается тема «врата сортировки» из курса НЛП. Интересные национальные особенности. Французы, например, всегда видят перед глазами карту, могут показать на ней, где живут и где находятся, и часто говорят «верх» и «низ» о севере и юге.

30.01.2010 firtree_right Ярилло

Про солнце на Бали следует отдельно сказать три вещи.

  1. Здесь молниеносный закат. Темнеет внезапно и быстро, никаких сумерек. Я думаю, то же справедливо и для восхода.
  2. Даже если вы не загораете, а просто периодически проходите под солнцем или находитесь на улице в тени, то следует использовать защитный крем силой не менее 50. А лучше 60+ в первое время.
  3. Лучше постепенно перестроиться на такой режим, при котором можно что-то сделать до 11 часов. Потому что середина дня выпадает из зоны комфортного перемещения по местности.

29.01.2010 firtree_right Обзор фруктов

Мы переехали на виллу мечты. Маша обещала фотки в ближайшее время [завтра]. А пока предлагаю вашему вниманию обзор фруктов:

  1. Ананасы — видимо, не сезон. Маленькие и не очень сладкие.
  2. Снейкскин (салак, змеиный фрукт) — ананасовый чеснок, обтянутый змеиной кожей. Нормально, но ничего выдающегося
  3. Дрэгон-фрут — снаружи выглядит круто, но внутри похоже на сало с маком (на вид). Нейтральный вкус, своих денег не стоит.
  4. Авокадо и Манго — сейчас сезон. Надо брать! Вкусно.
  5. Мангустин — выглядит как огромная (с кулак) чёрная смородина. Под кожей белые дольки. Очень вкусно. Рекомендую.
  6. Рамбутан — красные волосатые яйца. Внутри под кожей белая мякоть с косточкой. Тоже весьма. Наряду с мангустином рекомендую.

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

Картинки если что — в гугле. Как-то пока я не успеваю фоткать всё вокруг, потому что полная вовлечённость в процесс. А фотографирование требует некоторой отстранённости.

28.01.2010 firtree_right Бали, Бали, моя звезда!

Доволная пассажир-женщина с нескрываемым удовольствием ползёт по задымленному салону в инструкции Катарских Авиалиний.

enjoy your way out

В Дохе (столице Катара) мы провели ночь в аэропорту. Мне понравился аэропорт, авиакомпания и катарские деньги. В следующий раз, либо стоит погостить в Дохе денёк, либо не торчать столько в аэропорту.

Меж тем мы уже два дня как добрались до Бали. Здесь днём температура легко доходит до +30. В связи с чем все немного вяловатые и [порой излишне] расслабленные. Вялые риелторы не очень хотят работать, поэтому мы всё ещё в гостинице. Особенно русские риелторы. Которые, видимо, адские дауншифтеры, отправившиеся в рай при жизни и подрабатывающие время от времени то тут, то там, стараясь не прилагать усилий.

Люди здесь тоже расслабленные. Уборщики комнат знакомятся и жмут руки. Маша обещала составить сравнительную таблицу по Индии и Индонезии, включая сравнение сервиса и липкости-приставучести. Я, как боящийся приставучих продавцов на улице, могу сказать, что здесь даже в развлекательном центре Куты, где постоянно предлагают наркотики и массаж, весьма ненапряжно. Но у меня ещё есть время поподробне познакомиться с населением.

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

Пойду в бассейн, послушаю про виллы, которые сегодня осмотрены. :)

А как у вас дела?

21.01.2010 firtree_right Windows7

Ну что же. Вот и я перешёл на windows7. Если раньше мне хотелось лизнуть монитор только под кубунтой (леденцовый kde 4.2 не даёт покоя), то теперь лизнуть хочется всё время.

Был небольшой затык с восстановлением меню загрузки винды/убунта, пока я не разобрался, что есть grub, а есть grub2 (a.k.a. grub-pc). И всё заработало, стоило его обновить. Конечно, не обошлось без геройства в командной строке. Будет, чем похвастаться понимающему собеседнику :)

Два нововведения, которые сразу понравились:

  1. «Записать на болванку образ» при правом клике на файле *.iso. Раньше и так можно было обычные файлы на болванку проводником записывать, а теперь точно прощайте, всякие Nero и прочие писалки!
  2. «Закрепить программу на панели задач» при правом клике на программе в панели задач. Прощай, панель быстрого запуска! Хотя можно и поставить её, если хочется.

19.01.2010 firtree_right Митол

А меж тем, у нас корпоративный отдых до 1 марта, и где-то на серверах катарских авиалиний лежат наши авиабилеты до города-героя Джакарта. Цели поездки: смотреть на океанский пейзаж пока он не отпечатается на сетчатке; узнать, что такое «сезон дождей на о. Бали»; раскрасить цветными карандашами фигурку человека три раза; и кое-что ещё. Если будет настроение, буду держать в курсе.

С одной стороны понятно, что я буду делать с 1 марта (велика Рассея-Матушка, а градоглядъ пока только в Первопрестольной). С другой стороны, есть хорошая традиция — ставить цели на год. С третьей стороны, мой сектантский опыт исказил представления о целеполагании, и сейчас я черпаю наслаждение в отсутствии «долгосрочных планов на похвастался друзьям» Поэтому цель на ближайщие месяцы одна, но двойная: сделать на сайте портфоливо, и выделить рабочее время на сторонние занятия, в том числе и на флэш (начать с того, чтобы собрать игрулю с Петровым).

А на самом деле, писал я всё это для того, чтобы выложить видео (не могу же я просто взять и тупо перепостить этот баян!). Когда я учился в школе, некоторые из моих одноклассников увлекались тяжелейшей музыкой типа Пантеры и КэнибалКорпс. Я пытался в это вникнуть, но тяжелее Сепультуры слушать ничего не смог и остановлися на комфортной Металлике. Однако, бывает и весьма душевный тяжеляк (после первого просмотра прослушал ещё два раза — не мог оторваться).

27.12.2009 firtree_right Итого

  1. Это был крутой год!
  2. В этом году я стал гораздо ближе с собой (к себе, ко мне :)
  3. В этом году я ощутил кайф от взаимодействия с живыми (неидеальными) людьми.
  4. В этом году я потешил свои тщеславие и злобность настолько, насколько хотел.
  5. В этом году я перестал искать идеальную работу и нашёл любимую. Почувствовал себя программистом комфортно.
  6. В этом году я увидел свои границы и возможности. Скорее всего, не все, но всё же.

Этот журнал я пытался делать тоже программерским, как и блог. Но я хочу здесь расширить рамки. Мне это кажется интересным.

Новый год буду встречать с родителями. Очень давно так не делал.

15.12.2009 firtree_right Польза

Маша решила утилизировать использованные картриджи от hp LazerJet 1010 (1015, 1020 и подобное, такой, гробик). Их принимают минимум по 15 штук. У меня как раз завалялось два на такой случай, потому что это, видимо, самая популярная модель. Итого у нас три использованных лазерных картриджа. Нужно ещё 12. Присылайте ваши картриджи. Сохраним планету вместе! :)

Какое-то время назад поймал себя на мысли, что выбираю тему для очередной статьи в блоге по принципу «понравится ли она пытливому читателю». В результате чего заметно упала частота обновлений. При этом я заметил, что за некоторыми вещами, которые периодически использую, я лезу именно к себе в блог. И решил это усилить. Теперь я понаписал туда всего и хожу по работе почти каждый день. Так что я — свой самый регулярный читатель. Думаю в связи с этим перестать сюда постить ссылки на статьи, потому что множество здешних читателей и тамошних пересекается только в моём лице :)

15.12.2009 firtree_right Одновременное использование двух версий руби на одной системе

Введение

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

Поэтому необходимо найти удобный для себя способ (а лучше несколько) чтобы начать использовать руби 1.9.

Постановка задачи

Сейчас практически панацеей для использования более одной версии руби является rvm. Очень удобно в использовании, полностью прозрачно, и позволяет иметь разные версии руби в разных окнах терминала.

Но недавно мне понадобилось скомпилировать wxRuby под свою систему (kubuntu 9.10 amd64), и rvm не справилась с этой задачей. По какой-то причине в момент компилляции были недоступны заголовки руби. Поэтому я решил поставить две версии руби более явно: одна системная (1.8.7) и одна в папке /opt (1.9.1). Причем все команды, связанные с руби 1.9 будут вызываться с суффиксом: ruby1.9, irb1.9, gem1.9, rake1.9.

Возможно, подобных инструкций уже полно, но мне будет удобнее, если я точно буду знать, где находится одна из них :) При всём этом, конечно, rvm продолжает работать. Мы никак ему не помешаем.

Решение

Сначала нужно поставить новый readline. Без него, когда мы будем использовать irb1.9, мы не сможем наслаждаться доступом к истории с помощью стрелок вверх-вниз и перемещаться по введенному тексту с помощью стрелок в стороны.

sudo apt-get install libreadline5-dev

Теперь хорошо бы вписать пути в наше окружение. В конце ~/.bashrc добавим:

export PATH=$PATH:/opt/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/lib

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

./configure --prefix=/opt --enable-shared --program-suffix=1.9
make
sudo make install

Теперь у нас есть две отдельных установки руби и сопутствующих инструментов. Единственное, что обе установки используют общие конфигурационные файлы: ~/.gemrc, ~/.irbrc и т.п., что вполне удобно. Также для обеих систем общей директорией джемов будет ~/.gem, куда будут устанавливаться библиотеки, запусти мы их установку без sudo (в случае с sudo, конечно же, директории установки различаются).

Так же я не нашёл быстрого способа добавить /opt/bin в переменную PATH для sudo. Поэтому в таких случаях пока использую полный путь. Например, первая команда, которую следует выполнить:

sudo /opt/bin/gem1.9 update --system

Потому что в пакете с руби идёт версия 1.3.1, а настоящие пацаны уже во всю используют 1.3.5.

Материалы для самостоятельного изучения

  1. Всё об установке нескольких версий руби на одной системе
  2. Проект «Используй руби 1.9 или вали!»

09.12.2009 firtree_right Забота о неблокировании потоков в руби

Введение

Сегодня будет блиц-молния, которой место, скорее в твиттере. Однако, мне необходимо развеять тучи, которые я сам же и нагнал. :)

Постановка задачи

Не так давно я писал о том, что при создании руби-оболочки вокруг библиотеки на си, легко получить код, который блокирует все потоки приложения. Можно ли с этим что-то сделать?

Решение

Если мы имеем чуть больше контроля над участками кода на си, которые выполняются долго (обычно в цикле), то можно добавить спасительный код в тело цикла:

if (!rb_thread_alone()) rb_thread_schedule();

Это позволит каждый раз при очередном витке передавать управление соседним потокам, если они есть, и сделает приложение более отзывчивым.

То есть, если мы сделаем точную копию функции из той статьи и добавим наш спасительный код внутрь for, то в выводе такой программы:

# coding: utf-8
require "block_thread.so"

t1 = Thread.new do
  10.times { |i| puts i; sleep 0.1 }
end

t2 = Thread.new do
  puts "Блокируем"
  BlockThread.cycle
  puts "Разблокируем"
end

t3 = Thread.new do
  puts "Стараемся не блокировать"
  BlockThread.cycle_with_schedule
  puts "Закончили стараться"
end
t1.join
t2.join
t3.join

Будет картина гораздо приятнее:

Блокируем
0
Стараемся не блокировать
Разблокируем
1
2
3
4
5
Закончили стараться
6
7
8
9

Заметьте, кстати, что два лишних вывода между «Блокируем» и «Разблокируем» благодаря передаче управления соседнимпотокам между cycle и puts.

Понятно, что соседние потоки тормозятся. Но теперь не на всё время, а только на исполнение одного витка цикла.

Материалы для самостоятельного изучения

Полный код статьи на github