Tuesday, September 29, 2009

Logitech S510 keyboard in Linux

There was a long journey to working keyboard setup. All started with a switch from 2.6.26-i686 kernel to new kernel 2.6.28-amd64 and the way it handled keyboard as device. There were no xev events on multimedia keys but usbmon has been showing some traffic going on from keyboard. I though that must be some problem with kernel and commited bug report, awaiting some answers. Few months has passed until Dmitry Torokhov metioned evtest utility and I have found another logical device, that udev has been creating for my keyboard. The next step was putting that other device to work as multimedia keys.
Adding InputDevice section in xorg.conf was enough until udev changed the input device number. So I had to come with stable solution. HAL was no way to go (terribly complicated), so only possible way was to set exact number for device at udev.
First I had to find device, that was created for multimedia keys

cat /proc/bus/input/devices
Standard keys:

I: Bus=0003 Vendor=046d Product=c517 Version=0110
N: Name="Logitech USB Receiver"
P: Phys=usb-0000:00:1d.0-2.1/input0
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb5/5-2/5-2.1/5-2.1:1.0/input/input3
U: Uniq=
H: Handlers=kbd event3
B: EV=120013
B: KEY=1000000000007 ff800000000007ff febeffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=1f

Multimedia keys:

I: Bus=0003 Vendor=046d Product=c517 Version=0110
N: Name="Logitech USB Receiver"
P: Phys=usb-0000:00:1d.0-2.1/input1
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb5/5-2/5-2.1/5-2.1:1.1/input/input4
U: Uniq=
H: Handlers=kbd mouse1 event4
B: EV=1f
B: KEY=837fff042c332f bf08444400000000 ff0001 1f848a37cc00 667bfadd71dfed
9e000000000000 0
B: REL=1c3
B: ABS=100000000
B: MSC=10

So /dev/input/event4 was device for multimedia keys and I just had to look for exact ID, udev is using to identify device.
udevadm info --query=all --name=/dev/input/event4 --attribute-walk | grep modalias

The line I was interested in showed following:

With exact device ID, I could create udev rule /etc/udev/rules.d/z70_logitech_multimedia.rules containing following line:
KERNEL=="event*", ATTRS{modalias}=="usb:v046DpC517d3810dc00dsc00dp00ic03isc01ip02", MODE="0644", NAME="input/event20"

This way udev create always /dev/input/event20 for device with ID "usb:v046DpC517d3810dc00dsc00dp00ic03isc01ip02". Event number should be reasonably high not to conflict with other logical devices that could be created by udev.

Final step was adding another InputDevice in /etc/X11/xorg.conf section:
Section "InputDevice"
Identifier "Multimedia keys"
Driver "evdev"
Option "Protocol" "evdev"
Option "Device" "/dev/input/event20"
Option "XkbModel" "evdev"

Almost all multimedia keys started to work after I removed .xmodmap(ing) I was using with old kernel (2.6.26-i686) - some mappings got messed up with new setup.

"Almost all" I mean except shuffle, rotate and zoom keys - but I can live with that until xorg-xserver get REAL key mapping not just 256 keycodes.

If I first said that HAL was no way to go, that was truth until first system hibernation or keyboard unplug. When you hibernate/resume system or connect keyboard after xserver has been started, the HAL is the only way how to setup multimedia keys. After some woodoo with HAL, I came up with following fdi file:
cat /usr/share/hal/fdi/policy/20thirdparty/30-logitech-multimedia-keys.fdi 

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->

<deviceinfo version="0.2">

<match key="info.udi" prefix="/org/freedesktop/Hal/devices/usb_device_46d_c517_noserial_if1_logicaldev_input">
<append key="info.addons.singleton" type="strlist">hald-addon-input</append>
<merge key="info.capabilities" type="strlist">input</merge>
<append key="info.capabilities" type="strlist">input.keyboard</append>
<append key="info.capabilities" type="strlist">input.keys</append>
<merge key="input.x11_driver" type="string">evdev</merge>
<merge key="input.xkb.model" type="string">evdev</merge>


Monday, December 01, 2008

Powershell in windows 2000

Lately I've been using windows console more than before in my job, so I was looking for some replacement of simple shell that is in w2k on my workstation. I've found out that m$ created new powershell and I was going to give it a try. But there was a catch ... m$ doesn't allow to install powershell on w2k - what a shame. Little more googling and thanks to this blog entry, I'm now "happy" powershell user on w2k. Well it's only a small step towards linux shell but better than that simple shell provided by w2k.

Sunday, November 30, 2008

Hibernate property "reflection"

If you ever get IllegalArgumentException in BasicPropertyAccessor and every type in class and in hibernate mapping are set right, then you should look for method that has similar name to property setter that is rising the exception.

private String tagExpression;
public void setTagExpression(String exp) {...}
public void getTagExpression() {...}
public boolean isTagExpression() {...}
Stack trace:
20:08:09,369 ERROR BasicPropertyAccessor:94 - IllegalArgumentException in class: [some class], setter method of property: tagExpression
20:08:09,376 ERROR BasicPropertyAccessor:98 - expected type: java.lang.String, actual value: java.lang.Boolean
org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of [some class].tagExpression
Hibernate is somehow calling isTagExpression() instead of getTagExpression() when setting tagExpression. So the simplest solution to this unpleasant situation is to rename isTagExpression() to something else like isTagExp() or isTExpression(). The hibernate then find correct property getter by reflection.

It took me hours to find out what is going on with hibernate, hope it helps someone in a same sticky situation.

Wednesday, February 20, 2008

mc ALT-o behaviour under ALT-i

Few days back after regular system update I observed that midnight commander shortcut ALT-o started to work somewhat strange. Well familiar behaviour displaying the content of active window in inactive window, changed to displaying an upper directory content or lower directory content dependig on whether the cursor is on file or directory. I was really puzzled and was hoping that this "bug" will be corrected soon. But after a week without any change I've started digging for some answers and bug reports to finally find out that the change in behaviour was intentional and previous behaviour is hidden under ALT-i shortcut.

Thursday, November 08, 2007

Back to Debian

This Sunday I was completly fed up with Ubuntu on my Thinkpad. There were so many small annoyances and the last coffin nail came on Sunday when the Intel video driver from Xorg broke down. As I was running Debian on my desktop before I sold it, the new distro option was simple. Of course I knew that it would be quite the same but I was hoping that if I wouldn't install GNOME and all those i-do-it-for-you-automatically things, I can build a "loved system" again.
Installation could be smooth if I had looked to my second blog post about downloading the daily netinstall image. With stable netinstall image, installation stopped after not finding a suitable cdrom driver for cdrom it was running from :-D.
I've chosen OpenBox as my WM after recollecting why I fled away from Fluxbox in the past (it crash very unpredictably). And than problems came in. First, no sound problem, was solved by building latest 1.0.15 ALSA driver from sources. Second problem with wifi took me 3 days to investigate. I tried NetworkManager because I was happy with it in Ubuntu but somehow it didn't work. I tried setting wpa_supplicat but I found out later that system service /etc/init.d/wpasupplicant in Debian package was dropped. So I tried the Debian way and it didn't work either. I was getting the idea that something is terribly wrong. In addition to this, the debian ftp master broke down so I was not getting any "update of salvation".
Yesterday my googling bring me finally to real troublemaker: libssl0.9.8g-2. The new libssl break the wpa_supplicant which segfault right after creating connection to access point. So I downgraded to libssl0.9.8g-1 from lenny and voilà the wifi started working as expected.
Now I'm using Debian way of handling wpa connections and here are configs based on examples from this page and comment from Tomáš Pěnička - thank you guys!.

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

