sobota, marca 29, 2008

niedziela, marca 23, 2008

No comment

No k...wa fajnie..........

Przeczytałem właśnie artykuł na Onet'cie - "Nawrócony dziennikarz oskarża islam" - i utwierdziłem się w przekonaniu, że z ludźmi jest naprawdę coś nie tak.

Napisałem nawet dość duży wpis na ten temat, jak to takie działanie jest wypowiedzeniem wojny islamowi i parę innych spraw. Ale nie umieszczę go tu.

Takiego braku rozsądku nie ma co komentować. Oby islamskie mohery i Rydzyki nie podchwyciły tematu, bo jak podchwycą to zginie znowu trochę ludzi w imię "wyższego" dobra.......

Ta, wierzący są szczęśliwsi od ateistów... może to przez to, że częściej wywołują wojny....

Btw. ciekawe czy ktoś nie pomyślał tak "Europa się laicyzuje, wywołajmy wojnę religijną z islamem to się będzie musiała zdeklarować po naszej stornie"


Podobne postybeta
Impreza ;-)
Wrócić na Naszą Klasę? ;-)
Ostrzeżenie
Ku dyktaturze...
"Dziennikarze" to debile

sobota, marca 22, 2008

Karta Praw Podstawowych

Przeczytałem właśnie Kartę Praw Podstawowych, oraz wysłuchałem sobie orędzie naszego Prezydenta.

Jestem za Kartą Praw Podstawowych i to bez protokołu brytyjskiego.

Zastanawia mnie jednak obłuda jej przeciwników, w żaden sposób nie mogę zrozumieć jak np. Pan Prezydent i jego zwolennicy mogą odczytywać słowa:

Prawo do zawarcia małżeństwa i prawo do założenia rodziny
Prawo do zawarcia małżeństwa i prawo do założenia rodziny są gwarantowane zgodnie z ustawami krajowymi regulującymi korzystanie z tych praw.

Artykuł 9, Rodział II Wolności

W taki sposób, że Pan Prezydent mówi:

Inny przepis karty poprzez brak jasnej definicji małżeństwa jako związku mężczyzny i kobiety może godzić w powszechnie przyjęty w Polsce porządek moralny i zmusić nasz kraj [pokazuje się akt ślubu] do wprowadzenia instytucji [widać dwóch facetów składających sobie przysięgę małżeńską] sprzecznych z moralnymi przekonaniami zdecydowanej większości społeczeństwa.
Cytat za Orędziem Prezydenta Rzeczpospolitej Polskiej, start 02:03, koniec 02:23 w tym filmie, moje przypisy w nawiasach kwadratowych opisują co widać na ekranie.


Przecież fragment "Prawo do zawarcia małżeństwa i prawo do założenia rodziny są gwarantowane zgodnie z ustawami krajowymi regulującymi korzystanie z tych praw" ewidentnie wskazuje, że to ustawodawstwo danego kraju reguluje kto może zawrzeć związek małżeński.

Nasza Konstytucja mówi:
Małżeństwo jako związek kobiety i mężczyzny, rodzina, macierzyństwo i rodzicielstwo znajdują się pod ochroną i opieką Rzeczypospolitej Polskiej.
Art. 18, Rozdział I Rzeczpospolita


Skąd więc zarzuty, że Karta Praw Podstawowych zmusi nas do zgody na małżeństwa homoseksualistów? Nie wiem.

Jedyne co mówi Karta w tej sprawie to to, że w razie gdyby w Polsce zmieniono konstytucję i parę innych ustaw tak by takie małżeństwa można było w Polsce zawierać to wtedy byłyby one w Polsce zawierane [taka tautologia, czy jak kto woli masło maślane].

Tak samo niezrozumiała jest wypowiedź szefa PiS, który stwierdził, że Karta Praw Podstawowych zmienia Polskę w województwo Unii Europejskiej. A przecież już w preambule karty czytamy:

[...]Unia przyczynia się do ochrony i rozwoju tych wspólnych wartości, szanując przy tym różnorodność kultur i tradycji narodów Europy, jak również tożsamość narodową Państw Członkowskich i organizację ich władz publicznych na poziomach: krajowym, regionalnym i lokalnym; dąży do wspierania zrównoważonego i stałego rozwoju oraz zapewnia swobodny przepływ osób, towarów, usług i kapitału oraz swobodę przedsiębiorczości.

Wydaje mi się, że najlepiej w tej sprawie nie słuchać polityków tylko przeczytać Kartę Praw Podstawowych i Konstytucję Rzeczpospolitej Polski i samemu sobie wyrobić zdanie.


Podobne postybeta
A jakby tak zaskarżyć abonament RTV? ;-)
Rząd wykonał swój plan aż w 17% ;-)
DVDowe pytanie ;-)
Nienawiść
Związki Partnerskie czyli Nienawistniki vs. Rozsądni - 1:0...

Reklamówka PSR :-)

Ciekawa reklamówka PSR - Polskiego Stowarzyszenia Racjonalistów



Podobne postybeta
Ateizm to nie nihilizm i jak sprawić by prymas był apostatą ;-)
Słaby, ale wojujący ateizm - czyli "obiektywne" dziennikarstwo ;-)
PayPal - w końcu można przelewać pieniędze z konta do PayPal
Writely
Akcja bezpośrednia

Czyżby Google przygotowywało Google Translate dla języka polskiego?

Przyglądam się właśnie opublikowanemu Google AJAX Language API.
A ponieważ mam naturę eksperymentatora to do jednego z przykładów włożyłem tekst po niemiecku, a na samym początku zdanie po polsku :-) Zdanie to po polsku to:

To jest test, który niestety nie zostanie przetłumaczony na angielski.

Google Translate nie pozostawiło tego tekstu, a przetłumaczyło go częściowo w taki oto tekst:

It is a test, który niestety never zostanie przetłumaczony na angielski.

Nie można jednak przesadzać ponieważ gdy tekst jest zbyt polski to Google Translate przesyła komunikat błędu mówiący, że nie może znaleźć pary dla danego tłumaczenia.

Ciekawie też wygląda potraktowanie w taki sposób jak powyżej tekstu: Być albo nie być, oto jest pytanie..., który zmienia się w Być albo never być, oto pytanie jest ....



Nic tylko czekać :-), a do tego czasu pozostaje nam używać dobrego, choć potwornie wolnego serwisu Translatica.


Podobne postybeta
Automatyczne tłumaczenie 2 - Translatica vs. Google Translate ;-)
"Harry Potter and the Deathly Hallows" - przeczytane :-)
Google Translate po polsku!!!! :-)
Żenada....
Mały paskowy bezpiecznik i jego moc, część druga - Powrót bestii...

środa, marca 19, 2008

Zmarł Arthur C. Clarke :-(

Jak podaje San Francisco Chronicle w wieku 90 lat zmarł znany pisarz sf (2001: Odyseja Kosmiczna, Spotkanie z Ramą i inne), pomysłodawca satelitów telekomunikacyjnych Arthur C. Clarke.

Smutno :-(

Clarke skończył ostatnio prace nad książką "The Last Theorem" o której twierdził dwa lata temu, że to będzie jego ostatnia i to nie skończona książka.







Podobne postybeta
Android, lokalizacja i koszty
Pełna Odyseja Czasu :-)
Wycieczka po książki ;-)
Odyseja Czasu - Burza Słoneczna
ISS

wtorek, marca 18, 2008

Nieznane skarby JDK - JConsole :-)

