Skąd ta przerwa ?

Lipiec 1st, 2009 [LocK] 2 comments

Cóż ostatnie dwa miesiące były dla mnie dość wyczerpujące … praca, studia i summer of code nie pozostawiały mi zbyt wiele czasu i energii na udzielanie się tutaj. Na szczęście wszystko jak na razie idzie bardzo dobrze … może z wyjątkiem studiów bo czeka mnie jeszcze (średnio przyjemna) batalia wrześniowa …

Na chwilę obecną mogę odłożyć sobie studia na półkę i zająć się przyjemniejszymi rzeczami ;) . Właśnie kończę implementować (a właściwie to dokumentować (sic!) już powstały kod) drugi z zaplanowanych czterech milesone’ów w projekcie Cocoon 3 monitoring, tak więc połowa mojego projektu zbiega się praktycznie idealnie z połową summer of code.

Na chwilę obecną mogę uchylić rąbka tajemnicy odnośnie kolejnego posta … będzie on dotyczył dynamicznej rejestracji MBean’ów oraz dynamicznego wymuszenia ich “hierarchizacji” z wykorzystaniem Spring JMX (brzmi tajemniczo, zwłaszcza druga część ;) ). Mam nadzieje, że uda mi się zebrać w sobie i w przeciągu najbliższego tygodnia (… no może dwóch) opublikować ten wpis ;)

Categories: różne, soc09 Tags: ,

git diff 2 svn diff

Maj 6th, 2009 [LocK] Brak komentarzy

Konia z rzędem temu kto potrafi zmusić GIT’a do generowania patch’y kompatybilnych z SVN’em (a zwłaszcza z TortoiseSVN) !

Jeżeli nie uda się mi zmusić GIT’a do tego żeby wygenerował patch’e zgodne z SVN niestety będę musiał zakończyć w Summer of Code ‘09 przygodę z GIT’em … na prawdę będzie mi z tego powodu przykro :|

Categories: programowanie, soc09 Tags: , ,

Własne zapasowe repozytorium GIT

Kwiecień 24th, 2009 [LocK] Brak komentarzy

Oto prosty sposób na przeniesienie repozytorium GIT na pendrive, czy inną przenośna pamięć.

  1. Dla uproszczenia dodamy sobie nasze wymienne repozytorium do pliku /etc/fstab w tym celu:
    ls -l /dev/disk/by-uuid # odnajdujemy na liście nasz urządzenie,
    w moim przypadku sdb1
    mkdir /mnt/git-gsoc # tworzymy odpowiedni katalog do montowania
    chown lock:lock /mnt/git-gsoc # zmieniamy właściciela

    przy użyciu ulubionego edytora edytujemy /etc/fstab. Dodajemy następującą linie:

    UUID=<uuid z pierszego polecenia> /mnt/git-gsoc	<system plików> user,rw,noauto 0 0
  2. Teraz przydało by się zawartość naszego obecnego repo przenieść do nowego …  wystarczy skopiować główny katalog repozytorium ;) (prostota git’a)

Mając już sklonowane repozytorium przydał by się jeszcze jakiś skrypt który za nas wykona zbędne rzeczy (tj. podmontuje pamięć, odpali git-deamon, a potem po sobie posprząta ;) ).

#! /usr/bin/bash
# Copyrighted, 2009
# Developed by Dariusz Luksza &lt;dariusz[at]luksza[dot]org&gt;
# License: GPL v2
 
case "$1" in
connect)
	echo -n Montuje urzadzenie ...
mount /mnt/git-gsoc &amp;&gt; /dev/null
if  [ "$?" -eq "0" ]
then
		echo " DONE."
		echo -n Startuje git gaemona ...
		git daemon --export-all --base-path=/mnt/git-gsoc/backup --detach \
			--pid-file=/mnt/git-gsoc/git-daemon.pid --enable=receive-pack --listen=localhost
		echo " DONE."
exit 0
else
		echo Wystapil blad podczas montowania, sprawdz urzadzenie!
exit 1
	fi
	;;
disconnect)
if [ -e /mnt/git-gsoc/git-daemon.pid ]
then
		echo -n Zatrzymuje git daemona ...
