czwartek, lipca 31, 2008

A trip for a smile

Dwa dni temu odbyłem sobie "podróż po jeden uśmiech", a dokładnie mówiąc to chodziło o tego smile'a:
Powiem tak - nie ma to jak przebyć 1.12 Mm nie śpiąc przy tym przez dwie doby po to by móc sobie posiedzieć na ławeczce w cieniu olchy (to była olcha, tak?) ciesząc się przy tym z życia i pięknej pogody. Taki offtime od dziennej dawki promieniowania monitora dobrze robi. Człowiek się trochę opali, pozna nowych ludzi (pozdrowienia dla Sylwii ]:D ) z którymi można przy piwie porozmawiać na temat wyższości Sokoła Millenium nad X-wingiem oraz najlepszych odcinkach Top Gear (niestety nie wykazałem się erudycją w tej kwestii, ale zamierzam to zmienić). Tak poza tym to turystycznie było ciekawie: zwiedziłem informatyczny raj (no bo jak inaczej nazwać miejsce gdzie na ok. pięćdziesiątkę komputerów tylko dwa chodzą pod Windows - reszta to Linux w różnych formach), poznałem kilka relaksacyjnych pozycji jogi lokalnej żulerni paru dworców PKP oraz przekonałem się przez pół Polski jak silne gardło mają żołnierze rezerwy (gdybym ja miał taki budzik w domu)...

Słowem miałem ciekawy trip i chyba go za jakiś czas powtórzę ]:)

sobota, lipca 19, 2008

Keyboard slamming

Dawno mnie tak ręce nie bolały od wciskania klawiszy klawiatury jak dziś. Całkiem przypadkiem znalazłem grę open source która wprost powaliła mnie na kolana. Dawno nie miałem takiej dziecęcej frajdy podczas grania w jakąś grę komputerową (ostatni raz to chyba było przy partyjce Dungeon Keeper 2). Anyway. Mowa jest o Frets on Fire, całkiem dobrym klonie gier na konsolę Guitar Hero. Gra się trzymając klawiaturę tak jak na zdjęciu obok i wciskając w odpowiednim momencie klawisze aby zagrać odpowiednią nutę. O ile jest to względnie proste dla trzech utworów Tommiego Inkila dołączonych wraz z standardową instalacją, o tyle nieźle można się napocić przy kawałkach stworzonych przez fanów gry. Ujmę to może tak - piosenka "Highway to hell" powinna się nazywać tej grze "Highway through hell", bo nawet najprostsze akordy stają się wyzwaniem. Gorąco polecam tą grę każdemu fanowi rocka - zabawa gwarantowana.

Turning SE K550i into mp4 player

Przez ten weekend pobawiłem się trochę moją nową komórką - Sony-Ericssonem K550i. Jedną z jego funkcji jest możliwość odtwarzania filmów wideo w formacie MP4. Tak sobie pomyślałem, że fajnie by było zgrać trochę ulubionych klipów z YouTube na komórkę jako empeczwórki. Pytanie tylko jak albo za pomocą czego? Dodam, że chciałem to zrobić na Linuksie, więc wszystkie konwertery dostępne w takich pakietach jak PC Suite dostarczanych wraz telefonem odpadają. Najpierw poszperałem trochę po necie by się doszkolić (google najlepszym nauczycielem). Szybko znalazłem sobie rozszerzenie do Firefoksa spełniające moje oczekiwania - DownloadHelper. Za pomocą niego można łatwo pobrać klipy w formacie Flash Video (FLV). Teraz trzeba ulubiony klip tylko prze konwertować. Najpierw próbowałem skryptów znalezionych w sieci, ale już po pierwszych niepowodzeniach postanowiłem napisać własny. Początkowo próbowałem sił w bashu, ale najpóźniej przy obliczeniach rozdzielczości z zastosowaniem zmiennych zmiennoprzecinkowych stwierdziłem, że chyba lepszym rozwiązaniem będzie skrypt pisany w pythonie. Poza tym odświeżyłem sobie używanie wyrażeń regularnych w Pythonie. No dobrze, ale wracając do skryptu. Wymaga on zainstalowanych dwóch programów w systemie:
  • exiftool (pobiranie metadanych z pliku video)
  • ffmpeg (konwersja do formatu MP4)

mp4-for-SE.py(Toggle Plain Text)

#!/usr/bin/python
# -*- coding: utf-8 -*-
# FLV-to-MP4 converter for Sony-Ericsson K550i
#
# Depends on ffmpeg and exiftool

import sys
import os
import re

add=0
episode = 300   # 5 minutes
width=220
height=176
DONT_SPLIT=False

