niedziela, kwietnia 27, 2008

"Dziennikarze" i "Prasówka"

W tym tygodniu jedną z większych sensacji było to, że Minister Sprawiedliwości Ćwiąkalski chce obniżyć wyroki dla okrutnych zabójców.

Jak na razie chyba tylko jedna stacja pokazała samego Ćwiąkalskiego mówiącego, że nie chodzi tu o poprawę losu okrutnych morderców, ale o likwidację bubla prawnego.
Bubla prawnego który zmusza sędziów np. do skazania na 25 lat więzienia policjanta, który zastrzeli uciekającego przestępcę, gdy mógł go tylko postrzelić.
Bubla prawnego, który stawia sędziego przed dylematem czy gdy przestępcą jest niepełnoletni to stosować zapis prawa mówiący o tym, ze w razie szczególnego okrucieństwa ma skazać podsądnego na minimum 25 lat, czy może zgodnie z drugim zapisem który karze mu przeliczyć okres zasądzonej kary do 2/3.

Dziś sensacją jest to, że Gorbaczow wydał wyrok śmierci na JP2, choć na TVN24 Jacek Pałasiński mówi, że widział te dokumenty 9 lat temu i nie doczytał się tam tego....

Pogoń za sensacją i świadome nie przekazywanie pełnej informacji w celu manipulacji tłumem?

Można tak myśleć.

Jednak wg. mnie to coś całkiem innego, zwykła niekompetencja. Zapewne działa tu zasada Pareto, i za 80% informacji które znajdują się w obiegu odpowiada 20% źródeł [dziennikarzy], cała reszta czyli 80% "dziennikarzy" to zwykli przepisywacze, którzy swój wkład ograniczają do przepisania tego co przeczytali w wiadomościach serwisowych. Mam nawet wrażenie, że jest to nie 80/20, a 90/10.

Jest to wymarzony "rynek" dla polityków i manipulatorów. Wystarczy puścić w sobotę lub niedzielę jakiś chwytliwy kawałek i już stado sępów go podchwyci. Komuś się dołoży, tytuł pierwotnego "publikatora" pojawi się w mediach jako źródło, pokarzą w TV naczelnego moralizatora i eksperta w danej dziedzinie i wszyscy zadowoleni.

Z tego co pamiętam gdy miałem jakieś 10 lat [czyli mniej więcej rok 1988, czasy końca PRL] moja kuzynka robiła "prasówkę" na lekcję WOS. Miała przeczytać jakiś artykuł i wyciągnąć z niego wnioski. Z tego co pamiętam był to artykuł o którymś tam zjeździe PZPR, przypuszczam więc że wnioski musiały zawierać informację o tym, że przewodnia siła pochyla się nad losem kraju i takie tam dyrdymały. Zapewne więc prasówka polegała na przepisaniu podstawowych tez i wniosku artykułu z użyciem "swoich" słów.....
Jakby żywcem wyjęte zachowania dużej ilości dzisiejszych "dziennikarzy" ;-)


Podobne postybeta
Opętańcy ;-)
Jak VHDL obalił komunizm
Pogoń za sensacją to jednak przeginka....
"Dziennikarze"
Lubię plotki ;-)

czwartek, kwietnia 24, 2008

OpenOffice.org2GoogleDocs v1.0.0 :-)

Po dłuższej przerwie pojawia się oto wersja 1.0.0 mojego rozszerzenia OOo2GD :-)
W wersji 1.0.0 znalazła się poprawka umożliwiająca pobieranie dokumentów z Google Docs dla użytkowników używających kont nie będących kontami GMAIL lub Google Apps, dodatkowo od teraz okienko z informacją o pobieraniu dokumentu znikać będzie dopiero po otwarciu dokumentu w OpenOffice.org.

Dlaczego wersja 1.0.0? Początkowo miała to być wersja 0.9.6, ale przez ostatnie 2 tygodnie wersja 0.9.5 zachowywała się na tyle stabilnie, że uznałem że można ją z dodatkowymi poprawkami mianować wersją 1.0.0 :-)

