Jak wspomniałem w poprzedniej notatce ostatnimi dniami dla relaksu tworzę różne rzeczy w myśl hasła "do it yourself". Korzystając z okazji, że moja dziewczyna wyjechała na kilka dni postanowiłem jej zrobić małą niespodziankę na naszą drugą rocznicę. Zrobiłem taki oto naszyjnik z drutu jubilerskiego i koralików:
Taki prezent od chemika dla chemiczki. "Nie-chemikom" już tłumaczę. Jest to model sześciopeptydu o sekwencji Ser-Tyr-Leu-Trp-Ile-Ala, którą jak się czyta skrótami jednoliterowymi tworzy sekwencję SYLWIA. Prezent w każdym razie bardzo przypadł do gustu mojej lepszej połówce o czym nie omieszkała od razu pochwalić się całemu światu za pomocą facebooka. I się zaczęło... Ostatni raz w życiu nasłuchałem się tylu pochwał chyba jak kończyłem podstawówkę. Cóż... teraz muszę się z tym liczyć, że takie są efekty jak realizuję pomysły, które czasem błądzą mi po głowie. ]:)
wtorek, listopada 15, 2011
poniedziałek, listopada 07, 2011
My new phone cover
Jesień zawitała do nas na dobre, a wraz z nią chłodne wieczory. W ostatnich miesiącach zaniedbałem nieco prowadzenie mego bloga, więc postaram się przeznaczyć wieczorny czas wolny na napisanie tutaj kilku (w miarę możliwości zwięzłych) notatek o tym co ostatnio chodzi mi po głowie. Zacznę może od tego co wychodzi mi najlepiej... narzekania. Rozpoczął się nowy semestr akademicki, a wraz z nim przyszła fala zgłoszeń, telefonów i maili o niedziałającej sieci i usługach. O stosie podań o założenie konta na serwerze studenckim, która zalała moje biurko już nie wspomnę. Taka praca administratora sieci - raz się jest szeryfem walczącym o prawo i porządek na serwerach, a raz biurokratą przekładającym kartki z stosu na stos. By całkiem nie oszaleć od siedzenia przed komputerem powróciłem do robienia czegoś manualnie. Kiedyś robiłem całą masę origami, a teraz częściej szkicuję lub próbuję pracy z nowymi dla mnie materiałami. No i tu jest mała zagadka. Cóż takiego mogłem zrobić z rzeczy które znajdują się na poniższym zdjęciu?
Jak nietrudno się domyślić po tytule notatki wyszedł z tego pokrowiec na mojego smartfona. Poprzedni pokrowiec, który kupiłem w saturnie rozpadał mi się już na czynniki pierwsze od ciągłego wyciągania i wsadzania telefonu. A ponieważ, zaczynam się przeistaczać w "androidowego fanboya" nie mogłem odpuścić sobie okazji wykonania unikatowego pokrowca jednoznacznie wskazującego na czym śmiga mój telefon. Jak na moją pierwszą zabawię z filcem to uważam, że wyszła z tego rzecz, która jest zarówno piękna jak i pożyteczna.
Jak nietrudno się domyślić po tytule notatki wyszedł z tego pokrowiec na mojego smartfona. Poprzedni pokrowiec, który kupiłem w saturnie rozpadał mi się już na czynniki pierwsze od ciągłego wyciągania i wsadzania telefonu. A ponieważ, zaczynam się przeistaczać w "androidowego fanboya" nie mogłem odpuścić sobie okazji wykonania unikatowego pokrowca jednoznacznie wskazującego na czym śmiga mój telefon. Jak na moją pierwszą zabawię z filcem to uważam, że wyszła z tego rzecz, która jest zarówno piękna jak i pożyteczna.
piątek, września 16, 2011
Selective syslog-ng remote logging with Tomato
Załóżmy, że posiadamy własną sieć (np. 192.168.0.0/24) w której działają między innymi bezprzewodowe rutery oparte o Tomato pełniące funkcję punktów dostępowych z których chcielibyśmy zbierać logi centralnie na jednej maszynie za pomocą syslog-ng. Maszyna na której zbierane będą logi posiada adres IP 192.168.0.50, a rutery adresy odpowiednio 192.168.0.1-15. Oto krótki przepis jak to zrobić.
W pierwszej kolejności należy przekierować sysloga routera na zewnętrzny adres. Wybieramy Administration ▶ Logging i zaznaczamy opcję Log To Remote System oraz w polach IP Address / Port wpisujemy adres 192.168.0.50 oraz port 514.
Samo przekierowanie logów to tylko połowa pracy. Na serwerze dodajemy wpis zbierający zdalne logi:
Dodajemy zestaw filtrów do kierowania zapisem logów z każdego rutera. Dla pierwszych dwóch wpisów IP musimy dodać $ po adresie IP, aby ograniczyć filtr tylko do jednego hosta. Jeśli tego nie zrobimy w szablon wpasowane będą także np. takie adresy jak 192.168.0.193, czy 192.168.0.27.
Dodajemy wpisy gdzie mają być zapisywane logi z poszczególnych routerów...
..., a następnie zbieramy wszystko w całość w spójne regułki dla każdego rutera.
Na koniec restartujemy syslog-ng i zaparzamy zasłużoną kawę ]:) Finito.
Konfiguracja routerów
W pierwszej kolejności należy przekierować sysloga routera na zewnętrzny adres. Wybieramy Administration ▶ Logging i zaznaczamy opcję Log To Remote System oraz w polach IP Address / Port wpisujemy adres 192.168.0.50 oraz port 514.
Wpisy w syslog-ng.conf
Samo przekierowanie logów to tylko połowa pracy. Na serwerze dodajemy wpis zbierający zdalne logi:
source tomatoAP {
internal();
udp(ip("0.0.0.0")
port(514));
};
Dodajemy zestaw filtrów do kierowania zapisem logów z każdego rutera. Dla pierwszych dwóch wpisów IP musimy dodać $ po adresie IP, aby ograniczyć filtr tylko do jednego hosta. Jeśli tego nie zrobimy w szablon wpasowane będą także np. takie adresy jak 192.168.0.193, czy 192.168.0.27.
filter f_tom01 { host("192.168.0.1$"); };
filter f_tom02 { host("192.168.0.2$"); };
filter f_tom03 { host("192.168.0.3"); };
filter f_tom04 { host("192.168.0.4"); };
filter f_tom05 { host("192.168.0.5"); };
Dodajemy wpisy gdzie mają być zapisywane logi z poszczególnych routerów...
destination d_tom01 { file("/var/log/tomato/ap-01.log"); };
destination d_tom02 { file("/var/log/tomato/ap-02.log"); };
destination d_tom03 { file("/var/log/tomato/ap-03.log"); };
destination d_tom04 { file("/var/log/tomato/ap-04.log"); };
destination d_tom05 { file("/var/log/tomato/ap-05.log"); };
..., a następnie zbieramy wszystko w całość w spójne regułki dla każdego rutera.
log { source(tomatoAP); filter(f_tom01); destination(d_tom01); };
log { source(tomatoAP); filter(f_tom02); destination(d_tom02); };
log { source(tomatoAP); filter(f_tom03); destination(d_tom03); };
log { source(tomatoAP); filter(f_tom04); destination(d_tom04); };
log { source(tomatoAP); filter(f_tom05); destination(d_tom05); };
Na koniec restartujemy syslog-ng i zaparzamy zasłużoną kawę ]:) Finito.
niedziela, lipca 17, 2011
3-city biking
Wraz z dziewczyną postanowiliśmy kupić sobie rowery na lato. Sylwia kupiła sobie rower miejski, a ja górski rekreacyjny. Częściowo nasza decyzja wynikała z chęci aktywnego spędzenia lata, a częściowo z stanu dróg w Gdańsku. Dla niewtajemniczonych powiem, że remontowana jest teraz linia tramwajowa wzdłuż alei Grunwaldzkiej. Szybciej człowiek dojedzie rowerem niż komunikacją miejską (pomijając możliwość wdychania świeżego powietrza, a nie zapachu czyiś spoconych pach w autobusie). Jednej rzeczy jednak nie potrafię zrozumieć. Rower mam już od ok. 2 tygodni, a już dwa razy musiałem łatać dętkę. W porównaniu z góralem, którego zostawiłem na opolskim gruncie to bardzo mnie to dziwi. Tamten rower wytrzymał 8 lat jazdy po polskich drogach, lesie i wyrobisku skały wapiennej, a chyba tylko raz musiałem łatać dętkę. Mój obecny góral ma nieco cieńszą oponę oraz mniejsze bieżniki, ale za to jeżdżę nim po drogach rowerowych w Gdańsku, które są w naprawdę dobrym stanie. Dziś nie wytrzymałem i pojechałem kupić sobie dętkę samouszczelniającą się. W każdym razie mimo problemów technicznych złapała mnie "zajawka" na kolarstwo. W miarę możliwości oglądam też relacje na żywo z Tour de France 2011. Jak już jesteśmy przy temacie TdF to jako geek oczywiście zainstalowałem sobie oficjalną aplikację Tour de France 2011 na androida. Przydatna sprawa dla każdego fana tego wyścigu, ale aplikacja dała mi nieco do myślenia. Skoro mój telefon HTC ma wbudowany odbiornik GPS to może jest jakaś aplikacja na Androida, która by nadawała się do zbierania statystyk jazdy rowerem. Jak się okazało nie musiałem długo szukać i znalazłem całkiem ciekawą aplikację stworzoną przez Google - My Tracks. Aplikacja pozwala na rejestrowanie przejechanej trasy, oblicza czas spędzony w jeździe (dobra opcja przy poruszaniu się po mieście metodą stop-and-go), oraz liczy statystyki takie jak średni czas jazdy, minimalna/maksymalna prędkość itp. Oto kilka zrzutów z jak to wygląda na telefonie:
Ciekawą opcją jest możliwość eksportu do Google Maps.
No dobrze. Dosyć blogowania na dziś. Trzeba się, wyspać by jutro w pełni sił pojechać do pracy rowerem ]:D
wtorek, czerwca 28, 2011
udev rules for my tv card
Od wczoraj pod chochlika mam podpiętą kamerkę internetową. Jak się dziś okazało, znalezienie dla niej działających sterowników na Linuksa to najmniejszy problem. Ponieważ mam też kartę telewizyjną (Pinnacle PCTV) dla obu urządzeń tworzone są pliki urządzeń o nazwach /dev/video0 oraz /dev/video1. Wszystko ładnie, tylko że po restarcie systemu raz video0 to karta tv, a raz kamerka internetowa. Całe szczęście można to bardzo prosto rozwiązać pisząc własne reguły udev, co też zrobiłem. Najpierw przyda się zdobycie trochę informacji za pomocą narzędzia udevadm:
$ udevadm info -a -p $(udevadm info -q path -n /dev/video1)
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1e.0/0000:04:01.0/video4linux/video1':
KERNEL=="video1"
SUBSYSTEM=="video4linux"
DRIVER==""
ATTR{name}=="saa7133[0] video (Pinnacle PCTV"
ATTR{index}=="0"
looking at parent device '/devices/pci0000:00/0000:00:1e.0/0000:04:01.0':
KERNELS=="0000:04:01.0"
SUBSYSTEMS=="pci"
DRIVERS=="saa7134"
ATTRS{vendor}=="0x1131"
ATTRS{device}=="0x7133"
ATTRS{subsystem_vendor}=="0x11bd"
ATTRS{subsystem_device}=="0x002e"
ATTRS{class}=="0x048000"
ATTRS{irq}=="19"
ATTRS{local_cpus}=="ff"
ATTRS{local_cpulist}=="0-7"
ATTRS{dma_mask_bits}=="32"
ATTRS{consistent_dma_mask_bits}=="32"
ATTRS{broken_parity_status}=="0"
ATTRS{msi_bus}==""
looking at parent device '/devices/pci0000:00/0000:00:1e.0':
KERNELS=="0000:00:1e.0"
SUBSYSTEMS=="pci"
DRIVERS==""
ATTRS{vendor}=="0x8086"
ATTRS{device}=="0x244e"
ATTRS{subsystem_vendor}=="0x1458"
ATTRS{subsystem_device}=="0x5000"
ATTRS{class}=="0x060401"
ATTRS{irq}=="0"
ATTRS{local_cpus}=="ff"
ATTRS{local_cpulist}=="0-7"
ATTRS{dma_mask_bits}=="32"
ATTRS{consistent_dma_mask_bits}=="32"
ATTRS{broken_parity_status}=="0"
ATTRS{msi_bus}=="1"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS=="
Ponieważ mam tylko jedno urządzenie firmy Pinnacle, więc reguła oparta jest o dość prosty atrybut, a mianowicie nazwę widoczną dla systemu. Do pliku /etc/udev/rules.d/10-local.rules dodałem następującą linię:
KERNEL=="video*", ATTR{name}=="*Pinnacle PCTV", NAME="%k", SYMLINK="video_tvcard"
Po restarcie maszyny w katalogu /dev utworzyło się dowiązanie symboliczne video_tvcard wskazujące na kartę tv. Teraz wystarczyła drobna zmiana konfiguracji programów takich jak tvtime, by odwoływały się do /dev/video_tvcard za każdym razem gdy chcę sobie pooglądać TV.
Tych którzy chcą pisać własne reguły odsyłam do artykułu na Arch wiki, który okazał się być bardzo przydatny oraz manuala udevadm.
niedziela, czerwca 12, 2011
Autum Lady
niedziela, maja 15, 2011
My first cover
Two month ago I was asked to design a cover image for a small polish chemical journal - LAB. If I may quote the editor:
Please prepare something attractive, i.e. the molecule should be very colourful and elaborate.As I like to play with graphics, especially when its chemistry related, I'd accepted the offer. I thought for some time what molecule should I use for the cover, when a colleague whose work is opioid related proposed naloxone. Its a drug used in emergency treatments for opioid overdose (mostly heroin). I've liked it from the first sight so I searched the protein data base for a suitable model to do the visualization. I have found 1MX9 which is a complex of human liver carboxylesterase with a naloxone derivative. Here is my final work that I've sent to the editor: After a month when I went to work a package was lying at my desk. Containing this magazine. The scan below does not reflect the actual appearance because of the print on a semi gloss paper. It looks more darker then it is. Neither the less it feels really good to see my own work in print.
środa, kwietnia 20, 2011
Bus wardriving
Ta notka leżała u mnie dłuższy czas w szkicach roboczych. Wreszcie znalazłem czas by ją ukończyć.
Od dwóch miesięcy mam nowy telefon, a dokładniej to smartfon HTC Wildfire. Jestem po prostu oczarowany możliwościami jakie daje otwarta architektura jaką jest Android. Najpierw trochę czasu mi zajęło oswojenie się z interfacem dotykowym, a następnie zaczęły się zabawy z testowaniem miliona aplikacji jakie są dostępne na Android Market. Testowałem wszystko począwszy od gier w kulki, a skończywszy na kliencie SSH. Po jakimś czasie uświadomiłem sobie, że skoro smartfon ma wbudowaną kartę wifi oraz czujnik GPS to w zasadzie można by spróbować wardrivingu. Zawsze chciałem spróbować czegoś takiego. Kiedyś nawet podchodziłem do tego tematu z laptopem i nawigacją gps. W zasadzie to pomysł miał ręce i nogi - laptop zbierał dane wifi, a nawigacja miała wysyłać dane gps przez połączenie szeregowe bluetooth. Ktokolwiek miał (nie) przyjemność bawienia się Windowsem CE ten wie ile się trzeba nagimnastykować, by zainstalować oprogramowanie wraz z odpowiednimi bibliotekami na dedykowaną sprzętowo architekturę. Mówiąc krótko za chiny nawigacja nie chciała łyknąć odpowiedniej instalacji .NET Compact Framework, bez której nic nie chciało ruszyć. Wracając do tematu. Poszperałem na markecie, przetestowałem kilka aplikacji i najbardziej do gustu przypadł mi G-MoN. Postanowiłem go przetestować w warunkach polowych. W chwili kiedy to piszę nieczynna jest w Gdańsku linia tramwajowa przebiegająca przez cały Wrzeszcz i kursuje autobusowa linia zastępcza. Jadąc właśnie tym autobusem, siedząc przy oknie odpaliłem niewinnie wyglądający telefon i zacząłem zbierać dane... ]:) Ciekawą funkcją G-MoNa jest możliwość eksportu do formatu KML, który można następnie wczytać do Google Earth. Jednak kiedy to zrobiłem okazało się, że dla zebranych przeze mnie danych niewidoczne są nazwy wykrytych sieci co spowodowane było brakiem tagu <name> dla danej geolokacji. Ale nie ma takiego problemu z konwersją plików tekstowych, których nie można rozwiązać za pomocą odrobiny magii w konsoli. Uwaga, proszę się odsunąć - użyję wyrażeń regularnych ]:P
Od dwóch miesięcy mam nowy telefon, a dokładniej to smartfon HTC Wildfire. Jestem po prostu oczarowany możliwościami jakie daje otwarta architektura jaką jest Android. Najpierw trochę czasu mi zajęło oswojenie się z interfacem dotykowym, a następnie zaczęły się zabawy z testowaniem miliona aplikacji jakie są dostępne na Android Market. Testowałem wszystko począwszy od gier w kulki, a skończywszy na kliencie SSH. Po jakimś czasie uświadomiłem sobie, że skoro smartfon ma wbudowaną kartę wifi oraz czujnik GPS to w zasadzie można by spróbować wardrivingu. Zawsze chciałem spróbować czegoś takiego. Kiedyś nawet podchodziłem do tego tematu z laptopem i nawigacją gps. W zasadzie to pomysł miał ręce i nogi - laptop zbierał dane wifi, a nawigacja miała wysyłać dane gps przez połączenie szeregowe bluetooth. Ktokolwiek miał (nie) przyjemność bawienia się Windowsem CE ten wie ile się trzeba nagimnastykować, by zainstalować oprogramowanie wraz z odpowiednimi bibliotekami na dedykowaną sprzętowo architekturę. Mówiąc krótko za chiny nawigacja nie chciała łyknąć odpowiedniej instalacji .NET Compact Framework, bez której nic nie chciało ruszyć. Wracając do tematu. Poszperałem na markecie, przetestowałem kilka aplikacji i najbardziej do gustu przypadł mi G-MoN. Postanowiłem go przetestować w warunkach polowych. W chwili kiedy to piszę nieczynna jest w Gdańsku linia tramwajowa przebiegająca przez cały Wrzeszcz i kursuje autobusowa linia zastępcza. Jadąc właśnie tym autobusem, siedząc przy oknie odpaliłem niewinnie wyglądający telefon i zacząłem zbierać dane... ]:) Ciekawą funkcją G-MoNa jest możliwość eksportu do formatu KML, który można następnie wczytać do Google Earth. Jednak kiedy to zrobiłem okazało się, że dla zebranych przeze mnie danych niewidoczne są nazwy wykrytych sieci co spowodowane było brakiem tagu <name> dla danej geolokacji. Ale nie ma takiego problemu z konwersją plików tekstowych, których nie można rozwiązać za pomocą odrobiny magii w konsoli. Uwaga, proszę się odsunąć - użyję wyrażeń regularnych ]:P
sed 's/<description>\([[:alnum:]]*\)/\<name\>\1\<\/name\>\<description\>/' gmon-orginal.kml > gmon.kml
Po ponownym wczytaniu do Google Earth można było już wygodniej oglądać trasę.
A na koniec trochę statystyk z całej tej zabawy. Łącznie znalazłem 635 punktów dostępowych. Pocieszające jest, że powyżej 75% z nich używa zabezpieczeń WPA - widać ludzie zaczynają myśleć.
Jeśli chodzi o nazwy sieci to wśród domyślnych nazw króluje UPC, linksys oraz wiecznie-żywa neostrada. Jako ciekawostkę powiem, żę tylko 3 AP z neostrady zostały sensownie zabezpieczone poprzez WPA-PSK, a reszta używa domyślnego WEP. Zawsze to powtarzam - telekomuna to zło.
sobota, marca 19, 2011
whoami
Otwieram okno terminala i zaczynam pisać.
Czas zajrzeć w głąb systemu.
Czas stać się bogiem.
Czas zdziałać cuda.
Czas na kolejny łyk kawy.
whoami?
$ whoami
lightnir
Palce suną po klawiszach, wydając dźwięk niczym stado szczurów przegryzających się przez ścianę. Cisza. Przestały gryźć tynk? Westchnięcie nasączone spora nutą frustracji. "Znowu nie działa". Łyk kawy, po czym otwieram kolejny terminal. Czas rozpocząć małą podróż po kablach miedziowych kategorii 5e. Szczury znów gryzą tynk, a pytanie pozostaje - kim jestem?
$ whoami
admin
Czas zajrzeć w głąb systemu.
Czas stać się bogiem.
Czas zdziałać cuda.
Czas na kolejny łyk kawy.
# whoami
root
Intuicja podpowiada mi, że zdechła usługa. Sunę w głąb króliczej nory, by dowiedzieć się czy mam rację.
grep "error" /var/log/syslog|tail -n 30
Tak. Jeśli chodzi o takie sprawy zaczynam wyrabiać sobie szósty zmysł. Restart wiszącego demona i wszystko wraca do normy. exit. exit. Powraca czarno-biała rzeczywistość lokalnego terminalu.
$ whoami
lightnir
Egzystencjalny niedosyt pozostaje. Czas znaleźć odpowiedzi, a przynajmniej cząstkę spokoju przed kolejnym problemem do rozgryzienia.whoami?
poniedziałek, stycznia 31, 2011
Grouping conformations in pymol
Lately I had to do some visualizations of molecules after MD written in multirecord PDB files, each file containing MD frames for a different molecule. Loading it and preparing the conformations was no big deal - I just split every conformation into different object.
split_states D1_wszystko
The command above will generate new objects called D1_wszystko_0001, D1_wszystko_0002, D1_wszystko_0003 and so on. Since the goal was to compare the different structures and because there was over six hundred of them I had to use some python magic to make my life easier. Lucky for me Pymol comes with a grouping command.for i in range(1,624): cmd.group("D1_AMBER","D1_wszystko_%04d" % i,"add")
This will make a group called D1_AMBER containing all the D1_wszystko_XXXX objects that could be easily collapsed when not needed.
Subskrybuj:
Posty (Atom)