środa, września 17, 2008

Cute molecules

For me is Pymol the number one tool for molecule visualization. Sure, there's a lot of visualization software out there on the net and some of them are quite impressing, but I haven't found one that is so flexible and extensible like Pymol. Basically almost all chemistry visualizations tools are OpenGL applications that squeeze more or less the last pixel from your GFX-card. It's just a matter of the settings. So hat makes the difference? The answer is Python. The core program is written in C, but above this is a bunch of Python modules and that means the program is hackable without recompiling. All you need is a plain text editor...

Ever heard about QuteMol? It's a very nice program and the images are just astonishing. The reason why I didn't convinced myself to try it is because it's only available for the Windows and Mac platforms and I'm starting to use my Arch Linux more and more. Ok, now you are probably asking yourself what I asked myself - how do I get such images in Pymol? I was not the first who thought about it. Here's a pymolwiki recipe how it can be done. Like I sed earlier - it's just a matter of the settings. You could write a script for it but I've decided to go one step further integrating it into Pymol. After some cups of coffee I've started playing around with the Pymol GUI python modules and found the right ones - menu.py and preset.py. All modifications were done on a linux Pymol version 0.99rc6, but besically it should also work on other Pymol versions.
First I've opened the file preset.py and defined my own representation preset function called qutemollike (add the code below at the end of the file):

preset.py(Toggle Plain Text)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
def qutemollike(selection="(all)",_self=cmd):
    s = tmp_sele
    cmd.set_color("oxygen",[1.0,0.4,0.4])
    cmd.set_color("nitrogen", [0.5,0.5,1.0])
    cmd.remove("solvent")
    cmd.as("spheres")
    util.cbaw()
    cmd.bg_color("white")
    cmd.set("light_count",10)
    cmd.set("spec_count",1)
    cmd.set("shininess",10)
    cmd.set("specular",0.25)
    cmd.set("ambient",0)
    cmd.set("direct",0)
    cmd.set("reflect",1.5)
    cmd.set("ray_shadow_decay_factor",0.1)
    cmd.set("ray_shadow_decay_range", 2)
    cmd.unset("depth_cue")

and then added a callback (line #495) to it in the file menu.py witch describes all the menus used in the viewer window.

menu.py(Toggle Plain Text)

482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
def presets(s):
    return [[ 2, 'Preset:'       ,''                        ],     
              [ 1, 'simple'   ,'preset.simple("'+s+'")'          ],
              [ 1, 'simple (no solvent)'   ,'preset.simple_no_solv("'+s+'")'          ],           
              [ 1, 'ball and stick' , 'preset.ball_and_stick("'+s+'")' ],
              [ 1, 'b factor putty' , 'preset.b_factor_putty("'+s+'")' ],
              [ 1, 'technical'   , 'preset.technical("'+s+'")'          ],
              [ 1, 'ligands'   , 'preset.ligands("'+s+'")'          ],
              [ 1, 'ligand sites'   , preset_ligand_sites(s)         ],
              [ 1, 'pretty ', 'preset.pretty("'+s+'")'          ],
              [ 1, 'pretty (with solvent)'     , 'preset.pretty_solv("'+s+'")'          ],
              [ 1, 'publication '   , 'preset.publication("'+s+'")'          ],
              [ 1, 'publication (with solvent)'   , 'preset.pub_solv("'+s+'")'          ],
              [ 1, 'QuteMol like', 'preset.qutemollike("'+s+'")' ],
              [ 0, ''               ,''                             ],                      
              [ 1, 'default'   ,'preset.default("'+s+'")'          ],           
              ]


Here is a screenshot showing the added "QuteMol like" option in the preset submenu.

As you can see I've loaded a caffeine molecule. I give it the final polish by typing in the console: set ray_trace_mode,1
ray 800,600
And here's how it looks now.

wtorek, września 16, 2008

Marionette

Jakoś mam awersję do pisania i to nie dlatego, że się nic nie dzieje. Wręcz przeciwnie - przez minione tygodnie działo się naprawdę dużo. Aż za dużo jak na mój gust. Między innymi byłem na 51 Zjeździe PTChem i SITPChem. Tym razem nie jako uczestnik konferencji, ale jako pomoc techniczna. Była to dla mnie okazja by odwiedzić moje byłe alma mater. No cóż... Spotkałem tych i owych. Za niektórymi osobami się trochę stęskniłem (ale tylko trochę), za niektórymi osobami nie przepadałem, a przed niektórymi to uciekałem jak diabeł przed wodą święconą (ujmę to tak, bo nie każdy musi wiedzieć że chodzi o promotora mojej pracy dyplomowej ]:P). W każdym razie, mój krótki pobyt w Opolu utwierdził mnie tylko w przekonaniu, że ten rozdział w moim życiu jest już definitywnie skończony. Tylko się niepotrzebnie poddenerwowałem i rozdrapałem parę starych ran. Dobrze, że byłem większość czasu odcięty od neta, bo bym na pewno część moich myśli tu spisał. A tak całą żółć zlałem do butelki, zakorkowałem, podpisałem "duchowe wymiociny - wrzesień 2008" i schowałem w ciemnym, chłodnym zakątku mej duszy, by sobie jeszcze po fermentowało parę lat...