Walczyłem dziś w pracy z PermGen'em [czyli obszarem pamięci w JVM do którego wędrują obiekty, które nie zostaną nigdy poddane działaniu Garbage Collectora, takimi szczęśliwcami są pliki .class, niektóre String'i oraz obiekty, które zostały namaszczone do przebywania w tym miejscu przez algorytmy GC ;-), mamy jeszcze 3 obszary:
  • Eden Space: gdzie wpadają obiekty świeżynki na które co chwila czyha Garbage Collector, 
  • Survivor Space: gdzie mieszkają te obiekty które przetrwały trudne czasy Eden'u i walkę z natrętnym GC,
  • Tenured Gen: zasłużeni, praktycznie nie do usunięcia przez GC, który zagląda do nich nieczęsto, 
  • czwarty jest wspomniany już Perm Gen: stali mieszkańcy ;-)], szukałem więc jakichś narzędzi które byłyby na tyle miłe by pokazać mi jak program się sprawuje...I znalazłem :-)
Do JDK dodawany jest miły program zwany JCONSOLE, którego znaleźć można w katalogu bin JDK.
Po uruchomieniu pozwala nam na podpięcie się do praktycznie dowolnej aplikacji Java działającej na naszej maszynie [lub na maszynie odległej]
Możemy obejrzeć jak program używa pamięci, podejrzeć ile ma wątków i zobaczyć Stack Trace dla nich, sprawdzić ile załadowano klas, obejrzeć podsumowanie dla podglądanej JVM, pogadać z MBeans'ami.

Bardzo użyteczny coś :-)
[hackowanie w tagach nie ma nic wspólnego z hackowaniem sieci, a raczej z zaglądaniem w trzewia różnych rzeczy, tutaj JVM :-)]


Podobne postybeta
Nieznane ścieżki Garbage Collectora :-)
Koszmarne Garbage Collectory part 2 ;)
Chciałem popsuć G1 i mi się na razie nie udało ;-)
Przepis na szybkie programy ;-)
TimeToRead 0.0.2 - nowy tag i poprawki ;-)

niedziela, marca 16, 2008

OpenOffice.org2GoogleDocs 0.9.2