Zapraszam do pobierania :-)


Podobne postybeta
OOo2GD 1.7.0
Chlebowy relatywizm ;-)
OOo2GD 1.8.2
Dalsze zachwyty nad C++ ;-)
Chwalmy chciejstwo ;-)

niedziela, kwietnia 20, 2008

I już 40 tysięcy....



I stało się, w piątek w drodze z Krakowa do Wodzisławia [dokładnie na obwodnicy Krakowa za zjazdem Skotnickim w kierunku na Balice ;-)] osiągnąłem 40 tysięcy km moim samochodzikiem....
Jeden obwód Ziemi już mam ;-)


Podobne postybeta
60000 km...
30000 km :-)
Białe paskudztwo...
Pierwszy śnieg
Najszybsza droga z Krakowa do Szczecina wiedzie przez....

czwartek, kwietnia 17, 2008

Piszemy serwis społecznościowy w Google App Engine

Wczoraj koło 20:30 wpadłem na pomysł sprawdzenia jak dużo czasu potrzeba na zbudowanie systemu społecznościowego w oparciu o Google App Engine ;-)
W taki sposób zaczął powstawać RMKSocial ;-).
Jak na razie RMKSocial ;-) liczy sobie 465 linii kodu w Python'ie, a jego tworzenie trwało jak na razie około 7 godzin.

W tym czasie powstały zręby systemu, czyli wewnętrzna "poczta" oraz profile użytkowników.

Kolejnym etapem będzie dodanie Grup użytkowników [czy też forów] oraz wyszukiwarka użytkowników [teraz by do kogoś napisać lub obejrzeć czyjś profil trzeba znać ID tej osoby ;-)]. W następnym kroku postaram się wprowadzić zabezpieczenia przed niecnymi praktykami ;-) oraz możliwość włączenia otrzymywania powiadomień przez maila.

Wstępna refleksja po zastosowaniu NDD [Needs Driven Development - Development sterowany potrzebami ;-)] do tworzenia RMKSocial ;-) jest taka, że stworzenie systemu społecznościowego to żadna filozofia. Trzeba tylko pamiętać żeby nie ładować się w zabawy z sesją ;-) [której zresztą Google App Engine nie posiada :-)]

Dla zainteresowanych adres mojego profilu w RMKSocial ;-) [trzeba być zalogowanym by móc go obejrzeć ;-)]


Podobne postybeta
Niestraszna mi quota w Google App Engine ;-)
Delete Driven Development ;-)
Jak to rzeczy proste okazują się trudnymi ;-)
Folderowicze vs tagerzy - Przemkowa teoria podziału ludzi ;-)
A JavaScript i tak szybszy ;-)

sobota, kwietnia 12, 2008

Google App Engine - pierwsze wrażenia

Wczoraj przyszło długo oczekiwane [będą ze dwa dni ;-)] zawiadomienie, że mogę już korzystać z Google App Engine.
Jak na razie moja aplikacja jest zastraszająco brzydka i testowa ;-) A wszystko co robi to udostępnienie prostej "Księgi Gości" która bazuje na stworzonym przeze mnie dawno temu edytorze opartym na dHTML.

Na razie moje wrażenia są BARDZO POZYTYWNE. Od dawna czekałem na coś takiego, choć liczyłbym bardziej na oparcie się o Java'e niż Python'a :-) Jednak Python mi nie przeszkadza :-) a to, że na razie jest jedyną wspieraną platformą spowoduje pewnie, że lepiej się go nauczę.

Co do minusów, to niestety lokalny serwer w wersji dla Windows [i chyba dla Linuksa] ma błąd niepozwalającą na użycie katalogów statycznych [czyli takich w których trzymać możemy sobie pliki statyczne, takie jak obrazki, CSSy czy skrypty JavaScript]. Istnieje parę sztuczek jak to obejść, ale żadna nie zadziałała na moim komputerze :-)