Całe te moje przemyślenia wynikają z pewnego ukierunkowania myśli po obejrzeniu spektaklu BREL w Teatrze im. Jana Kochanowskiego w Opolu. Coś w tych piosenkach Jacquesa Brela jest, że zarówno młodzi jak i starzy znajdują w nich cząstkę siebie. Muszę powiedzieć, że utwory w wykonaniu Andrzeja Jakubczyka ("Piosenka starych kochanków") i Mirosława Bednarka ("Następny", "Pożegnanie") sprawiły, że przez plecy przechodziły ciarki, a na rękach czułem każdy włos.

Kolega: Nie wiem...
Lightnir: Ciiiiii! Nie psuj nastroju tej po teatralnej chwili.
Kolega: Ha ha ha, bardzo śmieszne. Nie wiem jak wam się podobało, ale jak dla mnie to była za duża dawka kultury jak na jeden wieczór. Wystarczy mi tego odchamiania na najbliższy miesiąc.
Lightnir: ....


No cóż nie wszędzie Brel trafia na tak podatny grunt, jak w moim wypadku. Zastanawiam się czy to może za sprawą mojej buntowniczej natury? Może to z powodu nadchodzącej zmiany klimatów (Opolszczyzna - Pomorze)? A może po prostu z tego powodu, że starzeję się bez wydoroślenia? W każdym spektakl jest wart obejrzenia.

czwartek, września 04, 2008

Fold it!

It's been a while since I've started participate in the Folding@Home project and contributed some work units. After this time I admit it's a bit boring since it's a passive work. I don't even see the results of the folding. To feed my eye's hunger for protein folding I've started to lookup the net for some movies or trajectory files. And then I stumbled upon Fold it!. First impression? Wow, it's great! For those who don't know "Fold it!" is a video game with the goal to fold a given protein to a state with the lowest energy. Instead of using a sophisticated algorithm for solving the folding problem the authors of this game relay on the human ability to intuitively solve 3D puzzles. You can be good at playing this game without a PhD in biology or chemistry. David Baker, a biochemistry professor at the University of Washington and one of the authors, says that his 13-year-old son is faster at folding proteins than he is. And in fact it's really simple to play. Getting trough the short tutorials took me about half an hour, but after that the online competition mode is quite addictive (especially when someone ranks you out).
If you're curious the game looks like this:
and it's definitely worth trying out!

poniedziałek, września 01, 2008

Ennui

Nie ma nic gorszego niż piątkowa nuda. W takim wypadku trzeba sobie znaleźć zajęcie, które wymaga nieco wysiłku umysłowego. Dla mnie nadarzyła się ta okazja kiedy zobaczyłem opis znajomego na gadu:
Wordpress, o zmoro!

Hmm... Ciekawe. Jak do tej pory to słyszałem tylko same dobrze rzeczy na temat WordPressa (pewnie dlatego, że się specjalnie tym nie interesowałem). Jak się okazało mój znajomy próbował postawić WP na jakimś serwerku. Ot, taka zwykła sytuacja typu Windows-user vs evil allmighty *nix server, Dawid vs Goliat, King Kong vs Godzilla, kawa vs herbata, ogórek vs pomidor... Anyway. Jakie jest najgłupsze rozwiązanie, które z reguły pomaga jeśli coś nie działa poprawnie na serwerze http? Pewnie...
(L)ighnir: uprawnienia plików zmień
L: by wygląda że wp nie ma uprawnień do zapisu
(K)olega: a gdzie to zrobic? w sensie jak?
K: bo ja dopiero wczoraj o WP sie dowiedzialem ze istnieje :D
L: siedzisz na windowsie?
K: tak
L: czy na linuksie?
L: aha
K: winda
L: i stawiasz zdalnie
K: tak
L: ale zdalny system to linux
L: więc zmień rekurencyjnie uprawnienia plików
L: chmod -R 777
K: to ja sobie dam na luz :D
K: nie znam sie na tym :P

Hmm. Taka myśl mi teraz przyszła, by kiedyś przylepić sobie na blacie biurka nalepkę z tarczą i napisem "Hit with forhead here". Byłoby praktyczne. W każdym razie spokojnie zacząłem tłumaczyć, pomagać, ale i moja cierpliwość się kiedyś kończy...
L: jaki status WP?
L: nie musisz zmieniać uprawnień wszystkich plików
K: cicho.. zmieniam ten shit... reczine to tak nie idzie..
L: idzie
L: oki pobieram WP standard i stawiam u siebie - zobaczymy jak to wolno idzie :D

Tak też zrobiłem. Pobrałem WordPress 2.5.1 PL Standard, po czym w półtorej godziny postawiłem LAMP-kę od podstaw, przy czym najwięcej czasu zajęło mi uruchomienie MyPhpAdmina. Ale jak już zaczęło działać to instalacja WP przeszła w dosłownie 5 minut. I tutaj niespodzianka, bo konfiguracja WP by działał za ruterem okazała się cięższa niż się to początkowo wydawało. Problem w tym, że WP przekierunkowuje stronę na adres, który się wpisało w panelu administratora. Jeśli jest to nazwa domeny z przypisanym dynamicznie IP strona jest dostępna z internetu, ale nie z komputera na którym działa. I na odwrót jeśli jest ustawiony localhost jako nazwa domeny WP działa tylko na lokalnym komputerze. Jak to się mówi - nie można jednym tyłkiem być na dwóch kiermaszach jednocześnie... A właśnie, że można! I to nawet na trzech! ]:) Oto rozwiązanie, które pozwala na odpowiednie przekierunkowanie w zależności od stosowanej domeny. Poniższy fragment codu PHP wystarczy dopisać do wp-config.php:

wp-config.php redirection fix(Toggle Plain Text)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$hostname = $_SERVER['SERVER_NAME'];
$hostname = str_replace('www.', '', $hostname);
// Wejście z mojego PC
if ($hostname == 'localhost') { 
    define('WP_SITEURL', 'http://localhost/blog');
    define('WP_HOME', 'http://localhost/blog');
// Wejście przez LAN
} elseif ($hostname == '192.168.1.2') { 
    define('WP_SITEURL', 'http://192.168.1.2/blog');
    define('WP_HOME', 'http://192.168.1.2/blog');
// Wejście z Internetu
} elseif ($hostname == 'lightnir.no-ip.org') {
    define('WP_SITEURL', 'http://lightnir.no-ip.org/blog');
    define('WP_HOME', 'http://lightnir.no-ip.org/blog');
}


Przez pewien czas pobawię się jeszcze Wordpressem na własnym serwerku, a potem trzeba będzie wrócić do bardziej poważnych spraw. A co do tego problemu mojego kolegi z jego instalacją WP - problem też rozwiązałem. Wystarczyło przekonwertować wp-config.php z dosowego pliku tekstowego na unixowy i pousuwać śmieci poza tagami PHP. A wszystko dokonałem w jeden wieczór ot tak dla zabicia nudy. Cóż chyba wracam po wakacjach do swej "złej formy" ]:P