2008-12-03

I like to move it

За последние 3-и недели дважды переезжал из офиса в офис.
Из места А переехал в Б, затем в В, которое рядом с А :).
Сходил в гости на старое место, в котором провёл всю молодость 2-а года девелоперской и не только жизни. Ностальгия.

2008-11-27

Курьёзы программирования

Тут будут курьёзы программирования, с коротырми я лично столкнулся/породил.

Итак начали.

1. Оператор сравнения vs. лямбды

Классика: вечер, сижу, хочу дописать кусок кода/работы. Подтупливаю ещё не сильно.


if ((backLog.TimeStamp - lastTime).Minutes => minuteInterval) {Unexpected token. Expected ; -Mastro 27/11/2008 19:59 
    //...
}

Что решарпер от меня хочет в выделенном крассным!? Какая такая ;. Всё же правильно. Может скобку забыл где, да нет - всё на месте. Дай как скомпилю: опа, те же ошибки.
Чешу репу, и через минуту понимаю в чём дело :). Оператор сравнения пишется несколько иначе:

if ((backLog.TimeStamp - lastTime).Minutes >= minuteInterval) {
    //...

}

Вот теперь всё в порядке.

2008-11-25

Проверка Google Docs -> Post to Blogger.

Проверка Google Docs -> Post to Blogger.

Проверим форматирование так и так.Коментарий, увидим ли мы его? -Mastro 26/11/2008 12:11 
Ещё цвета, разные.

Табличка:

Заголовок 1




1
2
3
4
5
6
7
8
9
0

  • Список "точками" 1
  • Список 2

  1. И нумерованный список
  2. Ещё один элемент
 

Суперскрипт, сабскрипт.

Цитирование.

2008-10-17

Fiat Bravo

Знакомство с моей будущей (я надеюсь) машиной началось вот с этого ролика:


Тепрь я знаю, что песню из ролика исполняет итальянская певица Gianna Nannini. Название песни Meravigliosa Creatura - Удивительное Создание. Что цвет машины в ролике Maranello Red - дань Феррари. Что на создание этой модели ушло 18 месяцев - своеобразный рекорд. Что на её базе созданна новая Lanica Delta и создаётся Alfa Romeo 149.

Ролик одно время был вывешен на сайте Фиата. Но я был не сильно склонен к Фиату как таковому и Браво в частности. Не рассматривал машины дороже 15 тыс., да и курс евро не располагал.

Мы с женой просмотрели множество машин которые нас интересовали: Mazda 3 и 2, Toyota Auris и Yaris, Suzuki Swift и SX-4, VW Golf & Polo, KIA Cee'd & Rio, Ford Focus & Fusion, Pegeot 107, 207 & 308, Renault Megane & Clio, Citroen C3.

Более всего нам понравился Аурис. Но он был дороговат для нас на то время. Да и прав у меня ещё не было. Потом был просмотрен Сузуки SX-4. Он нам то же понравился, как и Свифт.

И вот в конце весны я проехался на Сузуки Свифт робот. Мне понравился, и цвет был синий. Я договорился в салоне что я его беру. Уговор был на то, что я ищу кредит в течении 2-3 дней и покупаю машину. Но на следующий день мне перезвонил менеджер и сказал: "вы знаете, к нам тут пришол клиент, и купил его сразу заплатив деньги. Но вы не переживайте, у нас есть вам предложить SX-4, да и вообще тот Свифт был 2007 года выпуска." Я был огорчен... Ошибка моя была в том, что я не подписывал договор.

Ещё до этого мы интересовались Фиат 500. Очень интересно было на него посмотреть. Посмотрели на выставке - он нам очень понравился. Сходили в салон и заодно уже посмотрели Grande Punto. В салоне был и Браво. Я и его посмотрел, он был хорош, но по цене выходил выше бюджета - евро тогда ещё не упал. Фиат 500 всё таки отпал из-за размеров - уж больно не практично для первой и единственной машины. Хотя сам автомобиль супер.

