вторник, 14 августа 2012 г.

Tiling windows managers

    Tiling windows manager - это фреймовый оконный менеджер, который разбивает рабочее пространство на взаимно не пересекающиеся прямоугольные области. Таким образом у вас ни когда не будет пересекающихся окон, все окна всегда будут на виду. При такой оконному менеджере более активно приходиться пользоваться рабочими столами. Фреймовый оконный менеджер позволяет полность избавить от мышки!
Выглядит примерно так
    Была когда то в прошлом у меня попытка перейти на данный вид оконного менеджера, но она не увенчалась успехом, толи я был не готово, толи менеджеры тогда были еще сыроваты.
    В очередной раз устав от Unity, от ее тормозов, да и вообще непригодному для работы окружению. Я ни чего не имею против Unity на домашнем компьютере, она вполне сносно справляеться с просмотром фильмов и серфингом в интернете. Да и жене попроще. Но на рабочем месте должна быть максимально фунциональная и быстра стреда. Unity  в качестве такой не годиться.
    Сперва были попытки перейти на Gnome 3. Которые не увенчались успехом, так как Gnome 3, это тот же Unity, только вид сбоку.
    Дальше я попробовал XUbuntu, затем чистый XFCE, на котором я просидел достаточно долго и в общем он меня устаивал, но чего то все равно не хватало.
    И как то наткнулся в статье на информацию что в Google некоторые сотрудники используют Ubuntu, но предпочитают использовать Xmonad, вместо Unity. Оказалось что Xmonad, это Tiling WM. И я решил попробовать что же это такой Tiling WM.
    На Ubuntu Xmonad ставиться с ходу из репозитория, в списке сессий появляется два новых пункта, Xmonad и Xmoad with Gnome. Xmonad with Gnome помоему у меня сразу не заработал, а Xmonad запустился и показал мне чистый рабочий стол. Оказывается это все! Можно было начинать работать. Только надо знать кучу хоткеев и написать не мало конфигов. Ну так просто я не был готов сдаться... Нашел как прикрутить к нему gnome-panel. Даже можно unity-2d-panel прикрутить, но оно того не стоит. На самом деле, после первых часов работы в Xmonad я был в восторге от идеи Tiling WM и от Xmonad. Благодаря легковесности Xmonad на моем не очень сильном ноуте, все начала просто летать. Оперативка свободна, проц отдыхает. Вот только это gnome-panel нагружает систему. Но есть Xmobar, которые я так и не попробовал. И вот после полудня работы, понял что кое что мне хотелось бы донастроить. А так как Xmonad написан на Haskell, то и конфиг у него представляет из себя Haskell программу. А изучать синтаксис Haskell мне совсем не хотелось. Возможно там все просто, но я ленивый. Мой друг параллельно со мной начал изучать тему Tiling WM, по моей рекомендации поставил Xmonad, но на отрез отказался ставить дополнительно к нему gnome-panel. Попытался привзять это все к Unity, что оказалось не так посто. Это получилось только у одного чувака, который для этого правил код Unity. Затем, друган пробовал поставить Xmobar, что вроде как у него даже получилось, но он все равно остался не  удовлетворен.
    И следующим шагом была установка Awesome, второго из двух самых популярных Tiling WM. Awesome сразу оказался более дружелюбным, так как после устаноки сразу все себе нес бар, к которому легко прикручивались апплеты погоды, сети, почты и т.п. Awesome в свою очередь требовал редактирования конфигов на языке Lua. Что опять же меня совсем не обрадовало. Хотя по Awesome полно русскоязычной документации. Но глядя на эти WM написанные на Haskell и на Lua, я подумал, было бы превосходно поставить WM написанный на моем любимом Python. И к моему счастью оказалось что такой Tiling WM  есть - QTile. О котором и будет следующая заметка.

среда, 28 декабря 2011 г.

Компиляция python кода в exe под Linux

Если на linux машинах python установлен повсеместно, то windows все наоборот. Решил скомпилировать свое приложения в exe, причем желельно что бы это был одинокий exe файл и не тянул с собой дополнительные dll библиотеки.
Для компиляции python кода в бинарные файлы есть очень удобная программа pyinstaller - http://www.pyinstaller.org/. Поддержку cross компиляции они уже начали добавлять, но пока она работает не полноценно, поэтому я решил установить python под wine.
Устанавливаем wine c http://www.winehq.org/
Качаем python c http://www.python.org/download/releases/
У меня, кстати, python 2.7.2 отказался устанавливать под wine, а вот 2.7.1 встал без проблем
для работы pyinstaller под windows нужен пакет pywin32, качаем и устанавливаем(http://sourceforge.net/projects/pywin32/)
Качаем pyinstaller(http://www.pyinstaller.org/).
После того как у нас установлен python и pywin32 под wine, мы готовы.
Распаковываем pyinstaller куда-нибудь поближе к установленном python, у меня это было
/home/pavel/.wine/drive_c/Python27/progs/pyinstaller-1.5.1
Туда же, в progs, копируем наше python приложение.
Для начала надо что pyintaller создал файл конфигурации для нашей системы
wine python.exe progs/pyinstaller-1.5.1/Configure.py
Далее создаем spec файл для нашего python приложения
wine python.exe progs/pyinstaller-1.5.1/Makespec.py -F progs/foobar.py
ключик -F как раз нужен для того чтобы на выходе у нас получился stand-alone executables.
Makespec.py сгенерирует файл foobar.spec, который нам необходим для компиляции.
И последнее что осталось сделать, это сбилдить наш бинарник.
wine python.exe progs/pyinstaller-1.5.1/Build.py foobar.spec
И в директории dist получаем наш foobar.exe. 

понедельник, 16 июня 2008 г.

Пересборка дистрибутива Damn Small Linux для загрузки по сети

Загружаемся с LiveCD или по сети

Делаем все необходимые настройки
Устанавливаем необходимое ПО

далее создаем папку в которой будет храниться новый образ KNOPPIX

mkdir /ramdisk/tmp/source
Копируем текущую систему в папку source

cp -Rp /KNOPPIX/* source
cp -Rp /KNOPPIX/.bash_profile source

если устанавливали дополнительное ПО то копируем папки куда ставили ПО
например:

cp -Rp /opt/* source/opt/
cp -Rp /usr/java source/usr/

копируем сделанные настройки
cp -Rp /home/dsl/.* source/etc/skel/

так же настройки можно добавить в
/etc/skel/.bashrc

далее собираем образ

mkisofs -R source | create_compressed_fs – 65536 > KNOPPIX
копируем его на носитель

Далее собираем initrd.gz
для этого распаковываем minirt24.gz

gunzip initrd.gz
losetup /dev/loop0 initrd
mount -t ext2 /dev/loop0 /mnt
в папке /mnt получаем содержание initrd

копируем в другую папку(initrd-tree)
Отключение:
umount /mnt
losetup -d /dev/loop0


В папке
cdrom/KNOPPIX/
заменяем файл KNOPPIX вновь созданным

перед директорие й initrd-tree кладем скрипт
makeext2initrd.sh
#!/bin/sh





PWD="`pwd`"

SOURCE_TREE="$PWD/initrd-tree"

OUTPUT_IMAGE="$PWD/initrd.gz"

KERNEL_VERSION="$(uname -r)"

#PUPPYVERSION="`cat $SOURCE_TREE/PUPPYVERSION`"





# Calculate size needed for initrd:

#SIZE=`du -s -k $SOURCE_TREE | tr "\t" " " | cut -f 1 -d ' '`

SIZE=100000

# Add a bit of padding:

PAD=900 #600 #600 #160 #98 THIS IS WEIRD HAD TO INCREASE THIS FROM 160 TO 600 v2.12!!!

TRIMOFF=800

#if [ -f $SOURCE_TREE/pup_$PUPPYVERSION.sfs ];then #v2.16rc

#humongous, padding needs to be adjusted...

#PAD=3100 #1800

#TRIMOFF=0

#fi



#SIZE=`expr $SIZE + $PAD`



TMPSIZE=98000

echo "tmp size=${TMPSIZE}"

#TMPSIZE=`expr $TMPSIZE + 500`

mkdir /tmp/tmpfs

mount tmpfs /tmp/tmpfs -t tmpfs -o size=${TMPSIZE}k

mkdir /tmp/tmpfs/mntpt



echo "Size of ext2 filesystem is ${SIZE}KB"



# Make an empty file of the proper size:

dd if=/dev/zero of=/tmp/tmpfs/initrd-tmp bs=1k count=$SIZE #2> /dev/null

sync

# Create a filesystem on it:

mke2fs -m 0 -F /tmp/tmpfs/initrd-tmp #1> /dev/null 2> /dev/null

sync

# Fix broken ext2fs defaults:

tune2fs -c 0 -i 0 -m 0 /tmp/tmpfs/initrd-tmp #1> /dev/null 2> /dev/null

sync

# Mount the initrd-to-be:

losetup /dev/loop0 /tmp/tmpfs/initrd-tmp

mount -t ext2 /dev/loop0 /tmp/tmpfs/mntpt





# Populate the initrd image:

( cd $SOURCE_TREE

cp -a * /tmp/tmpfs/mntpt

)



#v2.16rc...

#rm -f /tmp/tmpfs/mntpt/init

#ln -s sbin/init /tmp/tmpfs/mntpt/linuxrc

#if [ -d /tmp/tmpfs/mntpt/dev0 ];then

# rmdir /tmp/tmpfs/mntpt/dev

# mv /tmp/tmpfs/mntpt/dev0 /tmp/tmpfs/mntpt/dev

#fi





#mkdir /tmp/tmpfs/mntpt/.root_ro

#mkdir /tmp/tmpfs/mntpt/.root_rw

## Make sure we have any block devices that might be needed:

#SLOPPY_DEV_LIST=$(cat /proc/partitions)

#for device in $SLOPPY_DEV_LIST ; do

# if [ ! -r $SOURCE_TREE/dev/$device -a -b /dev/$device ]; then

# cp -a /dev/$device $SOURCE_TREE/dev

# fi

#done



# Unmount the initrd and move it into place:

sync

umount /dev/loop0

rmdir /tmp/tmpfs/mntpt

#gzip -9 /tmp/tmpfs/initrd-tmp

#rm -f $OUTPUT_IMAGE

#mv /tmp/tmpfs/initrd-tmp.gz $OUTPUT_IMAGE

sync





#attempt size reduction, that huge empty space...

rm -f initrd

rm -f initrd.gz

DOWNSIZE=98000

sync

resize2fs -pf /tmp/tmpfs/initrd-tmp $DOWNSIZE

sync

dd if=/tmp/tmpfs/initrd-tmp of=initrd bs=1k count=$DOWNSIZE

sync

e2fsck -y -f initrd

sync

rm -f /tmp/tmpfs/initrd-tmp

gzip -9 initrd

sync



umount /tmp/tmpfs

rmdir /tmp/tmpfs



#v2.15 save the size, needed by createpuppy...

echo -n "$SIZE" > /tmp/initrdsize.txt

sync

####END####


запускаем его и получаем файл initrd.gz
переименовываем в minirt24.gz
кладем в vmlinuz
и грузимся по сети
все готово