~hruske Hruške, jabuke, jablane, čežane. » linux
Home Contact Sitemap

Hruške, jabuke, jablane, čežane.

Ste se gdaj vprašali, zakaj Najboljšega soseda nikoli ni doma, ko pridete na obisk?

Slovenski Django “localflavor”

Posted on September 18th, 2009 in django, linux, python, slovenija |

Pythonマスコット with Django本
Image by Surgo via Flickr

Že dlje časa sem imel v mislih, da bi zbral skupaj drobce kode, ki sem jih potreboval za manjše projekte v Djangu, jih uredil in dal ven kot Slovenski localflavor modul za Django framework. No, ta čas je končno tu, saj sem zaradi prejšnjega blogposta potreboval spisat algoritem, ki zna preverit, če je EMŠO pravilna, za to pa sem uporabil kar Django forms.

Koda se nahaja na GitHubu, projektu pa je ime django-localflavor-sl. Vsake toliko časa bom pogledal, če je kak “fork” in kodo združil.

Reblog this post [with Zemanta]
Komentarji so izklopljeni

A replacement for bzip2 compression

Posted on Maj 15th, 2008 in debian, linux |

I was looking for a replacement for the old and slow bzip2. Not to say it doesn’t work, it’s just too slow for use case I have, and gzip just doesn’t bring enough space savings. And, after all, why settle for less than you’re able to achieve?

So, after checking out Linux compression utilities, the only one that fits my requirements:

  • it should be included in Debian repositories
  • it should compress approximately as good as bzip2 does in similar time, but should decompress faster
  • if possible, it should be free software

The only real contestant is 7-zip, which uses the super efficient LZMA algorithm for compression. It can be quite slow, though. So, the idea is to try to fine tune the utility, to use at most the space bzip2 would or less, and be faster when decompressing. p7zip, the Unix port, has similar compression settings as gzip has, ranging from 1 to 9. I tested some of them, to find optimal settings for my use case and made some benchmarks. I used three different test files, all of which were tar files, but with different contents. Test case 1 was 40MB of text, test case 2 was about 200MB of a recent Haiku OS image and test case 3 were essentially a 70MB bunch of Java JAR files.

This is how the archives compressed. Numbers are normalized to bzip2, for comparison.
7-zip vs. bzip2: Archive size comparizon

Time needed for compression:
Time needed for compression by algorithm and test case

Time needed for decompression:
Time needed for decompression by algorithm and test case

You can see that 7zip always decompresses faster, and that in general, higher 7z compression makes the archive decompress faster. Interesting.

Some more info:

  • 7zip was Debian package p7zip-full 4.57~dfsg.1-1
  • bzip2 was Debian package 1.0.5-0.1
  • test machine was 2.16GHz Macbook with 2GB RAM, doing only the tests
  • frequency scaling was off
  • all files were first cached in RAM by doing “cat file > /dev/null” so disk I/O was not the bottleneck
Komentarji so izklopljeni

Disconnecting the hard drive, the software way

Posted on Maj 8th, 2008 in debian, linux |

A hard drive recently died, taking away lots of data and filling the logs with failed ide requests. Annoying in too many ways. So, how do you make the disk stop yelling?

The easiest is to make the kernel not see it. There’s a neat trick that enables you to do just that, and it’s called module unbinding. So, basically you unmount the drive (or what’s left of it), then you only need to figure out what device to disconnect from which driver, which isn’t that hard. If you do “ls -al /sys/block/sda/”, you’ll see something like this:

drwxr-xr-x  8 root root    0 maj  8 21:47 .
drwxr-xr-x 20 root root    0 maj  8 21:47 ..
-r--r--r--  1 root root 4096 maj  8 21:47 capability
-r--r--r--  1 root root 4096 maj  8 21:47 dev
lrwxrwxrwx  1 root root    0 maj  8 21:47 device -> ../../devices/pci0000:00/0000:00:1f.2/host2/target2:0:1/2:0:1:0
drwxr-xr-x  2 root root    0 maj  8 21:47 holders
drwxr-xr-x  2 root root    0 maj  8 21:47 power
drwxr-xr-x  3 root root    0 maj  8 21:47 queue
-r--r--r--  1 root root 4096 maj  8 21:47 range
-r--r--r--  1 root root 4096 maj  8 21:47 removable
drwxr-xr-x  4 root root    0 maj  8 21:47 sda1
drwxr-xr-x  4 root root    0 maj  8 21:47 sda2
-r--r--r--  1 root root 4096 maj  8 21:47 size
drwxr-xr-x  2 root root    0 maj  8 21:47 slaves
-r--r--r--  1 root root 4096 maj  8 21:47 stat
lrwxrwxrwx  1 root root    0 maj  8 21:47 subsystem -> ../../block
-rw-r--r--  1 root root 4096 maj  8 21:47 uevent

The line of our interest is

lrwxrwxrwx  1 root root    0 maj  8 21:47 device -> ../../devices/pci0000:00/0000:00:1f.2/host2/target2:0:1/2:0:1:0

where you can see, that the device id is “2:0:1:0″. The last step is to actually unbind the device:

cd /sys/block/sda/device/driver
echo -n "2:0:1:0" > unbind

Et voila, your hard drive is no more as far as the kernel knows.

Komentarji so izklopljeni

London calling

Posted on Oktober 7th, 2007 in dovhcajt, linux, zanimivosti |

I am now in London for the coming three weeks or so, building the next Google, hopefully. To be honest, it’s quite a challenge coding Python on a five year old laptop, I could say I have to carefully select what my next task is. ;)

Yesterday was a fun story. Our router (used as a workstation, but actually a laptop) had elected to let half of it’s RAM go wild with errors. To make matters more fun, it was the on-board RAM. Panic, panic. We lost a box and our uplink. Well, the internet connection was faulty before, but probably the RAM can also take a great deal of credit.

Thanks to some minor hacks taking major time, the box is now running Linux (was Windows) along with working Vodafone Mobile Connect connection.

Komentarji so izklopljeni

Forgot your Kopete password?

Posted on September 11th, 2007 in debian, linux, python |

I sure did, and I you didn’t use KWallet, just like me, then you are probably going to find this script a bit helpful when retrieving your forgotten password. Just save the code as a file, eg. getpass.py, and run python getpass.py userid@jabber.org. You will get your password in no time. Be sure to run it in your home dir.

from ConfigParser import ConfigParser
import sys
from kdecore import KStringHandler

config = ConfigParser()
cryptedpass = config.get("Account_JabberProtocol_" + sys.argv[1], 'Password')
print KStringHandler().obscure(cryptedpass.decode("utf-8"))

Komentarji so izklopljeni