Po zdeployowaniu aplikacji możemy bardzo łatwo oglądać jej statystyki, przeglądać logi, operować na datastore, zapraszać nowych developerów i robić inne "fascynujące" rzeczy :-)

Ocena ogólna - CZAD!!!!


Podobne postybeta
Google App Engine i DatastoreTimeoutException
Głupi HTTPS...
Nowy Gadacz - raport z prac
1.3 σ w kierunku średniej ;-), czyli wcześniej wstaję
Projekty ;-)

czwartek, kwietnia 10, 2008

Sztuczki tropiciela błędów, part 2 ;-)

Przedstawiłem tutaj jakiś czas temu parę sztuczek tropiciela błędów, dziś nowe ;-)

Polowanie na zapomniany atrybut

Problem:

Mamy metodę kopiującą jeden obiekt do drugiego.
Chcemy upewnić się, że wszystkie wartości atrybutów z jednego obiektu są kopiowane do drugiego.
Zakładamy, że mamy obiekt, który ma wiele, ale to naprawdę wiele atrybutów, mamy do nich także metody set i get [mogą być też is, choć tutaj je pominiemy].
Jeżeli nie mamy metod set i get to powinniśmy sie przerzucić na ogrodnictwo i zrezygnować z programowania w Java'ie ;-) [hint - Eclipse oraz NetBeans są w stanie wygenerować metody set i get].

Rozwiązanie:

Class type = orig.getClass();
Method[] methods = type.getMethods();
for (Method method:methods) {
if (method.getName().startsWith("get")) {
try {
if (!method.invoke(orig).equals(method.invoke(retVal))) {
System.out.println(method.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}


orig to obiekt wejściowy, retVal to obiekt do którego kopiujemy.

Powyższy kawałek kodu iteruje przez wszystkie metody naszego typu, jeżeli metoda zaczyna się na get czyli tak jak wg. konwencji JavaBans powinien nazywać się getter, to próbuje ją wywołać na obiekcie wejściowym i wyjściowym, oraz porównać ich wyniki, jeżeli wyniki są różne, oznacza to, że najprawdopodobniej nie skopiowaliśmy zawartości tego pola [nie zadziała to tak jak byśmy chcieli w sytuacji gdy akurat w obiekcie oryginalnym jest wartość domyślna, bo i tak będzie w docelowym].

W wyniku dostaniemy na konsoli listę metod get, które odnoszą się do atrybutów które nie zostały skopiowane.

Btw. do szybkiego "sklonowania" obiektu możemy użyć wariacji powyższego kodu, którą przedstawiam niżej:
Class type = orig.getClass();
Method[] methods = type.getMethods();
for (Method method:methods) {
if (method.getName().startsWith("get")) {
try {
String methodName = method.getName().replace("get","set");
Method setter = type.getMethod(methodName,method.getReturnType());
setter.invoke(retVal,method.invoke(orig));
} catch (Exception e) {
e.printStackTrace();
}
}
}


Taki kod może się przydać do weryfikacji czy źródłem naszego problemu jest fakt, że nie kopiujemy wszystkiego między obiektami.

Wstrzykiwanie breakpointów

Przydatne gdy mamy legacy code w którym mamy długie metody operujące na jakichś obiektach i chcielibyśmy namierzyć miejsce gdzie stan obiektu zmienia się na taki jaki nas interesuje [np. miejsce gdy ktoś ustawi jakąś konkretną wartość zmiennej, albo gdy doda do np. StringBuilder'a jakiegoś String'a].

Technika ta bywa trudna i zdradliwa, ale czasem jest bardzo przydatna ;-)

W skrócie polega na nadpisaniu [lub modyfikacji] klasy której obiekt chcemy monitorować w taki sposób by kod w momencie ustawienia zadanej wartości wchodził do danej sekcji kodu, tam stawiamy breakpointa i korzystając ze stack trace'a widzimy gdzie został nasz obiekt tak potraktowany... brzmi dobrze, ale na najciekawszych obiektach takich jak String, StringBuilder czy StringBuffer bywa trudne do zrealizowania. Z powodu bezpiczeństwa i wydajności Twórcy JDK zdecydowali, że wszystkie te klasy są finalne... ale nie straszne nam to ;-) gdyż w większości przypadków możemy zastąpić te obiekty innymi klasami, które będą na zewnątrz zachowywały się w naszym kodzie tak jak nasi delikwenci. A tam gdzie w końcu potrzebować będziemy wartości o odpowiednim typie to spokojnie możemy wyposażyć w taki getter nasz obiekt.

Zakładanie haka ;-)

Podobnie jak poprzednia technika polega na nadpisaniu niektórych metod przeciwnika ;-) Przydatne np. w trakcie walki ze strumieniami, gdy nie wiemy czy strumień dostaje to co zamierzyliśmy czy coś innego. W takim przypadku nadpisujemy [w klasie anonimowej najlepiej, bo na miejscu i łatwe do usunięcia] metodę read lub write w taki sposób, że wewnątrz wołamy supermetody, a dane wyrzucamy na konsolę.

Bisekcja breakpointem ;-)