allow-hotplug eth1
iface eth1 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

iface home inet dhcp

iface default inet dhcp


# path to UNIX socket control interface

### Example of basic WPA-PSK secured AP

### Associate with any open access point
### Scans/ESSID changes can be done with wpa_cli
What is good to mention is that you have to enclose ssid in commas, don't enclose hex key in commas and don't put ssid=ANY in default (open acces point) network block because wpa_supplicant will throw some syntax errors on you. An encoded key can be generated by wpa_passphrase utility.


ARGS="-q -f -u0 -d10 -w -I"
The ifplugd is used to monitor plugged cabel or whether the wifi is swithed on. ifplugd then bring up appropriate device.

That's it, I just chose wrong time to distro switch :-x

Friday, October 12, 2007

iPAQ with SD card - battery drain problem

When I bought secondhand iPAQ (2210) 2 years back I also bought 1GB SD card to extend the small (64MB) memory in iPAQ. I found out, that the battery had to be recharged very often, actually every day I was using it and like every 3-4 days though I didn't use it. I thought for myself that the battery must be old and overused and only solution was to buy a new one. But the recharging didn't bug me much so I didn't buy one. Recently my friend mentioned that he came across some info on internet about PDA battery being drained when SD card is inserted in SD slot. I searched the internet and found out that it's a problem with PocketPC OS from Microsoft in combination with some PDAs. The knot is in OS synchronization using ActiveSync very often even when the PDA is off. So the solution to battery draining problem is to shut off automatic synchronization. The procedure is as follows:

  1. run ActiveSync
  2. Tools->Options->Mobile Schedule
  3. set everything (During [off-]peek times, sync) to Manually.
  4. you can also set Tools->Options->Server->Options...->Rules - Sync with the server to Manually -- but I think this apply only when the PDA is connected to PC, so there will be no harm if you leave the settings you have there
  5. quit the ActiveSync and restart PDA for sure

With these settings and SD card inserted my iPAQ battery last 2-3 times longer than with scheduled automatic synchronization and there is "no" battery drain when the PDA is off.

Tuesday, September 25, 2007

Thinkpad buzzing/whining on battery

Every time when I was running my Thinkpad on battery I was hearing strange buzzing from the top left corner where the CPU is situated. It started to be really annoying and last week I began to search on web for some hints if it's feature or should I visit a Lenovo service. Well, I found that the problem is well known and many users have the same problem as me. It's feature of Intel Core2Duo processors with enabled power management. The solution is to disable CPU power management in BIOS. I still don't know if it reduce amount of time on battery ( definitely not significantly, I presume 5-10 min quite notably reduce battery time ) but CPU is not whining anymore.

You can find the setting in BIOS config section:
Config -> Power -> CPU Power Management -> Disabled


Thanks to insightful comments I re-enabled CPU Power Management in BIOS and set maximal value of processor power saving state to 2:
echo 2 > /sys/module/processor/parameters/max_cstate
Modification of max_cstate value fixed buzzing processor sound and didn't eminently increase power use.
To make this change automatic when unplugged from AC you can create script in /etc/acpi/battery.d/ e.g.

echo 2 > /sys/module/processor/parameters/max_cstate

Power and Thermal Management in the Intel® Core™ Duo Processor

Mission partially successful, next level ahead

My dear fellows, I have almost finished university studies at Palacky University in Olomouc. I did my final exam at the end of August and there lies only one obstacle on the way to my MSc diploma. The obstacle is my thesis about AOP. I hope that I'll be able to finish it in next few weeks and defend it in January. Although I really wanted to stay at dorms and hung about until January, I came to conclusion that it would be the best if I find myself a decent job and start making some money. So I have moved to Prague, done few interviews and last week I've made a decision and sign a contract with Elanor company. I start in October and I hope that my decision was the right one. Wish me well ;-)

Friday, July 27, 2007

Installing Ubuntu on Thinkpad R61

I had to add one more info to last post I've made. When I was installing Ubuntu I had to set the Thinkpad hard drive in BIOS to compatibility mode because in AHCI mode Ubuntu installation failed. This apply to WXP too.

Me and Thinkpad R61

At the start of a week I bought long wanted Thinkpad. It's shiny new R61 with Santa Rosa platform, Intel Core 2 Duo Processor T7100 (1.83GHz), Intel X3100 graphics card, 14.1" WXGA+ TFT, 1GB RAM etc. Unfortunately with Windows Vista included :-(.
My first day was like WOW Vista is really eye candy with that aero stuff, but at the end of the day I was totally pissed of how slow everything is (1GB RAM only is not enough for vista :-x) and started download of latest Ubuntu (Feisty Fawn later upgraded to Gutsy Gibbon) to try what is going to work out of box. Well first I had downgraded to Windows XP in case Linux wouldn't handle all those new technologies in that black magic box. After 2 days of installing I can say that neither WXP nor Ubuntu can handle everything in my R61. I still don't know how to run wifi in WXP, I get stuck when I'm installing some Intel chipset upgrade by ThinkVantage update manager and there's more. In Linux wifi is working but all those function keys, sound and suspend still refuse to run properly. Today I got to work brightness so I'm putting some info here.

Brightness was set by HAL by default and the way HAL did it was quite weird on R61. I found out that when I used brightness up/down button the HAL was calling /usr/lib/hal/scripts/hal-system-lcd-set-brightness. So I disabled this script by renaming it (does anybody know how to disable it properly?) to hal-system-lcd-set-brightness-disabled and used the information from following post on Ubuntu forums to get it work my way: very helpful post

My way

install xbacklight:
sudo apt-get install xbacklight
create scripts:
xbacklight -inc 10%

xbacklight -dec 10%

and bind events with scripts by creating event files:
event=video LCD0 00000086 00000000

event=video LCD0 00000087 00000000

That's it. There is only one small problem: the small pop-up window showing the amount of brightness don't change state now, but that don't really bothers me :-).

There is still some problem with brightness control. After reboot acpid starts to return error messages about display not being found after calling xbacklight and brightness control don't work. It has someting to do with calling the xbacklight from script as root. The only solution I found by now is to restart acpid manually when X server is running by
sudo /etc/init.d/acpid restart

Tuesday, June 19, 2007

Installing nvidia driver from Debian repository

Today I was updating my sid and for the second time I was trying to build nvidia module from nvidia-kernel-sources. Of course I forgot how I've done it last time. So there better be this post for next time and for anyone else with same trouble.

  1. update nvidia-kernel-source package
  2. # module-assistant auto-install nvidia-kernel ( or m-a a-i nvidia-kernel )
  3. update nvidia-glx package
  4. stop X server
  5. # rmmod nvidia
  6. # insmod /lib/modules/< uname -r >/nvidia/nvidia.ko
  7. start X server