Poprawki:
  • bardziej poprawna obsługa plików które mają w nazwie spacje [z dziwnych powodów stary sposób działał np. w Impress, a nie działał we Writter'ze]
  • powiększyłem okienko komunikatów, dzięki czemu w trakcie pobierania dokumentów nie mamy obciętego tekstu, a cały mieści się w okienku

    Zmiany:
  • okienko eksportu i okienko importu dziedziczą teraz po JFrame zamiast JDialog, dzięki czemu widać je na pasku startu

    Zapraszam do pobierania


    Podobne postybeta
    Poprawiona wersja OpenOffice.org2GoogleDocs 0.8.1
    Piszemy dzienniczek z Copilotem ;-)
    OpenOffice.org2GoogleDocs 1.0.1
    OpenOffice.org2GoogleDocs 1.0.4
    OOo2GD v1.2.1
  • sobota, marca 15, 2008

    Ile to jest 1+1 w Java'ie?

    Wydawało by się, że odpowiedź jest prosta...

    Czy aby na pewno? ;-)
    Spróbujmy sprawdzić jakiej odpowiedzi udzieli nam Java.

    Użyjemy takiego kodu:

    public class Integers {
    public static void main(String[] args) throws Exception{
    Integer i1 = 1;
    Integer i2 = 1;
    System.out.println(i1+"+"+i2+"="+(Integer)(i1+i2));
    }
    }

    Jak łatwo się domyśleć ujrzymy na ekranie taki wynik:

    1+1=2

    A co gdy kod zmienimy w taki sposób jak poniżej?

    import java.lang.reflect.Field;
    public class Integers {
    public static void main(String[] args) throws Exception {
    Integer i1 = 1;
    Integer i2 = 1;
    System.out.println(i1+"+"+i2+"="+(Integer)(i1+i2));
    fixIntegers();
    System.out.println(i1+"+"+i2+"="+(Integer)(i1+i2));

    }

    static void fixIntegers() throws Exception {
    Class integerClass = Integer.class;
    Field value = integerClass.getDeclaredField("value");
    value.setAccessible(true);
    value.setInt(Integer.valueOf(2), 3);
    }

    }


    Nagle ujrzymy taki oto wynik:
    1+1=2
    1+1=3

    Dlaczego? ;-)

    Sekret tkwi w 2 miejscach, pierwsze to metoda fixIntegers() która dokonuje niecnej podmiany wartości 2 na 3 dla obiektu typu Integer reprezentującego liczbę 2.
    Drugie, nawet ważniejsze to pewna specyfika implementacji Sun'a. Wprowadzając auto- boxin i unboxing stwierdzono, że ze względu na optymalność wykorzystania pamięci i prędkości wykonywania kodu lepiej dla pewnej grupy obiektów typu Integer wprowadzić pewien mechanizm oszczędzający tak pamięć jak i takty procesora.
    W końcu, po co za każdym razem gdy dokonuje się konwersja z typu int na Integer tworzyć całkiem nowy obiekt... szybciej i taniej będzie stworzyć pewien zestaw obiektów Integer trzymających wartości stosunkowo najczęściej potrzebne. I tak powstała sytuacja w której dla pewnego zakresu liczb w momencie konwersji na Integer'a zamiast konwersji jest podstawiany stały obiekt. Dla Sun Java [wersja 6 (build 1.6.0_03-b05), ale też dla Java 5] ten zestaw zaczyna się od liczby -128, a kończy na 127].
    I w tym cały sekret ;-)


    Podobne postybeta
    Java 8 nadchodzi....
    Sekrety klasy String ;-)
    Giń konstruktorze! Giń! ;-)
    Nieoczywiste oczywistości ;-) podstępny autoboxing ;-)
    Sztuczki tropiciela błędów, part 3 - hackujemy klasy finalne ;-)

    Parkour odpowiedzią na korki ;-)

    Stare, ale jare chciało by się rzec :-)

    Myślę, że taki sposób przemieszczania się może być odpowiedzią na korki ;-)


    Podobne postybeta
    Jak dobrze być lemurem ;-)
    Tunel... ciąg dalszy ;-)
    Paradoks autostradowy ;-)
    Jak wybrać urządzenie z Androidem żeby nie narzekać na brak updatowania systemu
    15 razy szybciej :-)

    niedziela, marca 09, 2008

    OpenOffice.org2GoogleDocs 0.9.1

    Nowa wersja dostępna, a w niej jedna poprawka, dwie nowe funkcjonalności i kilka małych zmian.

    Poprawki:
  • ukrócenie wędrówki plików konfiguracyjnych po dysku [mam nadzieje!!!]

    Nowe:
  • automagiczna konwersja plików Impress'a (ODP) do formatu Microsoft PowerPoint 97 (PPT) - Google Docs wspiera tylko PPT, nie wspiare ODP
  • wsparcie dla serwerów proxy - powinno działać, choć nie byłem w stanie przetestować

    Zmiany:
  • lekkie zmiany w polskim tłumaczeniu
  • lekkie zmiany w niemiecki tłumaczeniu
  • lekkie zmiany w angielskim tłumaczeniu

    Zapraszam do pobrania!!!


    Podobne postybeta
    OpenOffice.org2GoogleDocs 0.9.5
    OpenOffice.org2GoogleDocs 0.8 :-)
    Co umie OpenOffice.org2GoogleDocs ;-)
    Lekcja na dziś - żeby konfiguracja działała trzeba ją zapisywać i odczytywać ;-)
    OOo2GD 2.1.0 - filtrowanie, sortowanie [dla niektórych ;-)] i bardziej *nixowe nazwy
  • czwartek, marca 06, 2008

    Sekrety klasy String ;-)

    String jest w Java'ie niemutowalny.
    Mówiąc inaczej, jeżeli mamy już referencję do obiektu typu String stworzoną w taki np. sposób:

    String str = "To jest test";

    to już nigdy nie zmienimy zawartości tego obiektu.......

    Podobno ;-)

    Ktoś może spróbować takiego rozwiązania:
    public void modificator(String str) {
    str = "toster";
    }
    [...]
    String str = "To jest test";
    System.out.println(str); // TUTAJ wypisze się "To jest test"
    modificator(str);
    System.out.println(str); // A tutaj, też ;-)

    Jak należało się spodziewać, takie rozwiązanie nie działa.

    Ale co w momencie gdy zmienimy metodę modificator w taką jak poniżej? ;-)
    public void modificator(String str) throws Exception {  
    Field valueField = str.getClass().getDeclaredField("value");
    valueField.setAccessible(true);
    char[] value = (char[])valueField.get(str);
    char[] reversed = new char[value.length];
    for (int idx=0; idx<value.length; idx++) {
    reversed[idx]=value[value.length-idx-1];
    }
    for (int idx=0; idx<value.length; idx++) {
    value[idx]=reversed[idx];
    }
    }

    Nagle okaże się, że String nie jest taki niezmienialny ;-) Nagle drugie wypisanie ujawni nam, że nasz obiekt się zmienił!

    Na SCJP dobrze wiedzieć, że String jest niemutowalny, ale warto też pamiętać, że jak się ktoś uprze to jednak można go zmienić ;-)

    Jeżeli przed wywołaniem metody modificator(String) stworzymy na podstawie naszego bazowego String'a łańcuch przy pomocy metody substring(int) to po przekazaniu naszego bazowego obiektu do modificator zmieni się także wygląd tego nowego obiektu.

    Wszystko to prawda dla Sun Java, na innych może się okazać, że taki kod w ogóle nie zadziała :-) Dlatego ostrożnie należy podchodzić do takich "metod", trzeba też pamiętać, że String z jakichś powodów zdecydowano się zrobić niemutowalnym.

    [sam na pomysł takiego potraktowania String'a nie wpadłem, kolega mi ten pomysł podsunął :-)]


    Podobne postybeta
    localStorage odsłona 2 - zaczynają się kłopoty ;-)
    Ile to jest 1+1 w Java'ie?
    JNI i łańcuchy ;-)
    Umiejętność programowania pomaga :-)
    [Updated] Czytanie Pocketa ;-)

    środa, marca 05, 2008

    IE8 beta 1

    Zainstalowałem przed chwilą Bete 1 Internet Explorer'a 8.
    Trudno mi się jeszcze wypowiadać na jego temat, ale jak na razie strasznie się pokłócił z Google Toolbar'em [wina leży raczej po stronie tego drugiego, w końcu był pisany pod 7, a nie 8 wersje].



    Po takim "wypadku" IE8 próbuje podnieść tab'a.



    Ciekawe jest to, że w takiej sytuacji reszta paneli nie jest przeładowywana i wydaje się działać bez problemów. Jeżeli działa to tak jak się wydaje, to jest to świetny pomysł.

    Ten błąd Google Toolbar'a w IE8 pojawia się jak na razie tylko na Blogger'ze.

    W blogach z Blogger'a pojawia się też dziwny problem z renderowaniem, który pokazuje następny obrazek.



    GMAIL jak na razie nie uznaje IE8 za godnego przeciwnika i serwuje mu tylko starszą wersję interfejsu :-)
    GMAIL nie jest w tym osamotniony, poniżej to co ujrzymy gdy spróbujemy użyć IE8 do skorzystania z Windows Update.



    Ale to całkiem naturalne jak na 1 bete.

    Bardziej martwi mnie fakt, że użycie tagu IFRAME może sprawić wiele kłopotów. Przy użyciu mojego zabawowego edytora udało mi się doprowadzić do takiego oto efektu:



    Wygląda więc, że na razie użycie IFRAME w stronie osadzonej w IFRAME może doprowadzić do tego, że przełączenie najbardziej zagnieżdżonej ramki w tryb edycji spowoduje przejście do tego trybu [choć w niepełnej wersji] także ramki zewnętrznej.

    Wydaje się również, że JavaScript operujący na elementach strony działa na razie wolniej niż w IE7, ale to tylko wniosek po obserwacji zużycia procesora gdy przeglądarka wyświetlała tą stronę [gra w życia, która już tu kiedyś gościła :-)]

    Nieżle jak na bete 1, zobaczymy co będzie dalej :-)


    Podobne postybeta
    Pokręcony IE
    Uparłem się na edytor w JavaScript i dHTML
    Sudoku - rozwiązanie doskonałe ;p
    Google Wave - pierwsze wrażenia
    Duża grywalność

    wtorek, marca 04, 2008

    JBoss rozrabiaka ;-)

    Ciekawa obserwacja z pola zmagań z JBoss'em w wersji 4.0.GA, choć może dotyczyć też innych wersji.

    Jeżeli w trakcie finalizacji obiektu [czyli momentu gdy finalizer wywoła metodę finalize() z naszego obiektu] konieczne jest załadowanie jakiejś klasy która teoretycznie jest dostępna dla ClassLoader'a ładującego klasę tworzącą nasz finalizowany właśnie obiekt to leci ClassNotDefFoundError [albo ten drugi ;-) ClassNotFoundError, nie pamiętam :-)].
    Co ciekawe, jeżeli później spróbujemy użyć gdzieś tej klasy, to nigdy się to nie uda z racji tego ClassNotFoundError.

    Obejściem jest załadowanie klasy jakoś tak wcześniej, rozwiązaniem przepisanie finalize() tak by nie potrzebowało niezaładowanych klas ;-) [ale to nie zawsze będzie możliwe :-)].

    Żeby było zabawnie, problem nie występuje na Tomcat'cie, wydaje się też nie występować na Jetty'm :-)


    Podobne postybeta
    finalize() - do czego służy, a do czego nie i z czym to się je.
    Programowanie pomaga :-)
    Nieznane ścieżki ClassLoader'a ;-)
    Samochód jako zmniejszacz temperatury.... GC i jak to możliwe, że Young Generation może być zbyt duże, strzeż się finalize() i muzyczka :-) Czyli potok świadomości....
    Darmowy hosting JSP

    GMail Art


    W wielu miejscach już to było :-) Ale dziś obejrzałem poraz kolejny i postanowiłem się podzielić :-)


    Podobne postybeta
    ISS poraz kolejny :-) tym razem poprzedzona HTV :-)
    Gmail Offline w wersji 0.2
    "Obserwacje"
    Jak masz doła to nawet rozwiązanie problemu niezbyt cieszy ;-)
    To działa! :-)

    poniedziałek, marca 03, 2008

    Kodeks Pracy do piachu!

    Wczoraj Tusk z koleżkami ogłosili chęć wprowadzenia "prorodzinnego podatku liniowego", a dziś kolejne kuriozum - pomysł zmiany kodeksu pracy tak by kobiety w ciąży nie były chronione przed zwolnieniem. To samo z osobami z uprawnieniami przedemerytalnymi.

    Yeah!!! Pozbywajmy się zdobyczy XX wieku!!!

    Ciekawe co następne? Pozwolenie na zatrudnianie dzieci po 12 godzin dziennie?


    Podobne postybeta
    Rozluźniać, czy nie rozluźniać?
    Netbooki < 10" do piachu?
    Patenty
    Dobrze, że Tusk wygrał
    Raj pro-life - czyli co oznacza konstytucyjna ochrona "życia poczętego"

    niedziela, marca 02, 2008

    OpenOffice.org2GoogleDocs 0.9 :-)

    Lekko się rozpędziłem ;-)
    Dostępna jest już kolejna wersja rozszerzenia OOo2GD do Open Office.org. Rozszerzenie jak zwykle pozwala na eksport dokumentów z OpenOffice.org do Google Docs, oraz na pobieranie dokumentów tekstowych z Google Docs.


    Poprawki:
  • Plik gdocs.dat [z "zaszyfrowanymi" danymi o naszym koncie na Google Docs] już nie będzie się nagrywał w katalogu w którym aktualnie lądują nasze pobierane dokumenty.

    Zmiany:
  • Dodałem ikony, dzięki temu w toolbarze mamy teraz ikonki zamiast tekstów
  • Menu Google Docs przewędrowało z menu głównego do menu File.

    OOo2GD na stronie OpenOffice.org





  • Podobne postybeta
    Na łeb, na szyję...
    Zły OpenOffice.org Base...
    OpenOffice.org i Google Docs :-)
    Pobierz swoje dokumenty z Google Docs w wybranym w formacie, czyli OOo2GD 1.8.0 :-)
    OOo2GD 1.5.0 - drżyjcie arkusze! ;-)

    Planetarium czy Plebania?

    TVP Bydgoszcz emituje raz w miesiącu 20 minutowy program Planetarium poświęcony astronomii. Program dla hobbystów, ale o dość wysokim poziomie.

    Kiedyś program ten puszczany był także na TVP3, ale od jakiegoś czasu nie uświadczymy go na ogólnopolskiej antenie......

    Publiczna telewizja zamiast poświęcić 20 minut w miesiącu na pokazanie programu popularnonaukowego woli pokazywać inne rzeczy. W TVP Katowice był to wczoraj skrót z meczu siatkówki. Nie mam nic przeciwko temu skrótowi, ale czy naprawdę tak trudno w ciągu miesiąca wygospodarować 20 minut???

    Aż chciałbym wrzasnąć, że zamiast pokazać raz na jakiś czas program popularnonaukowy i to robiony w Polsce, TVP woli pokazywać setki godzin programów dla kretynów. Mógłbym przypomnieć, że kiedyś w TVP było całe pasmo edukacyjne, były programy jak Sonda czy Kwant, było Laboratorium [które jest podobno nadal dostępne, ale z tego co widziałem to tylko w ITVP].... Było....

    Bądźmy szczerzy dzieci wychowane na polskich serialach czy różnych "Tańcach z/na..." prochu nie wymyślą....

    Czekać tylko jak ktoś uzna, że Planetarium w Chorzowie należy zamienić na hipermarket, albo kino, że o kaplicy nie wspomnę. Bo wtedy będzie bardziej użyteczne.

    20 minut w miesiącu im szkoda na program popularnonaukowy, a dzień w dzień w prime time'ie nie szkoda im czasu na "M jak Miłość", "Klan", "Plebanie" czy 2 miliony 843 tysiące 111 odcinek "Mody na sukces".

    Kopernik mówił, że zły pieniądz wypiera dobry, widać że w TV jest tak samo ;-)


    Podobne postybeta
    Telewizja nie dla idiotów...
    Telewizyjne zastanawianie
    "Pokochałem me Atari....", a właściwie G1 :-)
    Plusy dodatkie i plusy ujemne, czyli co może być złego, a co dobrego w AppInventorze :-)
    No i jest problem natury logistyczno-temporalnej....

    sobota, marca 01, 2008

    Poprawiona wersja OpenOffice.org2GoogleDocs 0.8.1

    Dostępna jest kolejna wersja OOo2GD.
    W tej wersji poprawione zostało pobieranie plików z Google Docs, od teraz nie straszne nam są polskie litery, cyrylica czy spacje w nazwach ;-) Dodatkowo rozszerzenie nie powinno już psuć nazw plików.
    Dla użytkowników obcojęzycznych zmianą jest to, że od teraz powinno zacząć dobrze wyglądać bułgarskie tłumaczenie [które sam popsułem w poprzedniej wersji], oraz to że w tłumaczeniu niemieckim wprowadzono drobną zmianę.

    Jak zawsze nową wersję rozszerzenia pobrać można ze strony rozszerzenia.


    Podobne postybeta
    OpenOffice.org2GoogleDocs 0.9.2
    Debugowanie JavaScriptu odsłona 2 ;-)
    Test z Asus EEE Pad Transformer
    Niemangielski ;-)
    OOo2GD 1.7.0

    Sztuczki tropiciela błędów ;-)

    Zwykle tropiąc błąd w kodzie najpierw wymyślamy gdzie problem może być, później zaczynamy go śledzić. Jest to rozwiązanie skuteczne i prawie zawsze działa.
    Jednak gdy mowa o aplikacji która pracuje wielowątkowo [a takich jest coraz więcej] nie zawsze jest to podejście najlepsze.
    Wtedy przydaje się logowanie.

    A w logowaniu, szczególnie gdy tropimy błąd przydaje się taki oto banalny kawałek kodu:

    Throwable tr = new Throwable();
    tr.printStackTrace();

    Niby nic, a cieszy ;-) Wiemy już kto wywołał nasz kawałek kodu.
    Czasem przydaje się też wędrówka po stack trace'ie:

    public static void logStackTrace() {  
    Throwable tr = new Throwable();  
    StackTraceElement[] elements = tr.getStackTrace();  
    String str = "";  
    // zaczynamy od 1 żeby nie było widać wołania tej metody ;-)  
    for (int idx=1; idx<elements.length; idx++) {  
    str+=elements[idx]+" ";  
    }  
    System.out.println(str);  
    }


    Czasem potrzebujemy też wiedzieć jakie wątki odwołują się do naszego kawałka kodu, wtedy używamy równie znanego:

    Thread.currentThread();


    Możemy go wypisać:

    System.out.println(Thread.currentThread();


    Albo użyć jako klucza w mapie:

    // Używamy Hashtable'a bo jest bezpieczniejsza w przypadku wielu wątków
    Map<Thread,Throwable> map = new Hashtable<Thread,Throwable>();
    [....]
    map.put(Thread.currentThread(), new Throwable());


    Wyobraźmy sobie sytuację, że otwieramy połączenie i zamykamy je, ale nie chcemy mając jedno otwarte połączenie z danego wątku otwierać drugiego i kolejnych. W wytropieniu takiego czegoś pomóc nam może:

    // Używamy Hashtable'a bo jest bezpieczniejsza w przypadku wielu wątków  
    public static Map<Thread,Throwable> map = new Hashtable<Thread,Throwable>();  
      
    public void openSomething() {  
    Throwable tr = new Throwable();  
    // używamy get, bo nie ufam contains, choć tutaj by świetnie zadziałało ;-)  
    if (map.get(Thread.currentThread())!=null) {  
    System.out.println("PROBLEM!!!!!");  
    tr.printStackTrace();  
    }  
    map.put(Thread.currentThread(), new Throwable());  
    [...]  
    }  
      
    public void closeSomething() {  
    map.remove(Thread.currentThread());  
    [....]  
    }


    Jak widać jest to wszystko proste, a na dodatek skuteczne.
    Zwykle do logowania nie używamy też System.out a czegoś bardziej sexy ;-) ale to już inna bajka.

    Na koniec jeszcze przykład jak można logować w trakcie tropienia błędu nieobsłużone wyjątki:

    Runnable r = new Runnable() {  
    @Override  
    public void run() {  
    while (true) {  
    Object o = null;  
    try {  
    o.wait();  
    } catch (InterruptedException ie) {  
    ie.printStackTrace();  
    }  
    }  
    }  
    };  
    Thread t = new Thread(r);  
    t.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {  
    @Override  
    public void uncaughtException(Thread t, Throwable e) {  
    System.out.println(t);  
    e.printStackTrace();  
    }  
    });  
    t.start();


    Oczywiście takie ustrojstwa mają sens w kodzie w trakcie developmentu, a nie na produkcji, choć to zależy chyba tylko od naszego wyboru :-)

    [edit 01/03/2008 11:34: zmieniłem HashMap'e w Hashtable'a, bo walnąłem babola ;-) To Hashtable jest bezpieczne wątkowo, nie HashMap'a]


    Podobne postybeta
    Sztuczki tropiciela błędów - breakpoint na sterydach ;-)
    IE suxx ;-)
    Przepływ sterowany danymi - A takie Java'owe coś ;-)
    Potfór ;-) czyli generator z yield w Java'ie
    Sztuczki tropiciela błędów - breakpoint na sterydach 2 ;-)