После отпуска мы ещё раз съездили в салон Фиат, проехались на тестдрайве Гранде Пунто. Время шло, и я стал посматривать на Браво. Почитал обзоры, отзывы, форумы. Затем прокатился на 120 сильном Браво, тот который с турбо мотором TJet 1.4 литра. Живой мотрочик, после 2-ух тысяч тянет очень бодро.

И решил, что хочу вот такую машину: красивую, стильную, приятную, редкую. И плевать на то, что Фиаты у нас не котируются, что у него есть ряд конструктивных недостактов и болячек, что сервис у нас не идеальный (зато не будет очередей), что ценник в хорошей комплектации выходит за 20 тыс. долларов, что... да много чего можно найти в Браво, если искать с лупой и калькулятором. Такие машины выбирают не с калькулятором под подушкой, а сердцем/душой. Ведь главное, что бы машина нравилась, что бы было приятно в ней находиться и ехать.

Авто-мото

2008-01-09

Format test post

This post will be test playground for various formating tests.

$some-command
Console output CSS version 1.0.
Some additional command output.
bla bla


Test line.

2008-01-07

Добавим места малышу Eee PC

Добавим места и скорости малышу Eee PC: сожмём /usr используя aufs и squashfs.

Для начала соберём и поставим aufs и squashfs.

Ставим нужные пакеты: sudo apt-get install aufs-modules aufs-tools squashfs-modules squashfs-tools.

Фиксим багу в сорцах squashfs. Для этого в начале распаковываем их:
$cd /usr/src
$sudo tar xjv squashfs.tar.bz2


Затем качаем патч. Я взял его отсюда.
Накладываем его:
$cd /usr/src/modules/squashfs/linux-2.6
$sudo patch inode.c 03-remove-slab.dpatch


Компиляем squashfs и aufs.
$sudo module-assistant -O build squashfs
$sudo module-assistant build aufs


Опция -O нужна для того что бы module-assistant не распаковывал сорцы squashfs затирая патч.
deb пакеты собираются в /usr/src. Ставим их и проверяем загрузку:
$sudo modprobe aufs
$sudo modprobe squashfs
$lsmod | egrep \(aufs\|squashfs\)


Теперь создадим и смонтируем образ /usr

Создаём сжатый образ /usr:
$sudo mksquashfs /usr /usr.sqfs -noappend -always-use-fragments


Монтируем его:
$sudo mkdir /usr-ro
$sudo mount -t squashfs -o loop /usr.sqfs /usr-ro


Монтируем всё вместе через aufs:
$sudo mkdir /usr-rw
$sudo mount -t aufs -o dirs=/usr-rw:/usr-ro=ro none /usr


В конечном итоге мы получаем наш родной /usr состоящий из двух частей:
1. RO часть лежащая в /usr-ro и являющаяся подмонтированным образом /usr.sqfs
2. RW часть содержащая изменения в RO части и лежащая в /usr-rw


Последнюю часть я пока ещё не сделал. Сжатие данных штука не быстрая. Кроме того, я не знаю как бы так аккуратнее подменить реальный /usr, что бы ничего не упало :).

В дальнейшем можно заново собирать usr.sqfs из /usr. Чистить /usr-rw. И работать со сжатой ФС.

Update


Сделал таки squashfs + aufs. Squashfs файл занимает ~40% (780Мб)от оригинального /usr (1.8Гб) - можно сказать 1 Гиг места. Пока что не удаляю оригинальный /usr, монтирую поверху. Потестирую потом снесу родной /usr.

Пока настраивал сделал косяк. Хотел сделать /usr-rw закрытым для юзерей (хез зачем;) ):
$sudo chmod a-rwx /usr-rw
$sudo chmod u+rwx /usr-rw


Настроил всё что надо в fstab, ребут и получаю окошко с квадратиками вместо GDM. Полез в консоль, глядь а /usr то dwrx------ :). Думаю: ага aufs юзает пермишены rw директории. Давай чепятать sudo chmod +rx /usr-rw. bash: chmod: command not found было мне ответом. Single mode полечил граблю.