kill `cat /mnt/git-gsoc/git-daemon.pid`
rm /mnt/git-gsoc/git-daemon.pid
		echo " DONE."
		echo -n Odmontowuje urzadzenie ...
sync
		umount /mnt/git-gsoc/
		echo " DONE."
exit 0
else
		echo Daemon nie zostal uruchomiany
		exit 1
	fi
	;;
*)
	echo Uzycie:
	echo "    " $0 "[connect|disconnect]"
	;;

Oczywiście każdy sam musi sobie dostosować ścieżki dostępu :)

Kiedy mamy już wszystko poustawiane warto by sprawdzić czy wszytko działa poprawnie tj. uruchamiamy powyższy skrypt z parametrem connect i po chwili powinniśmy mieć uruchomionego daemona GITa. Teraz wystarczy do naszego lokalnego repozytorium dodać to które właśnie utworzyliśmy:

git remote add backup git://localhost/&lt;nazwa repo&gt;

i używać uchwytu backup ;)

Miłej zabawy ;>

Categories: linux, programowanie Tags: ,

Google Summer of Code ‘09 … I’m in ;>

Kwiecień 20th, 2009 [LocK] 2 comments

Najpierw przygotowania, potem dwa tygodnie nerwów oraz oczekiwania … i oto są wyniki tegorocznej edycji Google Summer of Code … w którym będe brał udział jako student w Apache Software Fundation;>

W ciągu tych paru miesięcy będę implementował system monitoringu dla Cocoon’a 3 pod opieką Reinhard’a Poetz’a … wow, no nie mogę uwierzyć, będzie się działo ;D

Categories: soc09 Tags: , , ,

GWT 1.6 – w końcu

Kwiecień 8th, 2009 [LocK] Brak komentarzy

Dziś światło dzienne ujrzała stabilna wersja GWT 1.6, o zmianach i nowościach pisałem już wcześniej, dodatkowo nowością (przynajmniej dla mnie) jest plug-in do eclipse’a dodający parę wizardów i nowych funkcjonalności. Teraz najważniejsze, gwt moża pobrać tutaj, a plugin do eclipse’a stąd ;>

Categories: gwt, java, programowanie Tags: , ,

Java4Poeple ‘09

Kwiecień 5th, 2009 [LocK] 1 komentarz

Kogo nie było, a  mógł być niech żałuje. Na prawdę warto było się zjawić. Osoby które uczestniczyły w zeszło rocznej edycji tej konferencji (de facto pierwszej) mogły narzekać na dyskomfort auli w której obywały się wykłady … ale w tym roku było zupełnie inaczej, zmieniło się miejsce prelekcji na WNEiZUS (czyli Wydział Nauk Ekonomicznych i Zarządzania Uniwersytetu Szczecińskiego … mam nadzieję że nic nie pokręciłem ;>) gdzie miejsca były na prawdę wygodne. Jakoś prezetacji stała na prawdę na wysokim poziomie, z resztą jak zawsze … mi osobiście najbardziej się podobały dwie prezentacje o:

  • git’cie (prelegent: Andrzej Śliwa): jako podsumowanie mogę powiedzieć tylko tyle, że nie wiedziałem, że można używać git’a jako swoistego backend’u do repozytoriów cvs i svn (polecenia git-svn i git-cvs jak również git svn i git cvs); ogólnie wiedziałem czym jest git, z czym to się je i jak powstał … ale dyskusja która się wywiązała w trakcie prelekcji w mojej opinii doprowadziła do wniosku, że do póki git nie będzie miał dobrego wsparcia w IDE (tj. eclipse którego sam namiętnie używam) to dla części developerów (tj. nie koniecznie dla mnie) task “migracja na git” pozostaje pozycją na liście TODObtw. dyskusje które się odbyły w czasie prelekcji IMHO były bardzo pozytywne, oby więcej takich aktywnych wykładów (taki sposób gdzie interakcja (nie koniecznie  zamierzona) ze słuchaczami jest duża trafia do mnie najbardziej)
  • grails: w tym wypadku Jacek Laskowski (mało kto go nie zna, a zwłaszcza jego blog’a) jak zawsze stworzył show, mimo że nie zawsze było ono przewidywane, ale kto jak kto … Jacek Laskowski potrafi obrócić na swoją korzyść wszystkie wpadki … showman’ów takich jak on na prawdę nie spotyka się wielu (znowu jestem pod wrażeniem jego prezentacji …). Z aktualnie znanych mi podejść do przedstawionego tematu tj. RDwA (Rapid Development web Applications) grails jest bardzo podobne do framework’ów Python’owych tj. Django i web2py, jedyną jego przewagą jest scaffold (rusztowanie) tj. coś co na etapie prototypowania pozwala zapomnieć o wszysktim innym, a potem potrafi wygenerować kod, tego właśnie brakuje w wspomnianych Django i web2pyaczkolwiek są tego (jak zawsze) złe i dobre strony. Ogólnie grails zachwyca zwłaszcza tym, że do hosting ciągle wymaga tylko JVM, po za tym prostota jest na prawdę duża … ale jeżeli musiał bym się uczyć nowego języka, jakim jest niewątpliwie jest groovy (na króym bazuje grails) wolał bym wybrać python’a i np. Jython ;> Fajnie że TO (tj. grails i groovy) działa na JVM ale osobiście wolę Python’a jeżeli chodzi o języki skryptowe ;>

