Sunday, April 15, 2012

gentoo on the samsung 900x3a - the tricky parts

I installed gentoo about two months ago on my shiny new samsung 900x3a, most things work out of the box but some don't.

Kernel module

To make it work first build a custom kernel module created by Corentin Chary (iksaif) . As of 3.3.1 it hasn't made it to mainline yet, although it is scheduled for inclusion. Make sure you have a recent kernel emerged, symlinked, built and installed.
su - cd /usr/src/ git clone https://github.com/iksaif/samsung-laptop-dkms cd samsung-laptop-dkms make make install modprobe samsung-laptop If this works without errors then depmod -a
If you have an error 2 you likely have /usr/src/linux/ pointing to a kernel that isn't the one you are running.

Udev Rules

Enter the following into /lib/udev/keymaps/samsung-90x3a
0x96 kbdillumup # Fn+F8
0x97 kbdillumdown # Fn+F7
0xD5 wlan
This will make the scancodes known to udev.
The next step is create a rule in /lib/udev/rules.d/95-keymap.rules.
ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="90X3A", RUN+="keymap $name samsung-90x3a"
This file serves to match the laptop to the keyboard, i.e. in our case it finds a samsung 90x3a and will then load the file we created earlier. This is not triggered right now, to activate them now run:
 grep -A 2 keyboard /proc/bus/input/devices  | grep Sysfs
This will tell you the device name for your keyboard, in my case event5
/lib/udev/keymap input/event5 /lib/udev/keymaps/samsung-90x3a
Now these new rules should be loaded, check that you can see them by running xev in a terminal emulator in X. If you press Fn+F8, then you should see events. If you don't see any, then it isn't working.
More to come...

Tuesday, April 10, 2012

python initializers

I just got bitten by this, so let's share. I wanted to be lazy about initializing an array of 250 by 250 values and wrot e cache = [[-1]*250]*250. This unfortunately gave the wrong results later on, because the inner arrays are just pointers to one object, thus all 250 arrays inside are the same. Try for yourself

>>> a = [[0]*2]*2
>>> a
[[0, 0], [0, 0]]
>>> a[0][1] = 1
>>> a
[[0, 1], [0, 1]]

Conclusion:
Be very careful when using these "new" lazy style initializers!

Sunday, April 1, 2012

MacOS Lion and Dashboard widgets on the desktop

A friend of mine just got a new mac and under macos lion it's apparently more difficult than before to get dashboard widget onto the desktop. To enable them disable launchpad as spaces, do

defaults write com.apple.dashboard devmode YES

and logout and login again. Then goto the dashboard (F12 usually), hold the widget and go back to the desktop (F12 again).