Забавно что можно на лету mount/umount /usr без особых последствий.

По скорости видны земедления, по крайней мере при старте программ. Не критично, но есть. Чуть более долгая (3-4 сек) загрузка Гнома после логина. Так же чуть дольше (1-2) секунды стартует OO.

Ну и напоследок немного конфигов и статистики:

$cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system=""> <mount point=""> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
# /dev/sda1
UUID=4020dd57-e983-46bc-8890-b62a44605da8 / reiserfs notail,noatime 0 1
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec 0 0
tmpfs /var/log tmpfs defaults,noatime 0 0
#tmpfs /var/cache/apt/archives tmpfs defaults,noatime 0 0
/usr.sqfs /usr-ro squashfs ro,defaults,loop 0 0
usr-aufs /usr aufs dirs=/usr-rw:/usr-ro=ro 0 0

$cat /etc/mtab
/dev/sda1 / reiserfs rw,noatime,notail 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
/sys /sys sysfs rw,noexec,nosuid,nodev 0 0
varrun /var/run tmpfs rw,noexec,nosuid,nodev,mode=0755 0 0
varlock /var/lock tmpfs rw,noexec,nosuid,nodev,mode=1777 0 0
udev /dev tmpfs rw,mode=0755 0 0
devshm /dev/shm tmpfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
lrm /lib/modules/2.6.22-14-generic/volatile tmpfs rw 0 0
tmpfs /var/log tmpfs rw,noatime 0 0
/usr.sqfs /usr-ro squashfs ro,loop=/dev/loop0 0 0
usr-aufs /usr aufs rw,dirs=/usr-rw:/usr-ro=ro 0 0
securityfs /sys/kernel/security securityfs rw 0 0
binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,noexec,nosuid,nodev 0 0
/dev/sdb1 /media/disk-1 vfat rw,nosuid,nodev,shortname=mixed,uid=1000,utf8,umask=077,usefree 0 0


$df | grep usr-ro; du /usr-ro | tail -n 1
/usr.sqfs 767744 767744 0 100% /usr-ro
1834825 /usr-ro

libnotify - работа из под рута

Заметил одну особенность Ubuntu support скрипты для Eee PC не выводят OSD сообщение на включение/выключение WiFi и Overclock-а. Хотя по описанию должны. Поковырялся внутрях и нашол скрипт на перле который выводил сообщения через libnotify. Но этот скрипт нигде не вызывался. И даже если он как-то вызывается, всё равно он ничего не выведет ибо запуск из под рута выдаёт ошибку связанную с доступом к DBus.

Погуглив, нашол в чём грабли. Первое: надо найти корректный DBus Session ID. И второе: надо запускать send-notify от того польозователя что и ранает иксы.

Вот решение:

#!/bin/bash
# 2008-01-07
# (c) Aleksei Antonovich google mail: aleksei.antonovich.
# Licensed under GPL.

# Ensure that the script is run as root
if [ `id -u` != 0 ]
then
echo "ERROR: this script is intended to be run as root."
exit 1
fi

# Ugly way to find an running X programs for all users
pids=`pgrep gnome-panel`

for pid in $pids; do
#Search for DBus for that process
DBUS=`grep -z DBUS_SESSION_BUS_ADDRESS \
/proc/$pid/environ | sed -e "s/DBUS_SESSION_BUS_ADDRESS=//"`

#Grab user of Gnome process
UNAME=`grep -z USERNAME \
/proc/$pid/environ | sed -e "s/USERNAME=//"`
# echo "user is: "$UNAME
# echo "DBUS is: "$DBUS
DBUS_SESSION_BUS_ADDRESS=$DBUS \
sudo -u $UNAME notify-send "$@"
done


Несколько кривовато определение программ запущенных под иксами, но работает. Если потом руки дойдут - сделаю более универсально.