Tym razem po konferencji odbyło się spotkanie integracyjne. Osobiście chciał bym podziękować Pawłowi Szulcowi oraz grupie JUG’owców z Lublina (o ile dobrze pamiętam ;>) za “panele dyskusyjne“. Jednocześnie chciał bym wszystkich przeprosić za NCDC‘owe dyskusje w czasie “integracji“, w takich przypadkach trzeba nam przerywać ;> serio mowie teraz … no ewentualnie zadawć pytania, żeby być też w miarę w teacie ;> OK, było jak było (IMHO było super) za rok trzeba powtórzyć konfereencję (Leszek, możesz liczyć na mnie tj. na moją pomoc), po za tym zapraszam wszystkich (Ciebie czytelniku też !!) na spotkania SzJUG nie tylko prelekcje ale też i spotkania przy piwie, nie bójcie się nas, nie gryziemy, nie parzymy itp.

Na prawdę mówię serio, każda nowa osoba jest mile widziana, bo każdy nowy człowiek to nowy wątek w  dyskusji, a na tym nam zależy ;> przedewszystkim nie bać się !!

Zmiana środowiska graficznego

Kwiecień 2nd, 2009 [LocK] 2 comments

Chyba nadeszła ta chwila kiedy to w końcu trzeba zmienić środowisko graficzne … po prawie pięciu latach spędzonych na Fvwm-Crystal nadeszła chyba pora na zmianę.

Jakie są przyczyny ? Osobiścnie nie narzekam na Crystala jest:

  • mały
  • szybki
  • poręczny (jeżeli się już nauczy podstawowych skrótów)

Ale posiada jedną bardzo wielką wadę … wszystko było by OK gdyby nie to, że zachciało się mi podłączyć zewnętrzny monitor. W tym momencie Crystal (konkretniej mówiąc pages czyli przestrzenie robocze) wariuje, wyświetlane jest jednocześnie “półtorej” przestrzeni roboczej (tj. cała aktywa i kawałek następnej). Próbowałem nawet restartować i przeładowywać recepturełale to jeszcze pogorszyło efekt …

Tak więc staję znowu przed pytaniem “jakiego WMa wybrać”. Nie jest to dla mnie pytanie proste … bo szczerze mówiąc nie znam nic innego ;) Jedno wiem na pewno, nie będzie to ani KDE ani Gnome.

Dla ścisłości … jakie wytyczne musi spełniać nowe środowisko:

  • możliwość konfiguracji do 12 przestrzeni roboczych i przełączanie się między nimi przez <alt>+F[1-12] (lub <win>+F[1-12])
  • możliwość przełączenia się pomiędzy dwoma sąsiadującymi przestrzeniami przy pomocy <alt>+[ i <alt>+]
  • możliwość przełączenia się pomiędzy dwoma ostatnio używanymi przestrzeniami za pomocą <alt>+<esc>
  • możliwość ciągłego podglądu wszystkich przestrzeni roboczych tj. tego co jest na nich odpalone (w Crystalu mam na prawej krawędzi pasek który reprezentuje wszystkie przestrzenie robocze oraz aplikacje na nich odpalone oczywiście umożliwia on również przełączanie pomiędzy przestrzeniami)
  • brak żadnych pasków zadań i menu (jedno menu “ekranowe” tj. po kliknięciu LMB w pulpit)
  • możliwość zdefiniowania aplikacji które mają się odpalać automatycznie
  • możliwość maksymalizacji okna poprzez <alt>+=
  • możliwość zdefiniowania od jakiego rozmiaru ma być zmaksymalizowane okno
  • nie powinno się rozjeżdżać po podłączeniu zewnętrznego monitora