# Get input & output
try:
    fin=sys.argv[1]
    p=re.compile(r'\.\w*$')
    m=p.search(fin)
    fout=fin.replace(m.group(0),"")
except:
    fin=""

if fin=="":
    print "Usage: mp4-for-SE.py INPUT"
else:
    # Get aspect ratio
    stdout_handle = os.popen("exiftool -Image\Width "+fin, "r")
    iwidth = stdout_handle.read()
    stdout_handle = os.popen("exiftool -Image\Height "+fin, "r")
    iheight = stdout_handle.read()
    try:
        p1=re.compile(r'Image Width\s*:\s*')
        p2=re.compile(r'Image Height\s*:\s*')
        m1=p1.match(iwidth)
        m2=p2.match(iheight)
        iwidth=iwidth.replace(m1.group(0),"")
        iheight=iheight.replace(m2.group(0),"")
        iwidth=iwidth.replace("\n","")
        iheight=iheight.replace("\n","")
        src_aspect=float(iwidth)/float(iheight)
        dest_aspect=float(width)/float(height)
        if src_aspect>dest_aspect:
            height=int(float(width)/src_aspect)
            if (height % 2 <> 0):
                height+=1
        else:
            width=int(float(height)/src_aspect)
            if (width % 2 <> 0):
                width+=1
    except:
        pass

    stdout_handle = os.popen("exiftool -Duration "+fin, "r")
    str_duration = stdout_handle.read()
    # Basic preparation
    try:
        p=re.compile(r'Duration\s*:\s*')
        m=p.match(str_duration)
        str_duration=str_duration.replace(m.group(0),"")
        str_duration=str_duration.replace("\n","")
    except:
        print "Error: Can't get movie duration. Converting whole movie."
        DONT_SPLIT=True
        exit
    if DONT_SPLIT:
        counter=0
    else:
        # Format some youtube movies outputing duration as "xx:xx.xxxx s"
        p=re.compile(r'\.\d*\s*s')
        m=p.search(str_duration)
        try:
            str_duration=str_duration.replace(m.group(0),"")
            add=1
        except:
            pass
        duration=str_duration.split(":")
        s=int(duration[-1])
        try:
            m=int(duration[-2])
        except:
            m=0
        try:
            h=int(duration[-3])
        except:
            h=0
        total=h*3600+m*60+s+add
        print "\033[1;32mTotal time:\033[1;31m",total,"\033[1;39ms"
        counter = total/episode

    print "\033[1;32mTotal parts:\033[1;31m",counter+1,"\033[1;39m"
    for i in range(0,counter+1):
        if counter==0:
            os.system("ffmpeg -i "+fin+" -s "+str(width)+"x"+str(height)+" -ss "+str(i*episode)+" -t "+str(episode)+" -vcodec mpeg4 "+fout+".mp4")
        else:
            os.system("ffmpeg -i "+fin+" -s "+str(width)+"x"+str(height)+" -ss "+str(i*episode)+" -t "+str(episode)+" -vcodec mpeg4 "+fout+"["+str(i+1)+"].mp4")


Użycie ffmpega rozumie się samo przez się. Czemu exiftool? W celu wydobycia informacji o długości filmu. Problem był następujący. Komórka ma ograniczone zasoby pamięci i mocy obliczeniowej z tego powodu większe (ok. 10 minutowe) klipy nie zostają odtworzone. Wpadłem więc na pomysł, by ciąć film na 5-minutowe kawałki, a ponieważ wewnętrzny odtwarzać automatycznie przeskakuje do następnego klipu na liście po zakończeniu odtwarzania poprzedniego takie rozwiązanie się nawet sprawdza. Teoretycznie za pomocą tego skryptu można przerabiać nawet większe filmy np. divixy na serię 5 minutowych klipów, ale ja jedynie skrypt testowałem na filmach maksimum 15 minutowych. Jeśli dostępne są informacje o wymiarach kadru klip jest skalowany z zachowaniem proporcji do rozmiarów wyświetlacza telefonu. Zmniejsza to dodatkowo rozmiar filmu jeśli mamy do czynienia z ujęciem panoramicznym. Całość się nawet ładnie prezentuje i można spokojnie sobie obejrzeć jakiś film pełnometrażowy o ile wcześniej bateria nie wyzionie ducha ]:)

A tak to wygląda na telefonie (przepraszam za wygląd, ale blogger mi zmasakrował aspekt):

video


Na wypadek gdyby ktoś nie zauważył. Ta przerwa w filmie zanim bałwan płaci zielonymi portierowi to właśnie przeskok do następnego klipu.