Czasem, jest tak że błąd gdzieś jest, widać go w wartości jakiejś zmiennej [lub kilu zmiennych], ale nie mamy pojęcia gdzie się pojawia, żadna z powyższych technik się nie sprawdza, albo nie mamy ochoty lub możliwości popełniania klasy która odwali za nas robotę. W takim przypadku najprościej zastosować taki trick, ustawiamy breakpointa na końcu podejrzanego kodu, powodujemy wejście do tego kodu, gdy jesteśmy w breakpoint'cie sprawdzamy czy nasza zmienna ma wartość oznaczającą kłopoty, jeżeli nie ma, to stawiamy breakpointa w połowie kodu do przepadania [nie musi to być dokładnie połowa], wracamy do punktu wejścia [czyli do ostatniego elementu w stack trace'ie] i wykonujemy kod, który zatrzyma się w naszym brakpoint'cie, sprawdzamy wartość zmiennej, jeżeli jest taka jak przy błędzie to ustawiamy breakpoint w połowie kodu przed tym breakpointem gdzie akurat stoimy, w przeciwnym wypadku stawiamy breakpointa w połowie między aktualnym a tym poprzednio postawionym, wracamy do punktu wejścia i znowu w momencie zatrzymania sprawdzamy wartość.... w końcu [i to dość szybko] trafimy do feralnego kawałka, który powoduje problemy.

I to by było na tyle ;-)


Podobne postybeta
Niecne wykorzystanie refleksji... czyli jak poszukać tekstu w drzewie obiektów? ;-)
Sztuczki tropiciela błędów - breakpoint na sterydach ;-)
Refleksje i serializacja w Java'ie - podstawy i obalanie mitów ;-)
Sortujemy JTable gdy się da ;-)
Sztuczki tropiciela błędów, part 4

niedziela, kwietnia 06, 2008

Podwójne standardy - Tybet a Arabia Saudyjska.

Dużo się teraz mówi o Tybiecie. Fakt to co robią tam Chińczycy nie należy do najmilszych rzeczy jakie można robić, bicie, prześladowanie i mordowanie ludzi nigdy nie jest dobre.

Zapomina się jednak o tym, że to Chiny zaprowadziły w Tybecie coś bliższego demokracji, niż to co było tam wcześniej.

Tybet był państwem feudalnym, w którym ziemia należała do klasztorów i nielicznej arystokracji. Bunt w Tybecie zaczął się po tym gdy Chiny w jednej z prowincji wydzielonych z Tybetu dokonały podziału ziemi i rozdzieliły ją wśród Szerpów.
To nie spodobało się mnichom i tak wybuchło w latach 50 pierwsze powstanie, które spowodowało zaostrzenie represji chińskich i wygnanie z kraju Dalajlamy.

Zresztą teraz Dalajlamie nie chodzi też o to by w Tybecie zapanowała demokracja, a raczej by Chiny swoją potęgą nie przeszkadzały w feudalizmie. Sam w jednym z wywiadów powiedział:

"We are willing to be part of the People's Republic of China, to have it govern and guarantee to preserve our Tibetan culture, spirituality and our environment."

Co po naszemu oznacza mniej więcej:

"Chcemy być częścią Chińskiej Republiki Ludowej, po to by zarządzała i gwarantowała zachowanie naszej Tybetańskiej kultury, duchowości i naszego środowiska [społecznego]"

Mówiąc inaczej, to co robią tam Chiny to draństwo, ale mnisi nie chcą tam wcale budować demokracji, a raczej wrócić do tradycyjnego feudalizmu z wydłubywaniem oczu nieposłusznym.

Penn and Teller explain why the Dalai Lama sucks ass


Żeby było zabawniej o wiele bliżej mamy takie państwo jak Arabia Suadyjska, która jest nadal państwem feudalnym i teokratycznym. Ale jakoś nikt ich zbytnio nie próbuje bojkotować.
Skazano tam jakiś czas temu młodą kobietę na pół roku więzienia i 200 batów po tym jak została porwana i zgwałcona przez 7 mężczyzn. Dziwne? Raczej nie - za to bardzo "tradycyjne".
Kobiety są tam traktowane źle, a może nawet lepszym słowem jest nieludzko - np. za śmierć kobiety rodzina może domagać się tylko 50% odszkodowania jakie dostałaby za mężczyznę.

Nie tylko kobiety mają tam przewalone - taką np. karę śmierci można tam wymierzyć za zabójstwo, gwałt, rabunek zbrojny, przestępstwa narkotykowe, homoseksualizm i apostazję [wszystko za artykułem na Racjonalista.pl - "Podczas gdy my tankujemy, młoda kobieta jest biczowana".

Chinom daleko do zachodniej demokracji, ale chociaż są na dobrej drodze w tym kierunku i zbliżają się do niej za nasze pieniądze.
Arabia Saudyjska i inne podobne jej państwa oddalają się od demokracji i też robią to za nasze pieniądze ;-)

Swoją szosą ciekawe czy w momencie gdy Chińczycy swój ustrój z komunizmu przemianują na religię - np. maotsetungizm to nagle wszyscy krytycy przestaną się czepiać i zaczną akceptować ich praktyki.

Pewnie tak, bo takie są podwójne standardy oceny - gdy ktoś kogoś morduje i prześladuje z powodów które tłumaczy tradycją lub religią to wszystko jest OK, gdy robi to z innych powodów to źle.


Podobne postybeta
"Cywlizacja białego człowieka" - WTF?
Imigranci nas nie zaleją
Seksizm
Konsumpcjonizm - to co tworzy i toczy zachód
Raj pro-life - czyli co oznacza konstytucyjna ochrona "życia poczętego"

Złe proxy... złe... czyli jak nie należy przekombinowywać ;-)

Ha! Jak człowiek za bardzo kombinuje to zwykle przekombinuje ;-)
Pobieranie dokumentów z Google Docs w OpenOffice.org2GoogleDocs bazuje na sztuczce, ale że chciałem być za sprytny to pobieranie odbywa się poprzez HTTPS, a nie HTTP [szczerze to nawet nie jestem pewien czy można pobierać poprzez HTTP, ale to już inna sprawa ;-)], a tak się składa, że dodając obsługę serwerów proxy dodałem ją tylko dla proxy HTTP, nie HTTPS ;-) [na to w każdym bądź razie wskazują moje eksperymenty z użyciem Fiddler'a]
Oznacza to, że użytkownicy za proxy będą mogli ściągnąć listę dokumentów z Google Docs, będą mogli je wyeksportować, ale nie pobiorą ich.... No chyba, że są za proxy NTLM bo wtedy w ogóle nic nie osiągną... Ale Java jakoś tak standardowo nie potrafi współpracować z proxy NTLM...
Ciekawe jednak jest to, że z jakichś 20-30 tysięcy osób które używają tego rozszerzenia [pobrało je łącznie ze znanych mi źródeł jakieś 40 tysięcy osób] nikt nie zgłosił takiego problemu :-)


Podobne postybeta
CONNECT i tunele
NTLM działa z OpenOffice.org2GoogleDocs :-)
OpenOffice.org2GoogleDocs 1.0.4
OOo2GD 3.0.0 - eksportowanie do Google Docs bez konwersji :-)
Proxy :-)

środa, kwietnia 02, 2008

Pat Condell - Boże, pobłogosław ateizm!

Ciekawe :-)


Szczególnie spodobał mi się kawałek:

"Czym różni się doktor medycyny od doktora teologii?
Jeden przepisuje prochy, drugi jedzie na prochach."


Nie mogę się z tym nie zgodzić, zwłaszcza po tym jak przeczytałem wczoraj o apostazji Tomasza Węcławskiego, który jako teolog katolicki zajmował się Jezusem i analiza jego losów doprowadziła go do apostazji.
Chodzi o analizę życia kogoś kto miał żyć jakieś 2000 lat temu, z tym, że nie ma w 100% pewnych dowodów historycznych na jego istnienie. Istnieją tylko przekazy ludzi, którzy piszą, że słyszeli, że ktoś taki był. Do tego dochodzą ewangelie, które sugerują że pisane są przez naocznych świadków [choć powstały najwcześniej 30-35 [albo nawet 50-100] lat po ewentualnej śmierci Jezusa].

I na podstawie analizy życia Jezusa teolog postanowił dokonać apostazji [tłumacząc, że katolicyzm wypaczył przekaz Jezusa - co mogę zrozumieć, bo zakładając że Jezus żył naprawdę i był taki jak opisują go ewangelie to był naprawdę super człowiekiem [i piszę to bez ironii czy sarkazmu, każdy człowiek który w czasach gdy kobiety traktowano jako rzeczy potrafi traktować jedną z nich jako kogoś równego sobie zasługuje na szacunek, btw. w tym ujęciu Józef przy założeniu, że istniał i przyjął pod dach ciężarną Marie jawi się jako ktoś równie niezwykły [zgodnie z obyczajem powinien jej nie wpuścić pod dach, a nikt by ogólnie nie miał nic przeciwko temu żeby ją zabił, tak to się zresztą jeszcze załatwia w niektórych krajach i w kulturze zachodu mówi się wtedy o "honorowych" morderstwach], btw. taki Jezus i Józef ewidentnie nie pasują na patronów stad nienawistników którzy zgwałconą kobietę traktują jak trędowatą i uważają, że jest sama sobie winna - vide Moherów]], czyli ktoś kto był księdzem odszedł z kościoła... dla mnie jako ateisty odejście z kościoła nie byłoby problemem, ale zakładam, że ktoś kto wierzył tak mocno by zostać księdzem musiał naprawdę dużo myśleć przed takim krokiem....... ale przecież on do tego nie doszedł badając obiektywne fakty, on sobie to tak samo wymyślił jak inni teologowie to z czym on się nie zgadza. Podjął ważna z jego punktu widzenia decyzję w sprawie która uważa za prawdziwą i ważną na podstawie tego co sobie wymyślił..... On w tą stronę, ale byli i tacy teolodzy którzy kiedyś usprawiedliwiali niewolnictwo bo murzyni byli czarni, czyli bliżsi kolorem diabłom... Btw. reformacja i kontrreformacja też miały podłoże teologiczne [czyli teologia ma na sumieniu "trochę" ludzkich istnień]

Dlatego zgadzam się z tym stwierdzeniem o teologach :-)

Zgadzam się też z tym, że teologia nie powinna być wykładana na uniwersytetach [btw. ostatnimi czasy powstało nam kilka uniwersytetów poprzez połączenie Wyższych Szkół Pedagogicznych z Wyższymi Seminariami Duchownymi..... ale to tak na marginesie]


Podobne postybeta
In vitro
Ateizm to nie nihilizm i jak sprawić by prymas był apostatą ;-)
Iluminacja... czyli "Oświeciło mnie"...
Nieuki
Weekend