/srv/irclogs.ubuntu.com/2010/10/01/#ubuntu-arm.txt

persiagourneau, The Netwalker V2 might also meet your needs: 5" tablet, ships with 9.04, USB host, etc.00:02
* rsalveti brb00:23
cwillu_at_workpersia, link?01:09
persiahttp://www.sharp.co.jp/netwalker/pct1/index.html01:11
persiahttp://www.sharp.co.jp/netwalker/pct1/spec/index.html might be more useful for some folk :)01:13
cwillu_at_workno english page?01:14
persiaNot from Sharp01:14
* persia looks for a reseller01:14
persiahttp://shop.conics.net/index.php/computers/pda-mid/sharp-netwalker-pc-t1-b.html01:16
persia(also available in Silver)01:17
cwillu_at_workhttp://www.alwaysinnovating.com/products/touchbook.htm seems more useful01:19
cwillu_at_workI'm a sucker for a physical keyboard :p01:19
persiacwillu, I also, which is why I got one of http://shop.conics.net/index.php/computers/pda-mid/sharp-netwalker-white.html :)01:20
persiatouchbook is too big and heavy to be exciting for me (although it works nice, and I've seen a few folk very happy with them)01:21
persiabut gourneau was looking for something like the SmartQ7, and the SmartQ7 can't run modern Ubuntu.01:21
persiaIn the with-physical-keyboard-but-oversized-for-persia arena, there is also http://www.genesi-usa.com/products/smartbook : I know some Genesi stuff ships with Maverick, but don't know anyone who purchased one of these yet.01:24
persia(and, so, I have no special affinity for i.MX51x based designs: they just happen to be widely available with little waiting today)01:25
persias/so/no/01:25
davidmpersia, lucid not Maverick01:50
persiadavidm, The Efika Smartbook ships only with Lucid?  The Maverick shipments I heard about were EfikaMXs01:52
persiaOr maybe that's just stuff from the developer program.01:53
davidmI was thinking of the Genesi stuff02:02
davidmIf its Maverick it's not something we have done as we do not have a kernel that works with maverick02:02
persiaNobody is shipping our kernels today, except us.  All of Touchbook / Smartbook / Netwalker require custom kernels, sadly.02:03
davidmThe iMX51 kernel was already a release behind on lucid02:03
persiaI think Genesi has a maverick imx51 private kernel02:03
davidmand Freescale does not have one new enough02:03
loolThere's a maverick image download for the efikamxes02:04
persiaAh, hrm.  Could be old.02:04
davidmThey would have had to forward port "a lot" of stuff02:04
persialool, Do you have a link, or know the kernel version offhand?02:04
loolbottom of http://www.powerdeveloper.org/platforms/efikamx/linux02:04
loolTheir kernels are on gitorious02:04
loolhttp://www.gitorious.org/efikamx/linux-efikamx02:04
loolthere's a -kernel for the smartbooks as well02:05
persiaSorry for confusion, by "internal" I meant "specific to that board and not in Ubuntu"02:05
loolit's 2.6.31 based though02:05
davidmwill be interesting what kernel they shoehorned in02:05
davidmAh so it is a lucid kernel02:05
persiaOK.  2.6.31 is a bit aging, but with enough sauce, I suspect it could work just fine.  It has the new input stuff.02:05
persialool, Do you know if the linaro imx51 tree supports the Genesi or Sharp products?02:09
=== asac_ is now known as asac
rsalveticooloney: hey, just sent one email saying that I didn't get any issues while testing current kernel04:58
rsalvetiand nice that the patch was easily merged, and we got a new version already04:58
cooloneyrsalveti: thank you so much for testing.04:58
rsalvetinp04:59
cooloneyrsalveti: helped a lot. I am going to verify the auido patches, then send out the pull request04:59
cooloneyrsalveti: so far did you meet any audio issue with the audio fix04:59
rsalvetinow the next step is to activate 1gb at the pre-installed image, and let more people test it04:59
cooloneyrsalveti: agree, ogra will help to activate that mem=1G in U-Boot boot args, i guess05:00
rsalvetiusing the kernel built from my tree (with the audio patches) and using the config files from bug 637947 I was able to listen a couple of mp3 without any issues05:00
ubot2Launchpad bug 637947 in linux-ti-omap4 (Ubuntu Maverick) (and 1 other project) "no sound devices on current ES2.0 boards (affects: 1) (heat: 14)" [High,Confirmed] https://launchpad.net/bugs/63794705:00
rsalvetibut testing with hdmi05:00
rsalvetineeds more testing, but it seems that's working at least05:01
persiarsalveti, Which config files did you use from the bug?05:01
cooloneyrsalveti: i never tried auido over hdmi before. need any special cable convert?05:01
rsalvetipersia: with latest tree you can use SDP4430.conf that berco added today at the bug report05:02
rsalvetiand then it seems we still need to change pulse to use it05:02
cooloneyrsalveti: oh i just connect a speaker to the board, then sound's out05:02
cooloneythat's my plan05:02
rsalveticooloney: cool, I don't have a speaker around, so I tested with my tv05:02
rsalvetipersia: I didn't follow all the audio discussions we had last week, but how are we planning to fix the need of changing the pulse audio config file?05:03
cooloneyrsalveti: you got expensive equiment, heh05:10
* cooloney brb, lunch time05:10
persiarsalveti, Which pulse files did you change from default?05:19
rsalvetipersia: /etc/pulse/default.pa05:20
rsalvetipersia: is expected that the alsa config file be enough to get it working with pulse?05:21
persiaNo.05:21
rsalvetiok05:21
persiaJust to confirm, the changes you made to default.pa were to disable module-udev-detect and to add some load-module calls?  Did you have to change it any other way?05:21
rsalvetidid the same change ogra did at https://bugs.edge.launchpad.net/ubuntu/+source/linux-ti-omap4/+bug/637947/comments/1405:22
ubot2Launchpad bug 637947 in linux-ti-omap4 (Ubuntu Maverick) (and 1 other project) "no sound devices on current ES2.0 boards (affects: 1) (heat: 14)" [High,Confirmed]05:22
rsalvetiso how are we going to proceed with the relase?05:22
persiaOK.  That's not as bad as it used to be.  If you don't do this, does it just not work at all, or only partially work?05:23
rsalvetithe alsa conf is fine, we can create a package for it and deploy it at the TI ppa, or even setting up at jasper in the worse case05:23
rsalvetithat's what I'm going to check now05:24
rsalvetijust tested following the procedure to be sure the kernel was working05:25
rsalvetias mpoirier was working at these issues05:25
persiaLast I understood with the investigation of this was that we didn't have the module loading stuff we needed from udev, and udev didn't have enough information in /sys to provide it.05:25
persiaNo worries.  We can figure out what is missing :)05:25
rsalvetiok, I'm just installing the latest pre-installed image and will check this05:27
persiaWow!  I would have expected yo u to just revert the default.pa changes or reinstall pulse, forcing config overwrite.05:30
rsalvetinops, that sd card is invalid atm :-)05:31
rsalvetimany tests and debugging happening during the day ;-)05:31
rsalvetibut panda is fast, so I'm fine05:32
rsalvetipersia: ok, just changed the alsa file06:13
rsalvetistill got [  123.889129] asoc: no valid backend routes for PCM: SDP4430 Media06:13
rsalvetilet me test aplay now06:13
persiaThat message is the kernel not knowing how to deal with the audio path: either the driver needs touching, or the config needs more work.  Hard to say which is correct.06:14
rsalvetihm, no hardware at audio menu06:14
persiaOK.  Anything from pulse in syslog or .xsession-errors?06:14
rsalvetiaplay gives main:654: audio open error06:16
rsalvetilet me check06:16
persiaWhat!06:17
persiaIf aplay has an error, then ALSA is broken.06:17
rsalveticould be an invalid entry at the config file06:17
rsalvetihttp://launchpadlibrarian.net/56799615/SDP4430.conf06:17
persiaYou're running with a kernel with the patches applied?06:18
rsalvetihm, doesn't seems that it loaded the config file06:20
rsalvetiat least alsamixer is not showing the same thing06:21
rsalvetisame volumes and etc06:21
rsalvetipersia: yup06:21
persiaWell, that doesn't sound "fixed" :)06:21
rsalvetigetting  0 [SDP4430        ]: SDP4430 - SDP4430 from /proc/asound/cards06:21
persiaHow was it when it worked for you?06:21
rsalvetiusing https://bugs.edge.launchpad.net/ubuntu/+source/linux-ti-omap4/+bug/637947/+attachment/1583666/+files/omap4_amixer_config.sh06:22
ubot2Launchpad bug 637947 in linux-ti-omap4 (Ubuntu Maverick) (and 1 other project) "no sound devices on current ES2.0 boards (affects: 1) (heat: 14)" [High,Confirmed]06:22
rsalvetiand the pulse change I said before06:22
rsalvetibut I remember the changed berco|laptop did was to be able to load the config file automatically during boot06:22
rsalvetiwhile recognizing the board name06:22
persiaWhich involved some kernel changes.06:22
rsalvetiyup06:23
rsalvetipersia: ok, removed the old alsa.state, rebooted and now I don't get this error at aplay06:26
rsalvetiprobably old config hanging around06:26
persiaOK.06:26
rsalvetibut still no sound...06:26
rsalvetistill seems that it didn't load the config file06:27
persiaSo aplay still doesn't work?06:27
rsalvetidoesn't give any error, but no sound, but probably explained by the lack of correct values at the mixer06:28
rsalvetivolume and etc06:28
persiaWhich is supposed to be fixed by that config file06:28
rsalvetiyup06:28
rsalvetipersia: do you know how it should request and load the config file?06:30
rsalvetiat least to have something to start the debugging06:30
rsalvetiok, alsactl should give me some hints06:34
rsalvetialsactl init gives me: Found hardware: "SDP4430" "" "" "" ""06:47
rsalvetibut seems to be loading just the default alsa settings06:53
=== amitk-afk is now known as amitk
persiarsalveti, Sorry, I don't really.  Fiddling with alsactl is about the most I can do.  GrueMaster may know more.07:06
rsalvetipersia: but I'm able to play with aplay -Dplughw:0,7 /usr/share/sounds/speech-dispatcher/test.wav, at the hdmi07:12
rsalvetithen how to tell the routes to pulse?07:12
rsalvetiwithout messing up with the config file07:12
rsalvetiwell, more testing tomorrow, time to get some sleep now07:14
* rsalveti out07:14
persiaGood night :)  Anyway, the way to tell pulse how to work is for udev to populate the right audio paths, and have the right stuff in /sys.  I'll dig all that up, and prepare something that lets us test that for you and Gruemaster to play with when day gets there.07:19
=== hrw|gone is now known as hrw
hrwmorgen09:13
persiaFeeling particularly locale-bound today? :)09:14
loolpersia: No, the Sharp and Genesi products aren't supported in upstream or in Linaro trees10:08
hrwpersia: no, just from time to time I change10:11
amitkpersia: if you care to compile your own kernel, try the patches in my tree on git.linaro.org for genesi (and I suspect Sharp too)10:23
amitkI'm working hard to get the basics all working for the next kernel merge window10:24
jo-erlendIf I wanted to install the preinstall on a harddisk, is there anything different I need to do, or would the approach be the same?10:39
ograbug 65287311:30
ubot2Launchpad bug 652873 in hdparm (Ubuntu) "after installing hdparm, panda board fails to boot (affects: 1) (heat: 6)" [Undecided,New] https://launchpad.net/bugs/65287311:30
=== zumbi is now known as _
=== _ is now known as Guest45422
=== zumbi_ is now known as zumbi
=== bjf[afk] is now known as bjf
persiaamitk, I'll try on a Netwalker just after release.  That sounds extra promising.  Thanks.15:30
=== XorA|gone is now known as XorA
Kamondeliousis the rtl8192su driver support ported already in 10.04 or 10.10?15:47
KamondeliousI've been googling and can't find an answer =(15:47
amitkpersia: I'm not targeting it to ubuntu/linaro release. If I get it upstream in the next couple of weeks, I might ask for it to be pulled into linaro.15:52
persiaamitk, It's not your target: it's my time and available hardware :)15:57
persiaI'm not likely to have sufficient armel build-time to build a kernel until release, and am even more unlikely to have time to build a custom Netwalker boot SD.15:58
=== JaMa is now known as JaMa|Off
=== amitk is now known as amitk-afk
=== orbarron|OoO is now known as orbarron
gourneauI am getting a SmartQ V7.  It is said to have Ubuntu on it.  Does anyone know anything about those?16:25
rsalvetijo-erlend: if possible, can you test bug 646368?16:37
ubot2Launchpad bug 646368 in linux (Ubuntu) "smsc911x has no module alias, does not get auto-loaded on OMAP3 EVM (affects: 1) (heat: 14)" [Undecided,New] https://launchpad.net/bugs/64636816:37
rsalvetiI created a kernel deb that has the proper patch to make the module autoload correctly16:38
rsalvetias I don't have an igepv2 I can't test it16:38
* rsalveti out for lunch16:38
=== hrw is now known as hrw|gone
=== XorA is now known as XorA|gone
=== marvin24_ is now known as marvin24_DT
rsalvetiargh, using 3g now, having issues with my internet provider18:33
GrueMasterfun18:36
=== JaMa|Off is now known as JaMa
=== rsalveti` is now known as rsalveti
=== zumbi_ is now known as zumbi
=== You're now known as ubuntulog
txwikingeris there already a good and free IDE that I can use for the lpc1343 arm chip on (K)ubuntu?20:11
GrueMasterNot something that this group really focuses on.  This forum mainly focuses on ubuntu running on Cortex A8/9 based systems.20:18
ogra_acand why would you run an IDE on your arm device ?20:21
ogra_ac:)20:21
bfarrowtxwikinger: I doubt that there is a pre-packaged IDE, but if it uses a gcc crosscompiler then you can probably use eclipse or kdevelop.20:24
txwikingerthe crosscompiler is only available for maverick, correct?20:25
txwikingerkdevelop is ok20:25
devilhornsor codelite, or codeblocks20:25
devilhorns(if you don't want the java bloat of eclipse, or qt bloat of kdevelop) :)20:25
bfarrowtxwikinger: and you should be able to use gdbserver if your target is running linux or gdb stubs if the target has no OS20:27
txwikingerwell.. the lpc1343 is too small to run linux I would think20:28
txwikingeronly has 32k flash and 8k ram20:28
txwikingerThe whole thing is for a hackerspace conference20:29
bfarrowtxwikinger: if the ide uses gdb then you can usually get it to use the cross gdb and debug over a serial line to gdb stubs20:29
txwikingerThe name badges that are given out are special prototype pcbs20:30
txwikingerI will be giving a presentation and would like to offer in that presentation a free toolchain/IDE that works on Ubuntu20:30
bfarrowtxwikinger: do you have a serial port on it ?20:30
txwikingerYes, a usb port20:30
bfarrowtxwikinger: hmm, I don't know hard it would be to get gdb stubs to use USB.  Can you get to the UART signals from the lpc1343 ?20:32
txwikingeryes.. you can do that too20:33
txwikingerwe have the pins layed out to be used20:34
bfarrowtxwikinger: Hmm, I will have to give codelite a go, it looks like it can use an external cross gdb.20:39
devilhorns:) it's not bad if you like IDEs20:39
devilhornspersonally, I just use jed + rxvt-unicode :)20:40
ogra_acvi FTW :)20:41
devilhornsewwww20:41
bfarrowI tend to use vi and gdb command line due to the lack of a good and fast IDE20:42
devilhornsI'll never understand people's obsession with an editor that requires you to use a bunch of archaic and cryptic key strokes todo even the simpliest things :)20:44
GrueMasterWhat do you use?20:44
devilhornspersonally, I just use jed + rxvt-unicode :)20:45
ogra_acif i'd use jed my code would be scattered with :q20:45
ogra_ac:)20:46
ogra_aclike my OO.o docs are20:46
devilhornslmao20:46
devilhorns:q some kind of weird smiley ? or one of those cryptic vi commands ?20:46
bfarrowat least I haven't configured my shell to use vi key-commands20:47
ogra_acfinger memory ;)20:47
ogra_acdevilhorns, the quit command20:48
devilhornsogra_ac, aahhh20:48
ogra_ac:w is also one i use often20:48
txwikingerWell. I am fine with commanline and editor too20:49
devilhornssee, that's another reason I like jed ... can also use the menus, so no need to remember cryptic key strokes :)20:49
txwikingerbut there are those annoying people who call themselves users :D20:49
devilhornstxwikinger, blah, losers :P20:49
txwikingerWell... I want to see some happy faces when I do my presentation20:49
devilhornswell that's easy20:50
ogra_acgive out drugs at the entrance ?20:50
txwikingermaybe I should use quickly or quick-qt and create an IDE during my presentation :)20:50
devilhornstell them all they are gonna get laid :P20:50
txwikingeroh well.. there goes the PG rating20:51
devilhornslol20:51
robclarkrsalveti: is there some trick to make your deb-pkg trick for cross compiling kernel play nicely with dkms?21:46
robclarkI ended up getting dkms to build the modules ok (for sgx and tiwlan).. by NFS mounting my original kernel srcs directory under /lib/modules/.../source21:47
robclarkbut somehow vermagic is wrong in the resulting modules.. still using the old kernel's vermagic21:47
ndecrobclark: rsalveti i am interested in the solution too ;-)21:49
rsalvetirobclark: ndec: hm, never tried this kernel with dkms21:51
rsalvetiprobably missing the headers package21:51
rsalveticould be that dkms is building with omap4 headers21:51
rsalvetiinstead of yours21:51
robclarkhmm, yeah..  I had to create a symlink for the headers.. if that is where it gets vermagic, that would explain21:52
robclarkany convenient way to get a headers .deb too.. or you just manually copy over?21:52
ndecrsalveti: it's a bit more than that in fact. there are some tools that are built when building the kernel. when cross compiling these tools are built for x86, and they are embedded in the .deb. when building the module natively with dkms, it fails since the tools won't work on arm21:52
rsalvetindec: yep, saw your email at the kernel-team ml21:53
rsalvetiit seems we don't have an entry for kernel-headers similar with deb-pkg21:54
rsalvetindec: did you try cross-compiling the ubuntu kernel?21:54
ndecrsalveti: yes, we do that quite often in fact.21:55
rsalvetibut using dpkg-buildpackage?21:55
rsalvetiusing the latest changes from rtg21:55
* robclark was just trying to build the old fashioned way..21:56
ndecrsalveti: robclark: this: CROSS_COMPILE=arm-none-linux-gnueabi- skipabi=true skipmodule=true fakeroot debian/rules binary-omap4, would create the kernel and headers .deb files (with codesourcery)21:56
ndecthat should work with the new maverick cross compiler if you change CROSS_COMPILE21:56
rsalvetindec: yup, and did it work with dkms?21:56
ndecrsalveti: nope... that's why I sent the email to andy ;-)21:57
ndecor tim, i think.21:57
robclarkndec: No rule to make target 'fakeroot'21:57
rsalvetioh, so it's not just a theory, it's actually a proved problem21:57
robclark(this is kernel-ubuntu.git from d.oz.o)21:58
rsalvetifakeroot debian/rules clean21:58
ndecrobclark: I think you added an extra make in front no?21:58
ndecrobclark: just copy/paste the command above21:58
robclarkahh, yeah21:58
robclarkgotcha21:59
ndecrobclark: and apt-get install fakeroot, if you don't have it21:59
robclarkalready got it21:59
ndecrobclark: we are down to a few minutes for a full cross build on 8-core machine.21:59
rsalvetiouch21:59
rsalveti:-)21:59
robclarkndec: make: *** No rule to make target `binary-omap4'.  Stop.22:00
rsalvetirobclark: try cleaning it, using the command I sent22:00
robclarkk22:00
robclarksame22:01
robclarkno worries.. it seems like it would be easier for now just to manually copy over headers22:01
rsalvetiweird, works fine for me...22:02
rsalvetibinary-omap for omap 3 kernel and binary-omap4 for omap 422:02
rsalvetibut the omap 3 just works if you're using our main kernel tree22:02
robclarkhmm.. I'm using kernel-ubuntu.git tree on dev.omapzoom.org.. the for-ubuntu-2.6.35 branch..22:05
ndecrobclark: this is the right kernel, this is our branch that gets merged in ubuntu official kernel later.22:06
robclarkyeah.. so I figure it has all the appropriate magic..22:06
robclarkhmm, ndec, I'm a bit confused about how your command is supposed to work...22:16
robclarkgrep -r binary-omap4 debian22:16
robclarknothing22:16
robclarkmaybe I am on wrong branch?22:16
ogra_acrobclark, how do you build ?22:17
ogra_acis it a package ?22:17
robclarkwell.. in the past I never built kernel package.. I'd just build manually, copy uImage to my MMC card, and away I go22:18
ogra_acwhat counts in a package is the actual dependency in the control file22:18
ndecrobclark: grep -r 'binary-' debian22:19
dcordesogra_ac: ok it really was file corruption22:19
robclarkhmm.. well..  actually, I'm really just looking for the easiest way to rebuild a kernel now that I'm using the initrd stuff, and ubuntu kernel which makes a lot more stuff modules (and sgx and stuff)22:19
ndecrobclark: the easiest one is native compilation ;-) so I think you are in fact looking for the fastest one ...22:20
robclarkndec: yeah.. I guess fastest is a better word..22:20
robclarkndec: http://pastebin.com/DbXyMDWy22:20
robclark(yeah, IT stopped blocking pastebin!)22:20
dcordesRC working fine now22:20
ogra_acdcordes, ah, i was just wondering what you refer to in the above conversation :)22:21
ndecrobclark: oops. you need to run this first: export $(dpkg-architecture -aarmel)22:23
robclarkahh.. ok.. let's try that22:23
rsalvetirobclark: do you have a directory called debian.ti-omap4?22:23
robclarkrsalveti: yup22:24
rsalvetiso fakeroot debian/rules clean should work and set up your env22:25
robclarkok.. the extra export cmd that ndec gave seems to have done the trick22:25
ndecrobclark: yes, we need it too22:25
rsalvetirobclark: makes sense, otherwise you're going to build the kernel following your host arch22:26
robclarkahhh.. yeah, I could see how that would be a problem22:26
robclarkoh.. doh.. it forces me to mrproper.. which nukes my .config..22:27
rsalvetirobclark: yup, it'll get the config file from the package22:27
rsalvetiyou can copy yours to debian.ti-omap4/config/config.common.ubuntu22:27
rsalvetibefore buildint it22:27
robclarkahh.. ok.. cool22:27
dcordestmzt_: how do you rotate the screen in rhobuntu ?22:31
dcordestmzt_: xrandr ?22:32
tmzt_no, add Option "CW" to xorg.conf under the device22:34
tmzt_Option "Rotate" "CW"22:34
tmzt_you aren't using codeaurora driver?22:34
tmzt_you're using fbdev?22:34
dcordestmzt_: I am using xf86-video-fbdev , yes22:36
dcordestmzt_: I compiled xf86-video-msm from codeaurora but the msm_fb in the kernel I use does not match so I will get corruption22:36
tmzt_Section "Device" Identifier      "fbdev" Driver          "fbdev" Option  "Rotate" "CW"22:36
tmzt_EndSection22:36
dcordesxrandr does not work in rhobuntu ?22:37
dcordesbtw, what is rhobuntu ? karmic ?22:37
robclarkrsalveti, ndec:  well, not quite all the way.. but further.. http://pastebin.com/Q49QvW5022:54
robclarkis our tree missing debian/control?22:54
rsalvetirobclark: gets generated by running clean22:55
robclarkhmm.. ok.. so I should have followed your instructions the first time ;-)22:55
ndecsounds like a good starting point!22:56
* robclark is just impatient sometimes22:56
dcordesIn the latest netbook rootfilesystems the gnome-panel is locked so that one cannot move or remove applets. I checked gconf-editor on it and there is the /apps/panel/global/locked_down bool23:06
dcordesIt is not set to true so it doesn't seem to affect it23:10
orbarronhey guy I need a toll to test a touch screen on ubuntu23:11
orbarronerr toll = tool23:11
dcordesorbarron: multi touch ?23:15
dcordesSo the qustion is, how can I unlock the gnome-panel in netbook ?23:15
orbarronno.. thought I try touchscreen calibrate23:15
dcordesdo you use evdev or tslib ?23:16
dcordesevtest or ts_test23:16
prpplaguedcordes: it's an event interface23:17
orbarronno... but I need something to calibrate23:17
dcordesorbarron: ts_calibrate23:18
persiagourneau, If you want to use Ubuntu on it, I recommend against the SmartQ7: the processor in it can only run Ubuntu 9.04 (which ceases support in a couple weeks).23:38
persiagourneau, The closest I know to be available in form-factor that can run current Ubuntu is the Sharp Netwalker tablet (available widely retail in Japan, or from exporters (conics.net and others)23:39
orbarronahh can't get ts_calibrate...23:56

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!