środa, lipca 16, 2008

Defence

Kiedy w ubiegły piątek szedłem przez opolski dworzec pomyślałem "nie tak to sobie wyobrażałem". Nigdy nie jest tak jak to sobie wyobrażamy. Na przykład ja sobie nigdy nie wyobrażałem, że kiedyś pójdę w upalny czerwcowy poranek w czarnym garniturze przez zatłoczone miasto bez ani jednej kropli potu na skórze. Tak dla wyjaśnienia - od dzieciństwa strasznie pocą mi się dłonie. Próbowałem częstego mycia, antyperspirantów, a ostatnio nawet leku z chlorowodorotlenkiem glinu. Nic nie pomogło. U mnie to chyba ma podłoże nerwowe. A tu proszę - suche dłonie. Pewnie z nerwów. Każdy zresztą się w takiej chwili denerwuje. W końcu pracy magisterskiej broni się tylko raz w życiu (oczywiście pomijając tych co ciągną kilka kierunków). Wracając do tych wyobrażeń. Jak zaczynałem studia myślałem, że zrobię jakąś ciekawą pracę dyplomową i oczywiście ją świetnie obronię. Tak to już jest. Człowiek jest młody, ambity i ma głowę pełną marzeń, a na koniec spotyka rzeczywistość...

Do obrony uczyłem się otrzymywania α-aminokwasów za pomocą syntezy Streckera, metodą Hella-Volharda-Zielińskiego, redukcyjnego aminowania α-oksokwasów... Powtórzyłem sobie mechanizmy aktywacji grupy karboksylowej, a w szczególności za pomocą dicykloheksylokarbodiimidu. Potrenowałem różne strategie syntezy peptydów. Słowem - nastawiłem się na pytania w jakikolwiek sposób powiązane z syntezą moich hybryd peptydowych. A tu zonk - pytania z estrów i świeć facet oczami. Całe szczęście nie jestem taki głupi na jakiego wyglądam, więc coś wymyśliłem, ale z ogółu mojej wypowiedzi nie jestem zadowolony. Podobno nikt nigdy nie jest ze swojej odpowiedzi zadowolony, ale ja do siebie zawsze podchodzę wymagająco i tutaj trzeba po męsku przyznać, że dałem ciała. No cóż. Przynajmniej trochę otuchy przyniosły mi słowa "komisja egzaminacyjna ma zaszczyt oznajmić Panu, że przyznaje Panu tytuł magistra chemii...".

Ludzie sobie wyobrażają, że po takim czymś człowiek skacze z radości, chodzi 10 cm nad ziemią i zaraz potem upija się do nieprzytomności. No, ale chyba już uzgodniliśmy jak to z tymi wyobrażeniami bywa (chociaż z tym upijaniem to akurat trochę prawdy w tym jest ]:D ). W każdym razie ten rozdział mojego życia mogę już zamknąć. Teraz czas myśleć o dalszej przyszłości, a ta być może będzie łączyć to co lubię - chemię i informatykę. No, ale na razie nie zapeszajmy.

wtorek, lipca 15, 2008

Kitties

Nazbierało się przez te dwa tygodnie trochę przeżyć, które chciałbym spisać. Zacznę może od samego początku, od tych mniej miłych...


Niespodziewana radość tak samo człowieka ogłusza jak nagłe nieszczęście.
~ Charles Dickens

Nic nie zapowiadało by ten poranek różnił się od pozostałych. Poprzedni wieczór ciągnął się leniwie jak co dzień, a noc była tak samo ciemna jak zwykle. Wstałem, a właściwie wyrwałem się z łóżka, tak jak zwykle tj. z lapidarnym "O k***a! Zaspałem!" na ustach. Kolejna myśl jaka przebiegła mi przez głowę to "siadaj do kompa i pisz pracę - masz jeszcze 2 godziny". Tak też zrobiłem. Ruch myszką i na ekranie ukazał się rozdział pracy magisterskiej o azydkach fosforowych. Pół nocy nad tym siedziałem, zanim mnie sen zmógł. Nie ma to jak taki poranek - nie marnuje się godziny czasu i kawy na powolne przebudzenie tylko od razu skupia na tym co ważne. No więc siedziałem sobie zastanawiając nad kolejnym treściwym zdaniem, gdy usłyszałem cmokanie dochodzące obok z wersalki. Na niej leżała właśnie moja kotka Hilda wraz z czymś białym i to coś właśnie cmokało. Jak się okazało to włochate coś miało też rodzeństwo. Hilda w nocy zafundowała nam niespodziankę rodząc dwa kocięta. Nie byłoby w tym nic dziwnego gdyby nie to, że nikt nie wiedział o tym że jest w ciąży. Zadziwiające jak takie dwa małe włochate kłębki potrafią wnieść tyle radości w życie człowieka. Uskrzydlony tą radością porobiłem masę zdjęć i pokazywałem znajomym.