oczywiście wszystkie te funkcjonalności nie muszą być od razu dostępne ale dane środowisko powinno być na tyle konfigurowalne żeby umożliwić mi ustawienie wszystkich tych opcji ale też nie chcę tonąć w plikach i skryptach konfiguracyjnych …

Cóż, poszukiwania czas zacząć … może ktoś pod powie parę ciekawych środowisk ? ;>

Categories: linux Tags: ,

GWT 1.6m2 … duże zmiany

Marzec 10th, 2009 [LocK] 4 comments

Sesja sesją, ale w między czasie umknęły mi dwa w miarę ważne wydarzenia … myślę tutaj o 2 milestone’ach GWT 1.6.

Nie ma co tu ukrywać trochę czasu minęło, nie jest to już nowinka … ale wprowadzone zmiany w najnowszej wersji Google Web Toolkit są dość spore.

Przede wszystkim trzeba tutaj wymienić zmianę podejścia do reakcji na zdarzenia. W najnowszym GWT  zrezygnowano ze wzorca obserwatora (observer pattern) na rzecz podejścia zdarzeniowego. Dodatkowo można programowo (z kodu Java’y) wywoływać zdarzenia systemowe (takie jak np. kliknięcie na przycisk) na widget’ach, w poprzednich wersjach nie było to możliwe.

GWTSchell i GWTCompiler zostają zastąpione przez HostedMode i Compiler. Dodatkowo w HostedMode zostało zastosowane Jetty (zamiast Tomcat’a) oraz dodano, jakże przydatną funkcję (jeżeli zmienia się implementację serwisów RPC lub przesyłanych encji), restartu servlet contener’a bez konieczności restartu całej aplikacji.

Kolejną ważną zmianą jest zmiana struktury katalogów w war’rze, rezygnacja z ogólnego katalogu public.

Wprowadzono dwa nowe widget’y:

  • DatePicker – jak sama nazwa mówi służy do wyboru daty
  • LazyPanel – załaduje zawartość panelu po pierwszej interakcji ze strony użytkownika

Standardowo,  poprawiono wydajność generowanych java script’ów oraz błędy.

To na tyle szybkiego przeglądu, więcej informacji można znaleść tutaj, a samo GWT zassać można z tąd … trzeba będzie znaleść chwilę czasu żeby się przyjrzeć bliżej nowej wersji GWT ;)

Categories: gwt, java, programowanie Tags:

cda2mpc

Marzec 1st, 2009 [LocK] Brak komentarzy

Parę dni temu postanowiłem zgrać moją skromną kolekcję płyt audio do formatu MPC. Nie chcąc marnować czasu (i zaśmiecać systemu zbędnym softem), postanowiłem napisać sobie mały i prosty skrycik w Python’ie. Założenia

  • prostota
  • automatyczność (wkładam płytę odpalam skrypt i zapominam … ;) )
  • zapis wyjściowych plików w pewnym ustalonym schemacie katalogów (wykonawca, nazwa albumu i utworu pisana camel case’em dodatkowo nazwa utworu poprzedzona jego numerem oraz praw dostępu: 400 (dla utworów_ i 500 (albumu))
  • automatyczne pobieranie informacji o utworach bez konieczności ich przepisywania (tj. wykorzystanie CDDB, a konkretnie cddb-py)

Oto efekt (należy pamiętać żeby podmienić baseDir !):

#! /usr/bin/python
 
"""
cda2mpc, Copyrighted, 2009
Ripps directly from CD audio to musepack (mpc) format.
Developed by Dariusz Luksza <dariusz at luksza dot org>
License: GPL v2
"""
 
import CDDB, DiscID, re
from sys import stdout
from string import capitalize
from os import chmod, makedirs as mkdir
from subprocess import Popen, PIPE, call
 
baseDir = '/home/lock/muzyka/'
 
def camelCase(value):
    return "".join([capitalize(w) for w in re.split(re.compile("[ _]?"), value)])
 
print 'Getting CDDB info ...',
stdout.flush()
cdrom = DiscID.open()
discId = DiscID.disc_id(cdrom)
 
(queryStatus, queryInfo) = CDDB.query(discId)
 
if isinstance(queryInfo, list):
	queryInfo = queryInfo[0]
 
(readStatus, readInfo) = CDDB.read(queryInfo['category'], queryInfo['disc_id'])
 
album = queryInfo['title']
splitAt = album.index('/')
 
artist = album[:splitAt - 1]
album = album[splitAt + 2:]
print ' DONE.'
 
print 'Starting to encoding:', artist, '-', album
 
saveDir = baseDir + camelCase(artist) + '/' + camelCase(album) + '/'
try:
	mkdir(saveDir, 0700)
except OSError:
	pass
 
for i in range(discId[1]):
	title = readInfo['TTITLE' + `i`]
	wavTrack = saveDir + 'track.wav'
	fileName = saveDir + `i + 1` + '-' +camelCase(title) + '.mpc'
	print '\tEncode track:', title , ' (', `i+1`, '/', discId[1], ')'
	print '\t\tStage 1 (wave) ...',
	stdout.flush()
 
	p = Popen(['cdparanoia', '-q', `i + 1`, wavTrack], stdout=PIPE)
	p.wait()
	if p.returncode is not 0:
		print ' ERROR!!'
		continue
	print ' DONE.'
	print '\t\tStage 2 (mpc) ...',
 
	stdout.flush()
	mpcCmd = ['mppenc', '--deleteinput', '--xtreme', '--silent', '--artist',
			artist, '--album', album, '--title', title, wavTrack, fileName]
	p = Popen(mpcCmd, stdout=PIPE, stderr=PIPE)
	p.wait()
	if p.returncode is not 0:
		print ' ERROR!'
		continue
	chmod(fileName, 0400)
	print " DONE.\n\tCOMPLETED."
 
chmod(saveDir, 500)
print 'COMPLETED.'
call('eject')
Categories: linux, programowanie, python Tags: ,

pommed-1.25 suspend on lid

Luty 24th, 2009 [LocK] Brak komentarzy

Pommed jest deamon’em umożliwiającym korzytanie z mac’owych klawiszy funkcyjnych (tych od ściszania czy rozjaśniania ekranu lub też od manipulacji głośnością) obsługuje również wbudowane czujniki oraz zmianę intensywności podświetlenia klawiatury … oraz potrafi przyciemnić ekran kiedy się odłączy zasilanie … właśnie ta funkcjonalność wzbudziła moje zainteresowanie …

Dlaczego, skoro już obsługiwanie jest zdarzenie odłączenia od zasilania, nie obsługiwane jest zdarzenie zamknięcia klapki (tzw. LID). IMHO przejście w stan uśpienia było by najrozsądniejszym rozwiązaniem reakcji na zamknięcie przez użytkownika wieka laptopa.

Chwila grzebania w kodzie programu ujawniła, że takie rozwiązanie nie jest intuicyjne dla autora aplikacji, lub z jakiś powodów zostało odrzucone w procesie developmentu … domyślnie pommed w wersji 1.25 w reakcji na zamknięcie klapki … wyłączy podświetlenie klawiatury, oczywiście jeżeli takowe jest obecne w tam modelu mac’a. W przypadku kiedy nie posiadamy podświetlanej klawiatury zdarzenia LID są  ignorowane … szkoda bo można to wykorzystać w inny sposób.

Tutaj dostępny jest patch dodający możliwość konfiguracji zdarzenia LID. Domyślnie po opuszczeniu klapki zostanie wykonana komenda pm-suspend. W gruncie rzeczy może to być dowolna komenda która piszemy w pliku konfiguracyjnym … to chyba na tyle.

Ten sam patch wysłałem również do autora aplikacji … może poprawi moje błędy (bo w C nie pisałem już od wieków ;>) i jakoś dodatkowo rozwinie ta funkcjonalność.

Categories: linux, macbook Tags: , , , , , ,