If your previous nvidia driver was installed with nvidia installer, you have to uninstall it or else you get nvidia module mismatch errors after reboot. The easiest way is to run:
NVIDIA-Linux-<arch>-<version>-pkg2.run --uninstall
Then you have to reinstall nvidia-glx package and next reboot should be ok.

Tuesday, June 05, 2007

failed to create an XPathFactory

In case you get this error someday:
java.lang.RuntimeException: XPathFactory#newInstance() failed to create an XPathFactory for the default object model: http://java.sun.com/jaxp/xpath/dom with the XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: No XPathFctory implementation found for the object model: http://java.sun.com/jaxp/xpath/dom
using tomcat5.5 and JAXP, remember to look at
and delete symlinks/files in the directory:

xercesImpl.jar -> ../../../java/xercesImpl.jar
xml-apis.jar -> ../../../java/xml-apis.jar

Took me 2 hours to find out. Perhaps it will help someone.

Thursday, April 05, 2007

Saturday, March 31, 2007

Java and UTF-8 encoding

Friday I discovered an encoding problem in my Java application. First I figured out how to send data encoded in UTF-8 from html form through dojo.bind (djConfig = { bindEncoding: "utf-8" };). Then I checked the PostgreSQL database and the tables were set to UTF-8. Despite all that it was still saving data in database in some queer format - two bytes of UTF char took 2 chars. I tried almost everything to solve the problem - different methods of getting the parameters from http request:

1. request.setCharacterEncoding("UTF8");
2. ... new String(request.getParameter("myparam").getBytes(), "UTF8");
3. BufferedReader reader = new BufferedReader(
new InputStreamReader(new StringBufferInputStream(text), "UTF8"));
text = reader.readLine();
and many other combinations. Actually the 3th method with StringBufferInputStream worked but StringBufferInputStream is deprecated because it uses only the low eight bits of each character in the string. So I was thinking that there had to be better solution. At last I found this FAQ at jGuru and there is comment by Jonathan Asbell: "When a browser sends a parameter in some encoding, such as UTF-8, it encodes each character byte value as a hexadecimal string using the encoding for the page (e.g. UTF-8). At the server, however, the part of the container that interprets these character values always assumes they are 8859-1 byte values. So it created a Unicode string based on the byte values interpreted as 8859-1. Since the 8859-1 assumption is made by the container, this hack (read "fix") works independently from which platform you run it on.

In the Servlet 2.2 API, the methods that parse parameter input always assume that it's sent as ISO 8859-1 (i.e. getParameter() et al). so they create a String containing the correct bytes but incorrect charset.

If you know what the charset is, you can convert the bytes to a string using the correct charset:

new String(value.getBytes("8859_1"), "utf-8")

8859-1 is the default encoding of HTTP."

Thanks to Jonathan I can move on now and find another wiles awaiting me.
But I still don't understand why request.setCharacterEncoding("UTF8") didn't work in first place.

JavaScript Inheritance - dojo declare and mighty hitch

Last week I was desperately searching for examples how to do true inheritance in javascript. I found many ways and was little confused why any of them didn't work for me (the problem was actually elsewhere :-x).
The best solution I found was Object Oriented Super Class Method Calling with JavaScript written by Joshua Gertzen.
There is a nice survey about JavaScript inheritance techniques at Ajaxian.com.
Yahoo! User Interface uses Kevin Lindsey technique and there are more I came accross in my search:

At last I settled for solution provided by dojo because I thought that it would solve problems I had had with other solutions. Well I was wrong, the dojo.declare work the same way as previous solutions I had tried. So I started to dig deeper and deeper to JavaScript and dojo sources and found magic dojo.lang function hitch. This function runs the function in given context and that was all I needed. Every time I tried to call method this.myMethod and debugger showed myMethod is not a function or not defined I knew a I had to use precious hitch.

At start I chose dojo because it seemed to be very powerful and I was right, but could be better documented. Now I know that if I want figure out something, I have to look in dojo sources that are documented quite well.

Saturday, March 17, 2007

Fiddling with JavaScript

Lately I have been working on my thesis and have got in touch with dojo ajax toolkit and JavaScript. I have been doing some coding in JavaScript from time to time but it was often very simple code with few functions and mostly no objects take part in it. But now in my thesis-application, I'm handling all client/server communication with ajax and it requires a lot of javascripting. It took me hours to understand dojo.event.connect/bind and the way how objects work in javascript. So here are some findings and notes:

Defining JavaScript object

  • private variables are declared with the 'var' keyword inside the object, and can only be accessed by private functions and privileged methods.
  • private functions are declared inline inside the object's constructor (or alternatively may be defined via var functionName=function(){...}) and may only be called by privileged methods (including the object's constructor).
  • privileged methods are declared with this.methodName=function(){...} and may invoked by code external to the object.
  • public properties are declared with this.variableName and may be read/written from outside the object.
  • public methods are defined by Classname.prototype.methodName = function(){...} and may be called from outside the object.
  • prototype properties are defined by Classname.prototype.propertyName = someValue
  • static properties are defined by Classname.propertyName = someValue

Default argument value in function

If you omit an argument in function call you can set it to default value this way:

function myFunc(arg1, arg2) {
arg1 = arg1 || "myDefaultValue";
arg2 = arg2 || 0;
It's like function myFunc(arg1="myDefaultValue, arg2=0) {..} in PHP. But be aware, that "or"(||) test is not correct in every case, because calling a function with null or "" argument will set an argument to the default value.
More about javascript function arguments can be found here.

Iterate through object properties/functions

To find out what properties/functions object has, you can use this snippet:
var msg = "";
for (var p in object) {
msg += p + "=" + typeof(object[p]) + " ";

dojo way

  • Don't try to bind form with dojo.io.bind, instead use dojo.io.FormBind.
  • If you send json data in dojo.io.bind({..., content: {..}}) use proper mimetype: "text/json"
  • You can't connect event on function called in other object. You can only connect events on functions called from executing object
  • The event connect isn't connecting the functions rather it's connecting the methods called on the objects. This way, you can invoke connected function/method on a object1.method() call without invoking it on object2.method() call. So if you want to invoke e.g. dojo after advice on load handler defined in dojo.io.bind you have to do it this way:
    load: function(type, data, evt) { handler.formResponse(type, data, evt); }
    dojo.event.connect("after", handler, "formResponse", doAfterAdvice);


Saturday, January 13, 2007

Folded-Paper CD Case

Today, I came across blog post about making an folded-paper CD case. This could be handy sometimes, if you just want to give someone a burned CD/DVD from your spindle pack without buying a CD box. The making of CD case won't take more than a minute and could look way better than a simple CD box if you use printed paper.

more credits

Wednesday, January 10, 2007


Hey, I'm alive but with lack of time for the blog. Maybe it's time to close it. I knew it from the beginning that it couldn't last long, but I give the blog one last chance by trying to write in english and exercise my english that way. Let me know, if I'm writing too much (english)nonsense, before I make a fool of myself too much. :-D

Today I found funny google query. Try input "French military victories" into google and click I'm feeling lucky. It looks like there are no victories at all :-D. Poor French.

Sunday, October 15, 2006

ZOOM G2.1u

Pred dvoma týždňami som navštívil priateľa v Čelákoviciach a pri tejto príležitosti zašiel i do muzikeru v Prahe s úmyslom skúsiť a kúpiť multiefekt ku gitare. Mal som favorita ZOOM G7.1ut ale tesne pred tým než som sa do muzikeru vybral som si povedal, že predsa až tak dobrý gitarista nie som a tiež nemám nejaký super gear takže mi určite bude stačiť i ZOOM G2.1u, ktorý bol i lacnejší o pár tisíc :-). Po dlhšom hľadaní v Holešoviciach ( mal som mapku z roku 1995 a nie všetky trasy dopravy su dnes identické s rokom 95 takže ma električka vyložila niekde úplne inde :-x ) som muziker našiel a informoval sa či majú na predajni ZOOM G2 ( dúfal som, že ho ešte nik nekúpil od doby čo som si kontroloval na webe či ho majú na sklade ). Priniesli mi krásnu čiernu krabičku, zapojili ju do Marshall hlavy pripravenej na testovanie, ja som vzal pripravený "testovací" Fender Stratocaster do ruky a dal sa do testovania G2. Trvalo takmer hodinu než som si prešiel všetky patche a vyskúšal automatického bubeníka. Neďaleko ležal i G7 multiefekt ale po tom čo som skúsil G2 som vedel že mi bude úplne stačiť a že tak minimálne do vianoc budem mať čo robiť než sa s G2 poriadne vyhrajem. Keďže som doteraz žiadny multiefekt nevlastnil tak nemôžem porovnávať, ak by ale niekomu nestačili presety z fabriky určite by tento efekt nemal zatracovať pretože možnosti nastavenia vlastných patchov su ozaj široké. Asi najviac ma na G2 teší možnosť pripojiť ho pomocou USB k počítaču, automatický bubeník ( občas vypadávam z rytmu takže pomáha pri tréningu ), efektový pedál ( i keď som sa ho zatiaľ nenučil poriadne používať ) a to že v drive sekcii sa nachádza Boss Metal Zone >-).

Zatiaľ som našiel len jednu databázu patchov v jednej yahoo skupine ale nejako ma neslovili, takže ak by mal niekto nejaké na výmenu tak sa ozvite, prípadne ich píšte priamo do diskusie pod postom.

Špecifikácia G2.1u.
Ukážky boli nahrané pomocou gitary ESP EC-50 a editované v Ardour digital audio workstation ( Cubase dodávaný s efektom mi je v Linuxe nanič :-/ ).

Sunday, September 24, 2006


OpenOffice pre debian amd64

Dnes som sa konečne dočkal OpenOffice balíku v debian amd64 distribúcii. OO v 32bit chroot-e slúžil dobre ale dnes odpochoduje do binárneho pekla >-). Teším sa na deň keď už 32bit chroot nebudem potrebovať a všetky pre mňa dôležité aplikácie budú nativne 64 bitové. Ďalší očakávaný 64bit kúsok je flash player - dúfam že skupina pracujúca na Gansh-i predvedie za mesiac-dva funkčné prehrávanie FLV a už nikdy ma nebude trápiť nemohúcnosť adobemacromedie.

NVidia 1.0-9625 beta display driver

NVidia potešila v piatok všetkých, ktorí očakávajú nový 9xxx driver a uvoľnila BETA verziu 1.0-9625 driveru. Nový driver plne podporuje Xorg 7.1, obsahuje podporu pre AIGLX, OpenGL 2.1, vylepšený nvidia-settings a mnoho ďalších zlepšení.

S novým driverom od nvidie som trošku očakával viac fps pri hraní hier v cedege/wine ale zdá sa, že problém nebude v driveri ale v cedege a mapovaní DirectX->OpenGL. Na hranie v linuxoch si teda musím počkať ešte dlhšie.

Thursday, August 31, 2006

Tuesday, August 29, 2006

Fluxbox themes (styles)

Dnes som našiel na DevianART wallpaper, ktorý hneď putoval na moju plochu. No a pretože aktuály style bol trošku do zelena musel som nájsť nejaký vhodnejší. Po dlhom a namáhavom hľadaní som našiel 2 stránky s naozaj kvalitne spracovanými styles:


Monday, August 28, 2006


Gone with the blastwave

Nedávno som narazil na výborný komix menom: Gone with the blastwave. Je to o dvoch vojakoch stratených v meste zničenom pravdepodobne výbuchom atómovej bomby. Stripy sú kvalitne nakreslené, občas absurndé, občas morbídne a každý vás učite pobaví minimálne tak dobre ako mňa.

IT Crowd

Minulý týždeň mi kámoš dal tip na britský komediálny seriál IT Crowd. Bohužiaľ prvá séria má len 6 dielov, u ktorých som sa ale bavil ako už dlho nie. Ako už názov napovedá príbehy sa odvíjajú v IT prostredí - v suteréne Reynholm Industries - firmy s bláznivým šéfom a hromadou pracovníkov, ktorí majú problém zapnúť počítač a tak stále volajú na IT podporu. Seriál je dobre vyvážený, takže sa pobavia nie len IT zasvätený ale i ľudia, ktorým počítače nie sú tak blízke. Na wikiquote dokonca existuje stránka venovaná citáciám a hláškam zo seriálu.
Moje obľúbené sú:
[Roy receiving a tech support call, answers after 15 rings with a sigh]
Roy: Hello, IT. Have you tried turning it off and on again?
Roy: Well, the button on the side, is it glowing?
Roy: Yeah, you need to turn it on.
Roy: The button turns it on.
Roy: You DO know how a button works, don't you?
Roy: No, not on clothes.
[Moss píše mail záchrannej službe]
Moss: Dear Sir stroke Madam. Fire, exclamation mark. Fire, exclamation mark. Help me, exclamation mark. 123 Carlignton Road. Looking forward to hearing from you. All the best, Maurice Moss.

Sunday, August 27, 2006

Prepínanie klávesnice po update X.org

Pri písaní posledného príspevku som narazil na nový problém s prepínaním klávesnice. Už som si užil pár krušných chvíľ než sa mi to podarilo dostať do stavu v akom to je a znova po update X.org sa vyskytol nový problém. Pôvodne fungujúci príkaz na prepnutie slovenského rozloženia klávesnice

setxkbmap us,sk_qwerty -option grp:alt_shift_toggle -option grp_led:scroll
odrazu hlásil Error loading new keyboard description.
Po menšom skúmaní som narazil na následujúcu stránku kde som zistil, že pôvodný zápis
Option "XkbLayout" "us,sk_qwerty"
v xorg.conf už nefunguje a je treba ho nahradiť novým zápisom
Option "XkbLayout" "us,sk"
Option "XkbVariant" ",qwerty"

Preto som skúsil prepnúť klávesnicu následujúcím príkazom a na moje počudovanie to fungovalo ;-)
setxkbmap us,sk ,qwerty -option grp:alt_shift_toggle -option grp_led:scroll
(tá čiarka pred qwerty je dôležitá!)

Fluxbox strikes back

Tak som is po dlhej dobe znova našiel čas na blog. Okrem toho, že mám menej času na hranie sa s linuxom a vôbec na akúkoľvek zábavu tak sa toho veľa za ten mesiac nezmenilo. Mojím aktuálnym window managerom sa stal fluxbox. Nie žeby mi pekwm nevyhovovalo ale ja rád skúšam nové veci. Tento pokus z fluxboxom je už asi tretí v poradí a musím priznať že od posledného sa veľa zmenilo k lepšiemu. Tak napríklad je v poslednej verzii možné si už nadefinovať klávesu na presúvanie a zmenu rozmerov okna spoločne s myšou. Doposiaľ to bolo možné len pomocou klávesy Alt. Ďalej pridali do novej verzie takzvané klávesnicové módy, tzn. že po stlačení určitej kombinácie kláves sa prepne odchytávanie kláves do iného módu a je tak možné mať jednu klávesovú skratku vo viacerých módoch, ktorá bude v každom plniť inú úlohu. Tieto dva novinky mi oproti pekwm veľmi chýbali. Chýba mi však ešte jedna vlastnosť pekwm - goto menu a icon menu. Aby som to zhrnul:

Pekwm - pozitíva

  • lepšia práca s myšou - možnosť presunúť okno na inú plochu pomocou kolieska na myši.
  • goto/icon menu - pred tým než sa dá focus na okno sa najprv musí zvoliť v menu
  • lepší systém grupovania - dá sa zvoliť grupovanie nie len podľa WM_CLASS stringu okna ale i podľa title a na každé ide použiť regulárny výraz

Pekwm - negatíva

  • žiadny šikovný integrovaný iconbar/systray
  • slabšia podpora KDE a GNOME aplikácií
  • žiadna podpora transparentonosti okien/menu
  • len málo použiteľných pagerov
  • pomalý vývoj

Fluxbox - pozitíva

  • lepšia podpora KDE a GNOME aplikácií
  • integrovaný iconbar/system tray
  • plne podporovaný fbpager
  • podporuje transparentnosť okien a menu

Fluxbox - negatíva

  • horšia práca s myšou - napr. to zmieňované premiestňovanie okien
  • absencia goto/icon menu, takže pri prepínaní okien tie hneď dostávajú focus a prepínanie minimalizovaných (iconified) okien len s možnosťami: všetky/v poradí v akom boli minimalizované alebo v opačonom poradí - nedá sa teda vybrať konkrétne minimalizované okno
  • podivné ukladanie okien na plochu ak sú nejaké aplikácie na desktop layeri
  • biedna konfigurácia grupovania okien
  • žiadna možnosť nastaviť oknu OnTop pomocou klávesovej skratky

Títo dvaja správcovia okien su veľmi vyrovnaní čo do možností a je pre mňa ťažké sa rozhodnúť, ktorý používať. Predpokladám ale, že fluxbox vďaka rýchlejšiemu vývoju zachvíľu svojimi možnosťami predbehne pekwm. Než sa tak stane budem stále skúšať čo mi ktorý prinesie s každou novou verziou.

Wednesday, July 26, 2006

Ako som si v C# zavolal na pomoc C++

Včera som vytvátral interpret vymysleného jazyka MicroC. Vytvoril som si lexer pomocou C# Lexer, parser pomocou Jay a už stačilo vytvoriť len interpret, keď som v tom narazil na problém nedostatočnej počiatočnej analýzy. MicroC totiž používa na formátovanie reťazov C++ zápis (napr. "%d", "%5i" atd.). Ako ale tento C++ zápis interpretovať v C#, v ktorom sa na formátovanie reťazcov používa diametrálne odlišný zápis ( "{0}", "{1,5}" ) ? Mal som 2 možnosti, buď vymyslieť nejaký postup ako previesť formát z C++ do C#, alebo požiť funkciu printf z C++ v C#. Zvolil som druhú možnosť.
Najprv som si otvoril C++ projekt a vytvoril print.cpp:

#include "stdafx.h"
#include <stdio.h>
#include <stdarg.h>
extern "C"
__declspec(dllexport) void PrintF(const char *format, ...)
va_list argp;
va_start(argp, format);
vprintf (format, argp);
Funkcia PrintF je vlastne taký wrapper nad funkciou printf, ktorý berie variabilné množstvo parametrov (inšpiroval som sa tu). Projekt som skompiloval do dll knižnice ( skopíroval k binárke interpretra ) a použil v C# triede takto:
using System.Runtime.InteropServices;
namespace Interpreter
class Interpret
public static extern void PrintF(string format, int arg);
public static extern void PrintF(string format, string arg);
I keď je wrapper nad printf umožňuje použitie variabilného množstva parametrov jazyk MicroC vyžaduje len printf s jedným argumentom. Mohlo by sa miesto jedného parametra využiť params object args ale do printf musia vstupovať typovo správné argumenty a nejde mu poslať argument typu object. Takže pre potreby MicroC mi stačili 2 funkcie, kde jedna brala ako argument int a druhá string.

Referencie: www.codeproject.com

Friday, July 21, 2006

Masters of Rock 2006

Pondelok som sa vrátil s Masters of Rock 2006 vo Vizoviciach. Krásných 5 dní oddychu a výbornej hudby. Prinášam menší report z diania:
Čo sa týka prevedenia tak podľa mňa najlepšie obstáli:
1. Rage
2. Gamma Ray
3. a môj nový objav Crucified Barbara ( kočky s gitarami to je moje 8-) )
Na to, že hlavným lákadlom festivalu bol Helloween a Whitesnake tak tí ma vôbec neoslovili - i keď z diaľky som ešte počúval session Helloween + Gamma Ray a to už stálo trochu za to.

Dalším novým objavom boli Riverside z poľska. Hrajú prijemnú, viac inštrumentálnu muziku a keby boli lepšie nazvučený tak by si to človek i viac užil.

Apocalyptica končila na MoR svoju koncertnú šnúru ( 180. koncert ) a bolo to už na chlapoch trochu poznať, ale zahrali moje obľúbené remakey od Metalliky takže budiž im odpustené ;-).

Vyborný boli tiež Kopriklaani z fínska ( teda aspoň sa mi tak po tom 6 pive zdalo :-D ) - také fínske ľudovky v rockovom štýle - dobre sa na to zvŕta :-P a Horkýže Slýže.

Edguy tak ako minulý rok - veľkolepá show ale mne nejak nesadli už minule takže som ich vychutnával len z diaľky.

Whithin Temptation ničím neprekvapili - dobrá muzika na počúvanie ale koncert nič moc. Pravda to, že ma neoslovili bolo som možno trošku spôsobené neskorou nočnou hodinou a chladným počasím - posledné dva dni sme si to totiž pri nočných teplotách pod 10 stupňov užili ( ešte dnes smrkám od toho ako som si to v tom mojom super spacáku do 8°C užil :-x ).

Charon bol taký HIM po fínsky.
Leaves'Eyes - pekná speváčka ale hudba trošku poslabšia.
Silent Stream of Godless Elegy - česká skupina a celkom prijemná muzika - hrali hneď prvý deň festivalu tak sme zašli pozrieť.

Zbytok sme prespali, prejedli, prepili a len zdiaľky zachytávali nejaké tóny muziky.

Boli sme tam partia 4 metalistov. Jedného sme ukecali na skok bungee jumping - je to zážitok vidieť 100kg živej váhy ako sa rúti k zemi. Do ďalšieho sme naliali litre piva i keď mu veľmi nerezalo. Tretí sa zmrtvil posledný deň festivalu s pivom sám - netrebalo mu ani pomáhať.

Festival sa oproti minulému roku zlepšil čo sa týka hygieny - toitoiky boli pravidelne vyprázdňované ale čo sa týka zvuku tak niektoré skupiny boli ozaj hrozne nazvučené ( napr. Masterplan, Riverside, i moj obľúbený Rage zvukár zmrvil :-( ) a na adresu zvukára sme vypustili množstvo štipľavých slov.

Fotky z festivalu nájdete na:

Recenzia na metalopolis.net

Saturday, July 08, 2006

Gajim - Amarok script

Nedávno som sa rozlúčil s jabber klientom PSI, pretože ho nešlo ovládať klávesovými skratkami - bol to dobrý klienta ale táto vada bola z mojho pohľadu závažná. Nepožadujem od IM klienta veľa, ale ovládanie bez siahnutia na myš je pre mňa jedna z najdôležitejších vecí u IM klienta. Skúsil som Gaim, ale nejak ma po jednom dni presvedčil, aby som šiel ďalej. No a ďalej som narazil na Gajim ( pekný rekurzivný acronym: Gajim is a jabber instant messanger ). Má všetky vlastnosti dobrého IM klienta a naviac ide ovládať cez D-BUS pomocou gajim-remote, takže nie je žiadny problém z príkazovej riadky (skriptu) zistiť status, prepnúť status, otvoriť roaster/okno s novou správou atď.
Dnes som si precházal gajim wiki a našiel som tam okrem návodu ako vytvoriť meta-contact či premigrovať históriu správ z PSI i skript pre Amarok, ktorý mení status message v gajim-e podľa toho aká pesnička sa práve prehráva. Mal len jednu chybu, menil stále status na online i keď som mal iný status a nahradil pôvodnú away message správou o prehávanej pesničke. Preto som ho upravil aby zachovával status i pôvodnú away message a správu z amaroku len pripojil k pôvodnej.
Skript nájdete tu: Gajim-amarokNowPlaying.amarokscript.tar.gz

Tuesday, June 27, 2006

Ugly Mean Chickie

Nedávno som si spomenul na jeden vtipný animovaný seriál, ktorý ma dlho bavil. Pokúšal som sa ho hneď vyhľadať na internete ale bez úspechu. Potom som si však spomenul, že som ho kedysi dávno prezentoval na mojich starých web-stránkach a tak sa mi po menšom hľadaní na disku podarilo seriál nájsť. Enjoy!:

Ugly Mean Chickie
UMC - An extreme 1st day chicken story
1. An extreme 1st day chicken story
UMC - The musical
2. The musical
UMC - Good id!
3. Good id!
UMC - Another nice mess - part I
4. Another nice mess - part I
UMC - Another nice mess - part II
5. Another nice mess - part II
UMC - What are you lookin' at?
6. What are you lookin' at?
7. WOW
UMC - Empty
8. Empty

Edit: Tak predsa sa mi podarilo nájsť oficiálne stránky: hoving.com. Další vyborný seriál z hoving.com, ktorý určite pobaví je Deadrat

Saturday, June 24, 2006

[P] Test reťazca na utf-8 znaky v PHP

if (preg_match('/^.{1}/us',$string,$matches) != 1)
printf('retazec nie je v utf-8')

Nájdené a zase stratené kdesi na http://php.net

Vylepšil som si windows gui

Už dlhšie som hľadal do windows, ktorý používam v práci, nejaké utilitky, ktoré mi priblížia linuxový window manager. Utilitku na viac plôch, presúvanie okien chytením okna kdekoľvek nie len za horný okraj atp.
V jednej diskusii som dostal pár tipov na:
VirtuaWin - utilitka na plochy pod windows a
LinuxMove - utilika, ktorá umožní už zmieňovaný presun okien, chytením okna v ktorejkoľvek časti.
Práca vo windows je konečne pohodlnejšia. Tragické je ale to, že predým než som skúsil VirtuaWin tak som raz skúsil ( a hneď odinštaloval ) M$ power toys nástroj na plochy. Tak neschopný nástroj priamo od Microsoftu som teda nečakal - prepínanie plôch neuveriteľne pomalé, maximalizované okná mi to po prepnutí plochy "demaximalizovalo" no proste tragédia. Ďakujem autorom VirtuaWin, že sa s vylepšením windows gui popasovali lepšie než Microsoft.

Friday, June 23, 2006

[P] Bitové operácie v MySQL

Ukážkový prepis čísel z 10-kovej do 2-kovej sústavy:

0 = 0000 
1 = 0001
2 = 0010
3 = 0011
4 = 0100
8 = 1000

Nastavenie bitu na 1:
cislo | 2^poradie_bitu ( poradie bitu číslované od 0 )
Príklad nastavenia 3. bitu
UPDATE table SET col=col | 4

Nastavenie bitu na 0:
cislo & ~(2^poradie_bitu) kde ~ je negácia
Príklad nastavenia 3. bitu:
UPDATE table SET col=col & ~4

Zistenie hodnoty bitu:
ak výsledok operácie cislo & 2^poradie_bitu je 0 potom je hodnota bitu 0 inak 1
Príklad výberu záznamov kde je 3. bit nastavený na 1:
SELECT * FROM table WHERE col & 4

Zvolením iného čísla než mocniny 2 môžme nastavovať, negovať či kontrolovať viac bitov naraz.
Napr. použitím 5 = 0101 môžme pracovať s 1. a 3. bitom

Thursday, June 08, 2006

Multimediálna klávesnica a linux

Ešte do včera som k tomu aby mi na mojej klávesnici ( Logitech Internet Keyboard ) fungovali "multimediálne" klávesy používal šikovnú utilitku hotkeys. Výborná utilitka až na pár drobných nedokonalostí, ktoré mi v poslednej dobe začali vadiť čoraz viac. Hotkeys totiž vypadli stále keď som pustil vmware alebo nejakú hru v cedege takže som ich musel stále reštarovať aby som mohol používať špeciálne klávesy. No a včera som úplne náhodov pri nastavovaní správneho modelu klávesnice v xorg.conf, natrafil na článok na servery abclinuxu.cz "Multimediální a jinak vylepšené klávesnice" s pekným popisom ako odchytiť špeciálne klávesy, priradiť im označenie a použiť vo WM na volanie rôznych funkcií. Takže po chvíľke hrania sa s utilitkou xev som mal odchytené keycody špeciálnych kláves a vytvorený súbor .Xmodmap:

keycode 229=F13
keycode 236=F14
keycode 178=F15
keycode 160=F16
keycode 174=F17
keycode 176=F18

Nasledovalo priradenie funkcie klávesám. V pekwm to vyzerá následovne:
# run psi
KeyPress = "F13" { Actions = "Exec osdctl -s psi, && psi &" }
# run thunderbird
KeyPress = "F14" { Actions = "Exec osdctl -s thunderbird, && thunderbird &" }
# run firefox
KeyPress = "F15" { Actions = "Exec osdctl -s firefox, && firefox &" }
# mute/unmute
KeyPress = "F16" { Actions = "Exec amixer -q sset Master toggle" }
# master volume -10%
KeyPress = "F17" { Actions = "Exec amixer -q sset Master 10%-" }
# master voulme +10%
KeyPress = "F18" { Actions = "Exec amixer -q sset Master 10%+" }
# PCM volume -10%
KeyPress = "Mod4 F17" { Actions = "Exec amixer -q sset PCM 10%-" }
# PCM volume +10%
KeyPress = "Mod4 F18" { Actions = "Exec amixer -q sset PCM 10%+" }

Na troch klávesách mám spúšťanie mailového klienta, browseru a jabber klienta a na ďalších troch ovládanie hlasitosti. Výborné je, že tieto klávesy idú kombinovať s ďalšími funkčnými takže som hravo vyriešil i PCM hlasitosť - to sa mi s hotkeys nepodarilo. Určite ste si všimli použitie ďalšej utilitky osdctl. Keďže hotkeys používali osd k vypisovaniu spustenej funkcie potreboval som nejakú náhradu. osdsh/osdctl túto funkciu splnili. osdsh je daemon, ktorý sa ovláda pomocou osdctl. Nastavenie zobrazovania sa dá urobiť pomocou osdshconfig utilitky, ktorou je možné vytvoriť themu pre vypisovanie.
Moja thema vyzerá takto:
# nastavuje vypisovanie textu

# nastavuje vypisovanie sliderov pri pridavani/uberani hlasitosti

# aktivuje mouzitie slideru pre mixer
# dalsia moznost je spustit osdctl -m 1

Následne už stačilo len pridať spúšťanie daemona a mapovanie kláves do .xsession a bolo hotovo:
# nastavenie multimedialnych klaves
xmodmap .Xmodmap
# daemon pre osd
# nacitanie themy pre osd
osdctl -S ~/.osdctl/mytheme

Monday, June 05, 2006

Real programmer

Real programmers don't use LISP. Only effeminate programmers use more parentheses than actual code.

Real programmers know better than the users what they need.

Real programmers don't write in BASIC. Actually, no programmers write in BASIC, after the age of 12.

Real programmers think structured programming is a communist plot.

Real programmers programs never work right the first time. But if you throw them on the machine they can be patched into working in only a few 30-hours debugging sessions.

USER, n.: The word real programmers use when they mean "idiot."

Real programmers don't write specs. Users should consider themselves lucky to get any programs at all and take what they get.

Real programmers scorn floating point arithmetic. The decimal point was invented for pansy bedwetters who are unable to "think big."

Real programmers don't read manuals. Reliance on a reference is a hallmark of the novice and the coward.

Real programmers never work 9 to 5. If any Real programmers are around at 9 am, it's because they were up all night.

Real programmers don't document. Documentation is for simps who can't read the listings or the object deck.

Real programmers don't write in Pascal, or Bliss, or Ada, or any of those pinko computer science languages. Strong typing is for people with weak memories.

Real programmers don't believe in schedules. Planners make up schedules. Managers "firm up" schedules. Frightened coders strive to meet schedules. Real programmers ignore schedules.

Real programmers don't use schedules. Schedules are for manager's toadies. Real programmers like to keep their manager in suspense.

Real programmers don't like the team programming concept. Unless, of course, they are the Chief Programmer

Real programmers have no use for managers. Managers are a necessary evil. Managers are for dealing with personnel bozos, bean counters, senior planners and other mental defectives.

Real programmers don't write application programs, they program right down on the bare metal. Application programming is for feebs who can't do systems programming.

Thursday, June 01, 2006

Bad news ...

The Pirate Bay site down

Včera som sa skoro celý deň divil prečo mi jeden torrent nechce bežať pritom deň predtým s ním nebol žiaden problém, no a večer som si dal tu námahu a skočil na Pirate Bay, odkiaľ som ten torrent stiahol preskúmať situáciu.
Čakalo ma však nemilé prekvapenie. Celá serverová farma Pirate Bay bola zhabaná švédskou políciou a bude preskúmaná na nelegálný obsah. Pirate Bay bol asi največší torrent tracker od čias supernovy a je ozaj škoda, že to tak dopadlo. Je úplne jasné kto v tom má prsty - RIAA a IFPI. Tieto organizácie už dlho tlačia na legislatívu vo švédsku aby sa prisposobila "americkému systému" copyrightu a aby čo najviac utlmila p2p rozvoj. Nerozumiem však prečo boli zhabané servre, keď samotné torrenty, ktoré tam hostujú neobsahujú žiadne copyright informácie. Prešiel som si potom diskusiu na slashdot k správičke o zatvorení pirate bay a zaujalo ma tam pár príspevkov:
- Pirate Party
- This is the sort of publicity you can't buy.
- Re:This is the sort of publicity you can't buy.
Najviac ma zaujal príspevok člena Pirate Party - politickej strany v švédsku usilujúcej o reformu zákonov o coprighte/patentoch - myslím že by takéto myšlienky mohli preniknúť i do ostatných častí európy aby ten chorý stav v copyrightoch a pantentoch, ktorý k nám importuje USA neprevládol v celej európe.

Flash Player 9 pre Linux v roku 2007

Tak toto bola teda rana pod pás. Nie len že asi pred polrokom Tinic Uro - vývojár flashu - vo svojom blogu tvrdil, že linuxová verzia flashu preskočí veriziu 8.0 a že bude hneď 8.5, tak teraz to vyzerá, že sa najskôr dočkáme až verzie 9. A myslím si že nebudem hovoriť úplne z cesty keď poviem, že v tej dobe na platforme windows už bude minimálne verzia 9.5 či 10. To však ešte nie je všetko. Adobe Macromedia zatiaľ vôbec neuvažuje o 64bit verzii jak pre windows tak pre linux. Zaspali snáď dobu? Vyzerá to asi tak, že pokiaľ nebude reálný 64 bit windows OS tak sa nedočkáme ani 64 bit flash playeru. Nerozumiem prečo Adobe neuvoľní špecifikáciu flashu, keď nestíha vývoj pre rôzne platformy. Ak bude naďalej takto ignorovať požiadavky zo strany linuxovej/64bit komunity tak sa može ľahko stať že vznikne nový otvorený formát a Adobe zostanú akurát slzy pre plač. Už dnes sa vyvýja open source player pre flash - GNU Gnash a do konca roka už možno nebudeme potrebovať macromediacký player a vystačíme si z gnash-om. Ale otvorený štandard je otvorený štandard a nad tým by sa malo Adobe zamyslieť, inak to môže skončiť ako s Microsoftím doc a novým odf.

Sunday, May 28, 2006

Balíčkovanie pomocou debhelper-u

Už asi dva týžne som sa chystal naštudovať si prácu s debhelper skriptami aby balíčky, ktoré vytvorím boli správne a rýchlo vytvorené a ľahko spravovateľné. Dosť dlho som hľadal na internete nejaké how to ako používať debhelper skripty ale okrem manuálov k skriptom, Debian Developer's Reference a Debian Policy Manual som na nič podstatné čo by mi pomohlo nenarazil. Pravda, jeden by povedal, že to bude stačiť ale nestačilo. Bolo potreba urobiť veľa pokus-omylov aby to všetko pekne fungovalo.
Začal som výberom aplikácie k zabalíčkovaniu. Jasne, že keď už som to raz skúsil s pekwm manuálnou cestou, skúsil som to tentoraz s pomocou debhelper skriptov.

  • Najprv si bolo treba nainštalovať potrebné balíčky so skriptami - debhelper, dh-make a devscripts.

  • Stiahnute zdrojákov z pekwm.org - chystal som sa preložiť aktuálny svn kód:
    svn checkout http://pekwm.org/svn/pekwm/trunk pekwm

  • nasledovalo premenovanie adresára pekwm na pekwm-0.1.5-svn pretože si to vyžadoval dh_make ( <package>-<version> )

  • cd pekwm-0.1.5-svn

    Tým sa vytvoril Makefile a configure, ktoré tiež vyžaduje dh_make skript.

  • Spustenie dh_make:
    dh_make -s -e your.email@idontknow.where -c gpl
    dh_make si berie informácie o maintainer-ovi z účtu užívateľa, ale nepišiel som na to ako okrem emailu prepasírovť skrz parameter i meno maintainer-a takže som musel urobiť drobnú upravu v /etc/passwd. Ďalšie parametre v manuálových stránkách ( -s ako single binary package, -c akú licenciu použiť ).

  • spustením dh_make v adresári pekwm-0.1.5-svn sa vytvoril podadresár debian/ s hromadou ukážkových súborov. Večšinu ale bežne nevyužijeme. Záleží od aplikácie ktoru balíčkujeme. Dôležité pre nás sú súbory control, changelog, conffiles, dirs, docs, menu a rules.

  • control - tento súbor obsahuje informácie o balíčku. Jednotlivé časti sú bližšie popísané v debian policy.
    Takže som vyplnil Section: x11 keďže sa jedná o window manager, Version: 0.1.5-svn-1 aby bolo jasné o akú verziu ide - táto časť tam po vytvorení dh_make-om nebola, dh_make totiž vytvorí control ako source control file a nie ako binary control file - toto bude ešte vyžadovať trochu skúmania ale doplnením Version sa nič nepokazí - ďalej Architecture: amd64, Depends: ${shlibs:Depends}, ${misc:Depends} - sa generuje automaticky pri buildovaní balíčku a preto je dobre tieto premenné nemeniť pokiaľ to naozaj nepotrebujeme ( ďalšie info na debian-policy ) - a nakoniec doplniť popis balíčku do Description:

  • conffiles - obsahuje cesty ku konfiguračným súborom, ktoré ma balíček obsahovať - tento súbor som nechal prázdny a ./configure v rules skripte volal z parametrom --sysconfdir=/etc

  • copyright - upraviť časť odkiaľ boli zdrojáky stiahnuté - It was downloaded from http://pekwm.org - a meno držiteľa copyrightu - Copyright Holder: Claes Nästen <xxxxxx@xxxx.xxx>.

  • docs - v tomto súbore sa nachádzajú dalšie dokumenty, ktoré ma balíček obsahovať mimo changelogu či manuálových stránok - dh_make ich v mojom prípade správne identifikoval takže nebolo treba žiadnych úprav.

  • dirs - obsahuje štrukturu adresárov, ktorá sa ma pre balíček vytvoriť - v mojom prípade prázny - všetko sa nastavilo u ./configure cez parametre.

  • menu - nastavenie aké informácie sa majú objaviť v menu - asi debian menu pre KDE a GNOME ( špekulácia :-P )
    ?package(pekwm):needs="wm" section="WindowManagers" title="Pekwm" command="/usr/bin/pekwm"

  • changelog - je súbor zmien týkajucích sa balíčku - zmeny týkajúce sa zdrojákov sú v inom changelogu. U tohto súboru i keď ma naozaj jednoduchú štruktúru som sa chvíľu pozastavil. Skúšal som ho editovať emacs-om, ktorý mi hneď zapol changelog-mode, v ktorom sa jednotlivé záznamy odsadzujú pomocou <TAB>. Bohužiaľ debian changelog vyžaduje odsadzovanie pomocou 2 medzier, takže chvíľu trvalo než som pochopil v čom je vlastne chyba.

  • rules - no a nakoniec ten najdôležitejší súbor/skript. Je to vlastne taký Makefile, pretože začína #!/usr/bin/make -f a ktorý používa hlavne debhelper skripty. dh_make ho pekne pripravil preto stačilo len pár úprav:
    config.status: configure
    # Add here commands to configure the package.
    CFLAGS="$(CFLAGS) -Wl,-z,defs" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --sysconfdir=/etc --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info

    už spomínaný --sysconfdir=/etc a ďalej v časti binary-arch: build install ukázať skriptu dh_installman kde má hľadať manuálové stránky
    dh_installman doc/pekwm.1
    Tým bolo všetko nastavovanie balíčku hotové a mohlol som sa pustiť do bildovania.

  • V adresári pekwm-0.1.5-svn som teda spustil
    fakeroot dpkg-buildpackage -b
    a balíček sa úspešne vytvoril. Pravda nešlo to hneď na prvý pokus pretože bolo treba vychytať všetky chyby v predošlých nastaveniach a preto bolo treba spustiť dpkg-buildpackage viac krát a to by s prekladaním zdrojákov trvalo dlho. Takže keď už som to mal raz preložené, spúšťal som dpkg-buildpackage s parametrom -nc ( Do not clean the source tree(implies -b) )
    fakeroot dpkg-buildpackage -b -nc

Popis ďalších dh_ skriptov je pekne popísaný v manuále k debhelper-u až na dh_buildinfo ku ktorému manuál chýba a u ktorého som sa zdržal pretože som si myslel že ho budem potrebovať k zisteniu závislostí pre balík ale nakoniec som zistil, že už to za mňa obstaral dh_make v súbore pekwm.substvars

Takto som teda vytovril balíčky:

Balíčky už pomaly konvergujú k dokonalosti a ak ešte pochopím pár vecí ohľadom správy changelogu a control-u tak rozdiel od dokonalosti nepoznáte :-D.

Najbližsie sa chystám na balíčkovanie iPager-u. Všetky balíčky sa budú postupne objavovať na http://aboutq.wz.cz/download/