Picasa SlideshowPicasa Web AlbumsFullscreen


Popatrz jak wszystko szybko się zmienia, coś jest a później tego nie ma
człowiek jest tylko sumą oddechów, wiec nie mów mi że jest jakiś sposób
~ Sidney Polak feat. Pezet, "Otwieram wino"

Szczęście nigdy nie trwa wiecznie. Moje trwało dokładnie 3 dni. Przez te trzy dni moja kotka miała się naprawdę dobrze. Koszyk wyłożony kocykiem, od czasu do czasu trochę mięska, mleka też miała pod dostatkiem. A wszystko po to by miała jak najwięcej sił do karmienia młodych. Niestety świtu trzeciego dnia jeden kociak już nie doczekał. Drugi dołączył do pierwszego po południu tego samego dnia, gdy wróciłem z uczelni. Ciągle się zastanawiam czemu tak się stało. Przechłodzenie? Hilda nie dawała wystarczająco dużo mleka? Może przydusiła je podczas snu? Może czegoś nie dopatrzyłem? Nie trudno się domyśleć, że po takim przeżyciu człowiek wpada w refleksje nad egzystencjalizmem. Chodziłem zamyślony i przygnębiony przez tydzień, a sprawy nie ułatwiał widok Hildy w pustym już koszyku. Kiedy ją dostałem ustawiłem jej własny koszyk w pokoju. Jakoś nigdy nie mogłem jej nauczyć, by w nim spała. Gdy przeniosłem ją wraz z kociętami do koszyka od razu go zaakceptowała. A potem przez kilka dni jeszcze w nim siedziała. I niech mi ktoś teraz powie, że zwierzęta nie mają świadomości śmierci. Różnica pomiędzy nimi, a ludźmi polega na tym, że one szybciej zapominają...

A nam pozostają wspomnienia...

czwartek, lipca 03, 2008

Random thoughts vs work

Przez ostatni tydzień wydarzyło się naprawdę sporo. No może nie aż tak dużo, ale przynajmniej trochę myśli przewinęło się przez te zakamarki mojego umysłu, w których już kurz i pajęczyny tworzyły naprawdę gęstą, jednorodną masę. Miałem bardzo "życiowe przeżycie" (tylko tak potrafię nazwać te trzy dni pełne szczęścia, po których nastąpił ten jeden czarny, a za nim te szare...) związane z moją kotką Hildą.

Miałem też bardzo dziwny sen. W moim wypadku dziwne jest już to, że miewam w ogóle jakiś sen raz na te trzy miesiące. Ten jednak był wyjątkowy. Ciekaw jestem ilu osobom śni się psychoterapia grupowa gdzieś na podbiegunowej stacji polarnej, która nota bene znajduje się na pewnej wyspie zaczynającej się od litery S. Analyze this Freud.

Mam też nową zabawkę. W końcu wymieniłem mój stary zegarek na mobilne centrum multimedialne. Normalni ludzie, gdy takie coś dostają w swoje ręce zaczynają od ustawiania sobie jakiegoś dzwonka. Ale taki geek jak ja to oczywiście zaczął od konfiguracji dial-upu, gmaila, przetestowania funkcji wysyłania postów na bloggera oraz sprawdzenia jak to wszystko współgra z moim pingwinem. Po tym wszystkim teraz mnie ciągnie do nauczenia się J2ME, a chociażby po to by sprawdzić, czy moja hipoteza odnośnie możliwości sterowania PC i TV za pomocą IrDy jest prawdziwa (wg tego co mode2 outputuje to pomysł mógłby wypalić).

No a teraz trochę o to z czym się męczę - obrona pracy. To czy będę się podpisywał "mgr Lightnir" z kropką, czy bez ciągle jest pod znakiem zapytania. Najlepiej oddają to słowa piosenki, którą ostatnio sobie słucham.
So where is the passion when you need it the most?

Na to pytanie nie umiem sobie odpowiedzieć, ale powtarzam sobie ciągle "jeszcze tylko półtora tygodnia i będziesz miał to za sobą". Łatwo powiedziane. Szkoda tylko, że ciągle odrywają mnie od pracy nad realizacją tego planu myśli, obrazy, które muszę gdzieś schwytać - tutaj, na dysku, albo na kartce papieru: