środa, stycznia 27, 2010

Mamy lepiej :-)

Dziś w trakcie rozmowy na GG ze znajomą dotarło do mnie coś bardzo oczywistego, czego większość z nas nie jest w ogóle świadoma :-)

Dziś przeciętny miłośnik książek ma przeczytane więcej książek niż większość, czy nawet najwięksi erudyci 500 lat temu!
Zapewne też większość z dzisiejszych zaawansowanych amatorów czytelniczych przeczytała więcej niż czytali specjaliści zajmujący się literaturą 100 lat temu. A już na pewno czytaliśmy więcej rodzajów książek, z bogatszym spektrum tematów i stylów!

A jeśli chodzi o aktorstwo? Największy znawca teatru w początkach XX wieku nie znał nawet połowy liczby aktorów którą widujemy w serialach widocznych w ciągu jednego tygodnia w TV.

Muzyka to samo, zwykle słyszeliśmy więcej jej rodzajów i więcej świetnych jej wykonawców niż znawcy muzyki sprzed 100 lat.

Nie uważacie, że to z jednej strony wspaniałe, a z drugiej trochę przerażające? ;-)
Bo co będzie za następne 100 lat? ;-)


Podobne postybeta
Foldery
Walentynki
Jak okiełznać MyLibrary w EEE Pad Transformerze....
A co jeśli jesteśmy jedyni?
"Harry Potter and the Deathly Hallows" - przeczytane :-)

wtorek, stycznia 26, 2010

"Ochidna" Echidna ;-) czyli jak się mają prace nad RDrive.

Tworząc RDrive aka Echidna [czyli w skrócie projekt, którego celem jest dodanie do Windows napędu R:\ pod którym dostępne będą konta w Google Docs] stosuję moje podejście, które w skrócie polega na tym, że piszę w taki sposób, że gdy jest mi coś potrzebne to to po prostu dodaję nie patrząc zbytnio na to czy aby tego już nie mam, a dopiero później gdy takich zdublowanych danych mam za dużo to zaczynam je jednoczyć.
Oznacza to, że z jednej strony pierwsze efekty mam zwykle dość szybko, ale później niejednokrotnie muszę dany kod przepisać 2 lub 3 razy po pierwsze by z wykorzystaniem nowych struktur danych mieć wszystkie potrzebne dane, które wcześniej trzymałem w różnych listach i mapach [bo także w paskudnym C# ichnie odpowiedniki List i Map są moimi ulubionymi strukturami danych ;-)] , po drugie by nie wywalić się na miejscach gdzie mam nulla ;-)
Wydaje się, że dzisiejsze zmiany doprowadziły do tego, że nowy model danych działa tak jak poprzedni, jednocześnie dostarczając środków do łatwego dodania zapisu ;-)
Oczywiście nadal mam wielką ziejącą dziurę w kodzie w miejscu gdzie dokonywać się będzie mapowanie nazw plików w systemie plików dysku R:\ a nazwami w Google Docs ;-) Mam to zaimplementowane częściowo w OOo2GD, ale jak pomyślę o męczeniu się z przenoszeniem tego kodu do C# to mi się odechciewa ;-) przyznam, że większą nawet przeszkodą niż język jest dla mnie IDE, te już prawie 5 lat pracy z Eclipsem skaziły mnie i Visual C# Express 2010 jest dla mnie zbyt ubogi :-) Jakoś to pokonam ;-)
Nadal brakuje mi możliwości logowania na konsolę w aplikacjach WinForms bo muszę przez to pamiętać o ciągłym kasowaniu pliku z logiem gdy zaczynam nową sesję testów :-)
Także sposób dostępu do pliku ReadWrite [samo Write też ;-)] mi psuje szyki... bo nie do końca wiem jak to obsłużyć, reprezentacja binarna po stronie klienta i to co zwróci serwer to nie jest zwykle to samo i nadal mam problem co w sytuacji gdy system plików dostanie polecenie Otwórz plik A, i zapisz od pozycji B tablicę bajtów C... logika każe założyć, że program nie może zakładać, że plik do którego pisze nie uległ zmianie jeżeli go zamknął, ale logika swoje, a praktyka swoje, więc trzeba będzie dojść do spójnego rozwiązania metodą prób i błędów]

Najlepsze będzie gdy już pokonam wszystkie przeszkody z implementacją tego napędu R:\, a wtedy Google wypuści swój produkt dla GDrive ;-)
Co prawda zyskam wiedzę jak się bawić w takie rzeczy, ale i tak zły będę ;-)

Btw. bawił się ktoś Lazarusem? Bo jako jedno z zadań na 2010 w pracy zobowiązałem się do sprawdzenia czy jeden z pomocniczych elementów naszego systemu da się łatwo przenieść z Windows na Linuksa, a pech chce, że akurat ten element napisany jest w Delphi ;-)

Podobne postybeta
Ha! Ochidna Echidna potrafi updatować pliki :-)
RDrive w działaniu ;-) czyli kolejny raport z prac nad Kolczatką ;-)
Tagowanie postów MLem - trzeba to przepisać ;p
Jak masz doła to nawet rozwiązanie problemu niezbyt cieszy ;-)
AI nie zabierze nam pracy - przynajmniej teraz ;-)

niedziela, stycznia 24, 2010

"Przefazowana" TV

W ciągu paru ostatnich lat taka zadziwiająca rzecz dzieje się z retoryką w sprawach związanych z religią.
Np. kiedyś w okresie Bożonarodzeniowym w TV mogliśmy usłyszeć bardzo dużo o tradycji chrześcijańskiej i katolickiej, o choince, o darach itp. Brzmiało to mniej więcej tak "Dziś wg. tradycji kościół katolicki obchodzi Wigilię" albo "Wierni gromadzą się w kościołach na pasterce". Teraz przesunięcie jest ku "Świętujemy dziś Narodziny Pańskie", z podawania faktów o tym jak święta są obchodzone telewizje przesuwają się w kierunku głoszenia prawdy objawionej.
Inny przykład, w 2005 roku gdy PKP powoływało pociąg papieski jeżdżący z Krakowa do Wadowic [który już tą trasą nie kursuje bo jednak zapotrzebowania nie było] to mówiło "Idea pociągu papieskiego to owoc kolejarskiej szczerej wdzięczności Panu Bogu za pontyfikat Jana Pawła II, a także przekonanie, że Ojciec Święty pragnie nadal być z nami tak, jakby nie istniała granica wyznaczona przez śmierć".
A jakże lepiej by to brzmiało gdyby powiedzieli po prostu "Idea pociągu papieskiego to odpowiedź na zapotrzebowanie tysięcy podróżnych, chcących poczuć bliskość z Janem Pawłem II".
W pierwszym przypadku PKP staje się głosicielem jednej prawdy objawionej, w drugim odpowiada na zapotrzebowanie rynku i klientów.

Powoli acz skutecznie religia ze sfery wiary i prywatnych przekonań włazi w przestrzeń publiczną, jednocześnie żądając dla siebie pozycji uprzywilejowanej w której nie wolno jej kwestionować i zadawać pytań bo "to nie wypada" bo to "razi czyjeś uczucia" czyli przywilejów które zarezerwowane są właśnie dla tych spraw, które są w przestrzeni prywatnej.
Bo ja nie mam nic przeciwko temu by np. PKP woziła wierzących ludzi chcących odwiedzić Wadowice, ale chcę by robiła to bo chce pomóc ludziom, bo jest zainteresowanie. Nie mam nic przeciwko temu by TV mówiła o zwyczajach wigilijnych czy tradycjach religijnych, ale niech nie przedstawia poglądów religijnych tego jako faktów.

Podobne postybeta
Jak VHDL obalił komunizm
Wojny religijne i jak ich uniknąć
In vitro
Amoralna modlitwa
Komunizma!=Faszyzm

sobota, stycznia 23, 2010

Sopelek ;-)

Prawda, że na bloku obok hodują ładnego sopelka?



Ładnie rośnie, te 5 dni temu [w niedzielę] był tak gdzieś w połowie okna, a teraz je już ładnie przerósł ;-)
Ciekawe czy ma już imię ;-)


Podobne postybeta
Wylazł był Ganimedes zza Jowisza ;-)
"Plakat"
Czciciele słońca?
Nexus 4 dopiero w drugiej połowie marca? :-(
Nowy Gadacz w Gadudodatki ;-)

czwartek, stycznia 21, 2010

"Cześć"

To tytułowe "cześć" to wiadomość którą co jakiś czas dostaję od nieznanych numerków na Gadu-Gadu :-)

Tutaj, szybki kurs dla osób które mi coś takiego wysyłają :-)

Jeśli Cię nie mam na liście to na samo "część" prawie na pewno Ci nie odpowiem. Nie wiem czy jesteś człowiekiem, czy botem, czy jeśli jesteś człowiekiem to takim, który chce mnie o coś spytać, okrzyczeć, albo po prostu pogadać. Niczego o Tobie nie wiem więc czekam na dalszy fragment rozmowy.
Możesz się przedstawić, ale nie jest to wymagane :-)
Napisz jednak od razu o co Ci chodzi.
Nie używaj "wyrazów brzydkich", jak Cię znam i lubię to możesz, ale należysz już wtedy do tej grupki która znajduje się na liście istot ludzkich ze szczególnymi prawami, czyli prawie na pewno mam Cię na liście [czyli pierwszy warunek nie jest spełniony ;-)]

Dopiero gdy spełnisz te warunki to masz szansę na moją odpowiedź :-)


Podobne postybeta
Oceny w Uberze
WTF z nasiadówkami u szeregowego posła???
Hackowanie człowieków - kiedy?
Extremal recruting ;-)
Minecraft - chyba mam za słaby komputer ;-)

RDrive w działaniu ;-) czyli kolejny raport z prac nad Kolczatką ;-)

Poniżej filmik pokazujący jak wygląda Kolczatka w działaniu :-)
Jak widać na filmie OpenOffice.org otwiera się w tym przypadku jakieś 6 sekund po kliknięciu na pliku znajdującym się na dysku R:\ utworzonym przez Kolczatkę.



Jak na razie działa:
  • pobieranie dokumentów [w chwili obecnej jako DOC, ale ODT czy RTF też będzie działać]
  • pobieranie arkuszy [w XLS, ale ODS czy CSV też zadziałają :-)]
  • pobieranie prezentacji [PPT]

Co nie działa:
  • pobieranie PDFów
  • pobieranie plików z ? i podobnymi znakami w nazwie

Problemy do rozwiązania:
  • dodać modyfikowanie nazw plików dostępnych na dysku R:\ w trakcie ich wyświetlania, czyli jeżeli dokument nazywa się w Google Docs "My Tracks" i jest arkuszem to na liście plików na dysku R:\ powinien się nazywać "My Tracks.ods" albo "My Tracks.xls"
  • dodać modyfikowanie nazw plików w taki sposób by w nazwach nie znajdowały się niedozwolone w nazwach plików znaki
  • dodać obsługę sytuacji gdy są dwa lub więcej dokumenty o takiej samej nazwie
  • dodać możliwość zapisywania dokumentów na dysku [co może być trudne ;-) bo taki OpenOffice.org sprawdza otwierając plik Buffy.odt czy ten plik można edytować i próbuje stworzyć plik .~lock.Buffy.odt# a to oznacza, że puki Google Docs List API nie będzie pozwalało na wrzucanie dowolnych plików do Google Docs, to część tych plików, np. właśnie takie locki będę musiał trzymać w pamięci i udawać, że sa zapisane na dysku ;-)]
  • dodać możliwość edycji listy kont
  • dodać możliwość konfiguracji do jakich formatów mają być konwertowane pobierane pliki
  • dodać możliwość konfiguracji literki dysku [albo raczej automagiczne przydzielanie literki]
  • dowiedzieć się jak takie coś można w ogóle dystrybuować, bo tu jest dużo DLLek :-( no i jest "malutki" problem polegajacy na tym że jak na razie używam .NET 4.0 ;p]
  • znaleźć przyczynę tego, że dysk R:\ nie działa z linią poleceń

Wszystko też wskazuje na to, że trzeba będzie zmienić nazwy katalogów ;-) i wyrzucić z nich @ bo jak teraz próbuję używać dysku R:\ przy pomocy Windows Exploratora to system wyrzuca info, że nazwa katalogu jest nieprawidłowa :-)

Plecy nadal mnie pobolewają ;-) [złe plecy!!!], i humor miałem taki sobie, ale kodowanie trochę mi go poprawiło :D.


Podobne postybeta
My Tracks mówi "budujmy więcej autostrad" ;-) albo jakoś tak ;-)
Kolczatka ;-) czyli próbujemy zastąpić Dziobaka ;-)
Raport z prac nad ubogą krewną Playtypusa, czyli Kolczatką :-)
"Ochidna" Echidna ;-) czyli jak się mają prace nad RDrive.
Status 302 i import arkuszy z Google Docs

środa, stycznia 20, 2010

Raport z prac nad ubogą krewną Playtypusa, czyli Kolczatką :-)

[OK, parę minut po opublikowaniu tego wpisu udało mi się poprawić problem z autoryzacją :-)]
Jak na razie umiem już coś odczytać z dysku R:\ [choć chwilowo nazywa się P:\ ;-)] reprezentującego konto w Google Docs :-). Gdy w Total Commanderze kliknę na dokumencie to po jakimś czasie coś otwiera się w OpenOffice.org......... problem w tym, że na razie otwiera się zawsze coś takiego:


A to nie jest do końca to o co mi chodzi ;-)
Coś widać jest nieteges z autoryzacja.

Działa to też jak na razie bardzo nieefektywnie, bo najpierw gdy system operacyjny pyta o rozmiar pliku [w listowaniu katalogów zawsze raczej będę podawał taki sam rozmiar dla wszystkich plików bo tak by to za długo trwało i było zbyt obciążające dla serwerów Google Docs] proszę Google Docs o wygenerowanie pliku z którego pobieram tylko nagłówek Content-Length, a następnie gdy zaczynam czytać plik to znów proszę Google Docs o wygenerowanie pliku i tym razem zaczynam go pobierać... Bardzo nieładne zachowanie w stosunku do Google Docs i na pewno trzeba będzie zmniejszyć ilość tych requestów.

Inna sprawa, że już widzę że zrobiłem błąd bo przechowuję sobie tylko service związany z dokumentami, a trzeba jeszcze oddzielnie dla każdego konta trzymać service związany z arkuszami. Przy okazji otwarty kod OOo2GD zdecydowanie ułatwia zabawę ;-) bo w najgorszym przypadku po prostu debuguje kod OOo2GD i patrzę co powinno być i staram się to powtórzyć w kodzie w C#......... btw. strasznie niefajne jest to, że nie mogę korzystać z Console.WriteLine() gdy mam aplikacyjkę działającą w oparciu o WinForms, przez to muszę log wrzucać do pliku.
Na razie cała moja klasa związana z obsługą systemu plików i kontaktami z Google Docs zajmuje jakieś 360 linii strasznie brzydkiego kodu ;-) Myślę, że w 600 liniach się jestem w stanie zamknąć.

Na razie widzę, że mimo wszystko ten dysk R:\ nie będzie zbyt szybki ;-) i w przypadku osób korzystających z OpenOffice.org zdecydowanie łatwiej i milej będzie używać OOo2GD [wszystko przy założeniu, że w ogóle uda mi się drania napisać].

Z głupich błędów które dziś popełniłem to np. w pętli wyszukującej dokument na podstawie nazwy pliku udało mi się wstawić kod, który co iterację odcinał pierwszą literkę nazwy pliku ;-) w końcu leciał wyjątek i wszystko się wykładało, a że ten cały system plików działa na oddzielnym wątku to nawet nie wiedziałem, że coś się złego stało.

A plecy mnie nadal bolą :-(


Podobne postybeta
RDrive w działaniu ;-) czyli kolejny raport z prac nad Kolczatką ;-)
Kolczatka ;-) czyli próbujemy zastąpić Dziobaka ;-)
Zaczynamy Sync2GDocs.... ciekawe czy skończymy ;-)
AppInventor - tego się da używać :-)
"Ochidna" Echidna ;-) czyli jak się mają prace nad RDrive.

wtorek, stycznia 19, 2010

A różne takie...

Pierwsza rzecz, tak patrząc na kłopoty z dotarciem polskich ratowników na Haiti i z kłopotami Prezydenta w wysłaniu swojej pomocy ewidentnie widać, że przydałoby się nam jako krajowi kilka poważnych samolotów transportowych. W których w razie potrzeby można by było przewieźć też parę ciężarówek. Te [chyba] 300 baniek wydawane co roku na IPN by chyba wystarczyło na zakupy.

Druga, ta cała sprawa z Google i Chinami, gdzie Google zapowiedziało, że jeżeli nie uda im się z rządem Chin dojść do porozumienia w sprawie cenzurowania wyników wyszukiwania to są w się w stanie wycofać z chińskiego rynku. Po tym jak stanowisko poparło Yahoo! dotarło do mnie, że hmm... może to wyglądać kiedyś tak, przychodzi rząd Niemiec, Polski czy Australii do Google i mówi "Tu macie listę stron, które nie maja się pojawiać w wynikach wyszukiwania", a Google na to "hmmm... Nie", na co rząd "To wam przywalimy karę", a Google na to "To my się po prostu z Waszego rynku wycofamy i tyle będziecie mieli".... i kto będzie miał problem? ;-) Czy gdyby np. Rząd Tuska doprowadził do wycofania się Google z Polski przez żądanie cenzurowania wyników wyszukiwań to czy Tusk mógłby rządzić?
Może ten ruch Google to jaskółka w walce z cenzurą na całym świecie? ;-)

Trzecia rzecz, fajna zabawka, domowe planetarium, które na suficie i ścianach rzuca wygląd nieba... pewnie nie do końca taki jak w oryginale, ale jednak pewnie podobny [oczywiście to nie jest takie prawdziwe planetarium, w którym są różne ruchome projektory pozwalające na pokazywanie wszystkich obrazów jako ruchomych, tutaj mamy "po prostu" silny halogen w nieprzezroczystej kuli na której są otworki i linie dzięki czemu światło wychodzi z kuli tylko przez te otworki i linie i widać to na ścianach [ciekawe jak jest z ostrością, choć na filmiku dostępnym na stronie wygląda to całkiem nieźle]]


Jak już sobie kupię kiedyś mieszkanie to takie coś chcę mieć ;-)

Czwarte, rewolucyjne wynalazki... to chyba jest tak, że rewolucyjne wynalazki dla większości ludzi, którzy doznają ich działania znów takie rewolucyjne nie są bo po prostu w ciągu czasu jaki upływa na adaptację tych wynalazków ludzie się po prostu przyzwyczajają. Taki komputer, w latach 80 luksus, a teraz praktycznie norma, dostęp do internetu? W 2000 roku tylko grupka go miała, a głównym środkiem dostępu był modem, a teraz co? Jest teraz chyba równie popularny jak telewizja kablowa [w KRK mam w bloku w zasięgu 12 cudzych sieci WiFi, w Wodzisławiu "tylko 2"]. A telefon komórkowy? W 1995 roku chcąc zadzwonić do kogoś trzeba było użyć telefonu i mieć nadzieję, że ten ktoś do kogo chcieliśmy dzwonić będzie w okolicach telefonu... a teraz? Jak ktoś lubi może prowadzić rozmowę telefoniczną nawet z toalety.

Piąte, tak sobie myślę, że jak głosowałaś/głosowałeś na PO bo to partia liberalna i taka cool to gratuluje pana Gowina... zresztą czy to jakiś kompleks trzeba mieć by co chwilę podkreślać jak to się nie lubi gejów i lesbijek? Ostatnio coś o propozycjach PiS o zmianach w konstytucji mówił i strasznie się podniecił zakazem "tak zwanych małżeństw homoseksualnych"....... Kiedyś wymyśliłem sobie stwierdzenie, że lepiej chyba już być gejem niż członkiem partii prawicowej, bo w takim przypadku jak się facetów nie lubi to wystarczy po prostu żyć w celibacie, a w partii prawicowej trzeba mieć obsesję na temat praktyk seksualnych gejów. Dziwne to jakieś. Jak nie rozumiem jak mężczyzna może czuć pociąg do mężczyzny [i nie, nie chodzi o "nienaturalność", to po prostu taki brak zrozumienia motywacji, tak jak nie rozumiem ludzi lubiących np. szpinak czy wierzących. Rozumiem, że są tacy ludzie, akceptuję ich istnienie i nie chcę by musieli żyć w ukryciu [chociaż ci od szpinaku to się powinni zastanowić ;-)], ale nie podzielam i nie rozumiem motywacji], to nawet nie próbuję zrozumieć logiki prawicowca.

Szóste, a wiedzieliście, że w JavaScript można użyć swojego komparatora w sortowaniu? Ja nie wiedziałem :-) Fajna sprawa, wystarczy jako parametr sort() podać funkcję która zwraca wartość numeryczną tak jak we wszystkich rozsądnych komparatorach, 0 gdy wartości są równe większe od 0 gdy pierwsza jest większa od drugiej, i mniejsze od zera gdy wartość pierwsza jest mniejsza od drugiej.

Siódme, węzeł Sośnica fajny, ale we mgle zjechanie z A4 na A1 jadąc z KRK jest trudne, mnie się udało ponad tydzień temu przejechać zjazd ;-) [już byłem na tej drodze z której się zjeżdża, ale zjazd mi umknął ;-)], ale że się uparłem wracać do domu A1 to "chwilę" dalej na zjeździe na Gliwice zawróciłem :-)
Btw. z tego co widziałem w Internecie to nawet jak wprowadzą opłaty za A1 to jakoś strasznie droga na odcinku śląskim nie będzie, do 10 groszy za 1km, czyli od Sośnicy do [jeszcze długo nie istniejącego] zjazdu w Mszanej kosztować będzie 4 złote, czyli mniej niż teraz w KRK płacę dziennie za bilety na tramwaj]

Ósme, na przeglądzie w ASO mi coś zamotali w elektryce i dopiero wczoraj zauważyłem, że mi się część "tablicy" nie podświetla [ta z pokrętłami do ogrzewania i podobnych], poprawią jak będą mi pasek rozrządu wymieniać, co odbędzie się w piątek.

Dziewiąte, głupi kręgosłup boli.. głupie strunowce, by sobie nie wyewoluowały struny, to ich potomkowie nie wyewoluowali by kręgosłupa, albo głupie małpy, które zlazły z drzew i zaczęły kretynki łazić na 2 nogach, przez co kręgosłup pracuje inaczej niż go ewolucja wcześniej konstruowała i może boleć. Głupie szafki, które wczoraj w domu zdejmowałem, bo to one mogły się przyczynić.

Dziesiąte, tak mnie kiedyś dopadło, czy w świecie Buffy, takim gdzie istnieją wampiry, istnieje ewolucja wampirów? Inaczej mówiąc, czy są jakieś mechanizmy podobne do doboru naturalnego w populacji która nie wydaje młodych, ale stare wampiry mogą wybierać kandydatów na nowe wampiry wg. jakiegoś swojego osobniczego klucza, a Pogromca eliminuje część wampirów. Czyli Pogromca to głód, chłód, ubóstwo i choroby, a "rolę" genów przejmuje jakiś proces wychowawczy, coś a'la memy..... [tak wiem, że to jest głupie pytanie, ale momentami ciekawe]

Następnych nie pamiętam, tudzież są osobiste ;-)


Podobne postybeta
Czemu nie znoszę Spidermana.... ;-)
"Skoro ludzie wyewoluowali z małp to czemu małpy nadal istnieją?"
Wybory i ordynacje
Dziura
Wysyłamy pliki do Google Docs przy pomocy Go :-)

poniedziałek, stycznia 18, 2010

Kolczatka ;-) czyli próbujemy zastąpić Dziobaka ;-)

Od paru lat chodzą słuchy o tym, że Google udostępni projekt Playtypus [czyli Dziobak :-)], który wg. plotek ma dodawać do systemów Windows dysk G:\ którego zawartość przechowywana byłaby w Google..........
Ostatnio dodano nawet do Google Docs [na razie nie wszystkie konta mają to włączone] możliwość uploadowania dowolnych plików do Google Docs....

I tak sobie pomyślałem, może w ramach nauki tego paskudnego języka [zwanego C#, czyli si szarp, to szarp to pewnie od szarp włosy z rozpaczy ;-)] spróbować sobie napisać coś związanego z Google Docs.
No i tak powstał pomysł Kolczatki [Short-beaked Echidna], która mogłaby stać się ubogą kuzynką mitycznego Dziobaka...

Na razie udało mi się dojść do etapu w którym w Windows pojawia się dodatkowy napęd R:\ z nazwą wolumenu GoogleDocsFS:


Na dysku tym dostępne są katalogi związane z ustawionymi w konfiguracji Kolczatki kontami w Google Docs [na razie konfiguracja jest zahardkodowana w źródłach ;-)]:



Wybierając katalog związany z danym kontem widzimy spis dokumentów z wybranego konta Google Docs:



To samo w Total Commander'ze:



I tu kończy się to co działa ;-) Bo na razie nie ma możliwości otwierania i zapisywania plików [ale niech tłumaczy mnie to, że jak na razie pracuję nad tym jakieś 10 godzin :-)], a jeżeli uda się dodać to pobieranie i zapisywanie plików to działać to będzie tak, że pliki z rozszerzeniami w Google Docs [np. ODT lub DOC] będą pobierane w danym formacie, zaś inne w formacie wynikającym z konfiguracji [czyli jeśli ustawimy, że chcemy jako domyślny format dokumentów tekstowych OpenOffice.org Text to pobierzemy jako ODT, jeśli Microsoft Word to DOC]. Gorzej będzie z zapisywaniem plików, bo jak na razie API Google Docs pozwala jedynie na wrzucanie plików w kilku wybranych formatach, więc pewnie w razie próby wrzucenia pliku w innym formacie dysk R:\ będzie wyrzucał jakiś błąd w stylu braku miejsca do zapisania pliku.
Problemów może się pojawić multum [już się pojawiają ;-)], ale może się uda ;-)
Choć ze względu na to, że to ten paskudny C# to już jestem zmartwiony tym jak w razie czego to draństwo dystrybuować, bo potrzebować będzie bibliotek Google Docs API i DOKAN'a [to on umożliwia dodanie własnej literki dysku ;-)].

W ramach review kilka zasad, które będą [jeżeli projekt się nie załamie bo natrafię na przeszkodę, której nie będę umiał przeszkodzić] stosowane:
  • W sytuacji gdy w Google Docs istnieje kilka dokumentów o tej samej nazwie i tym samym typie to na dysku R:\ widoczne będą w taki sposób, że kolejne dokumenty o tej nazwie będą miały nazwę kończącą się kolejnym numerkiem [czyli gdy są 3 dokumenty tekstowe CV i konfiguracja będzie mówić, że mamy używać formatu OpenOffice.org to pojawią się pliki w stylu CV.odt, CV1.odt i CV2.odt]
  • Zapisanie pliku z nazwą która już istnieje spowoduje stworzenie nowej wersji istniejącego pliku

Co się może nie udać? :-)
Wiele,
  • po pierwsze może się okazać, że nie uda mi się zmusić .NETowych bibliotek do pobierania plików [bo oficjalnie wspiera to dopiero 3 wersja API, która dostępna jest tylko dla Java'y, ale OOo2GD do niedawna używało 2 wersji API, a jakoś ten ficzer działał ;-)
  • po drugie mogę się wyłożyć na odczytywaniu plików przez "mój" system plików, na razie z niewyjaśnionych przyczyn dostaję informację, że nie mogę zapisać pliku w miejscu docelowym...
  • po trzecie może się okazać, że nie będę w stanie emulować tego dysku jako dysku o dostępie swobodnym, bo jeżeli taki OpenOffice.org czy MS Word mają zwyczaj modyfikować pliki "w kawałkach" to jest problem... [chodzi o to, że pobierając plik z Google Docs w jakimś formacie pobieram wersję binarną, teraz gdy część pliku zostanie zmodyfikowana to wyślę ją do Google Docs i w Google Docs pojawi się nowa wersja dokumentu przekonwertowana na ich wewnętrzny format, teraz znów nastąpić może zapis kolejnej porcji bajtów do pliku i pojawia się problem.... czy w takim przypadku skorzystać z trzymanej gdzieś po stronie klienta binarnej kopii dokumentu wysłanego do Google Docs, czy pobrać znów z Google Docs? Ale jeśli pobierzemy znów z Google Docs to może się okazać, że zapis do tej kopi pliku go popsuje bo to już nie będzie plik identyczny binarnie z tym wysłanym....., znowu trzymanie lokalnej kopii pliku też jest trudne bo jak będzie trzymana w pamięci to szybko może tej pamięci zabraknąć ;-) a jeśli na dysku to zawsze ktoś mi może ją skasować [OK, przed tym się mogę zabezpieczyć ;-)]]
  • po czwarte szlak mnie może trafić ze względu na C# ;-) [tak, wiem że są ludzie którzy go lubią i uważają, że jest lepszy od Java'y i w ogóle wszystkiego innego, możliwe, ale to tak jak z jedzeniem szpinaku, jedni lubią i uważają, że jest to super pokarm, a inni, np. ja nie znoszą szpinaku [no może poza zupą szpinakową], tudzież w nawiązaniu do estetyki, jedni lubią meble ze zdobieniami, inni [znów ja ;-)] lubią meble proste i bez zdobień]
A teraz coś od czego może należało zacząć? ;-) Pytanie do Was, ma w ogóle taki projekt sens? A jeśli ma sens to czy sens będzie miała np. wersja pozwalająca tylko na odczyt plików?

Na zakończenie skarga. Bolą mnie plecy i jestem przez to biedny.... głupia zakładka potargała mi dziś stronę w Superfreaconomics i jeszcze mi zimno.... niech mnie ktoś przytuli ;-)


Podobne postybeta
RDrive w działaniu ;-) czyli kolejny raport z prac nad Kolczatką ;-)
OOo2GD w liczbach ;-)
Raport z prac nad ubogą krewną Playtypusa, czyli Kolczatką :-)
Ha! Ochidna Echidna potrafi updatować pliki :-)
Jednoczesna edycja pliku.... a jakby to tak........ i nowy ePubGenerator v0.0.4

piątek, stycznia 15, 2010

Czas się uczyć!

Dyskusja pod postem o tym jakich języków wg. mnie się warto uczyć uświadomiła mi, że w ciągu ostatnich 3 lat przysiadłem na laurach jeśli chodzi o naukę programowania. Trzeba to nadrobić :-)
Java mi wystarcza i zbytnio nie przyglądam się niczemu innemu, a to błąd. Bo jedynym sposobem by w miarę dobrze pisać [lub robić cokolwiek innego ;-)] to ćwiczyć, ćwiczyć i jeszcze raz ćwiczyć!
Dlatemu na pierwszy front pójdzie C# do którego niechęć będę zwalczał pisząc w nim :-) Może nie stanie się moim ulubionym językiem, ale powinien zyskać.

W ramach zachęty proszę o podesłanie ciasteczek ;-) [wasze przeglądarki to już robią :-)]


Podobne postybeta
O tym dlaczego programista powinien mieć oczy dookoła głowy
Uczymy się... a przynajmniej próbujemy się uczyć ;-)
Windows++ ;-)
Urodzeni koderzy
Moja możliwa zemsta za zamknięcie Google+ ;-)

czwartek, stycznia 14, 2010

"CPUInfo" w Java :-)

Myślałem, że domyślne ustawienia menadżera bezpieczeństwa Java'y są bardziej restrykcyjne :-) ale z drugiej strony co złego w tym, że wiem ile procesorów ma komputer, jaka jest architektura procesora [a tak naprawdę w jakim trybie pracuje Java i przeglądarka, jeśli widzicie tam x86 to zwykłe 32 bity, jeżeli amd64 to 64 bitowy na Windows [chyba jedyną 64 bitową przeglądarką dla Windows jest IE :-)], na Linuksie w 64 bitach jest chyba x86_64 ale głowy nie dam :-)] i jak nazywa się system operacyjny?



Jakby ktoś był ciekawy to kod tego strasznie skomplikowanego apletu wygląda tak:
package pl.przemelek.cpuinfo;

import javax.swing.JApplet;
import javax.swing.JLabel;


public class CPUInfo extends JApplet {
@Override
public void init() {
super.init();
String text = "Number of processors: "+Runtime.getRuntime().availableProcessors();
text+="<br/>OS arch: "+System.getProperty("os.arch");
text+="<br/>OS name: "+System.getProperty("os.name");
this.add(new JLabel("<html><body>"+text+"</body></html>"));
}
}



Podobne postybeta
"os.arch", "os.name", "sun.arch.data.model" co to jest i co pokazuje na jakiej maszynie i OSie? ;-)
JNA, czyli w Java'ie też można :-)
"Kodowanie" na Chrome OS ;-)
JNI i łańcuchy ;-)
ToDo od Trello jako "oddzielna aplikacja"

Pytanie SVNowe :-)

Ktoś się zna na SVN? :-)

Jest sobie repozytorium, w którym na trunk'u jest katalog " ooo2gd" [cały link do repozytorium to "https://ooo2gd.googlecode.com/svn/trunk/ ooo2g"] w którym to katalogu są źródła OOo2GD i teraz idea jest taka by przenieść te źródła z katalogu " ooo2gd" bezpośrednio do trunk'a.

Jak próbuję zrobić [będąc w katalogu z trunk]:

cd " ooo2gd"
svn move *.* ..
cd ..
svn delete " ooo2gd"


To rzeczywiście w trunku mam wszystkie źródła, a katalog " ooo2gd" znika... ale wydaje się, że znika też wtedy historia [nie wiem na 100% bo nie zrobiłem jednak commita ;-)]

Jakieś rady? ;-)

[Aktualizacja 14 styczeń 2010 ;-) - takie przenoszenie działa i zachowuje historię, co można zobaczyć w repozytorium OOo2GD :-)]


Podobne postybeta
Miałem dziś sen, a w nim...
Uspokajacz
Spektroskop z płyty CD :-)
Tak Maven'ie, zbłądziłem ;-)
Gdybym miał okulary Google.... (znaczy, kiedyś będę miał ;-))

środa, stycznia 13, 2010

Me Hacker ;-)

Ha! Znalazłem dziś w pewnym portalu dziurę pozwalającą na ataki cross-scripting :-)
Jak hacker się czuję ;-)
Portal jest jak na razie w początkowej fazie rozwoju, ale może być ciekawy [choć na razie za dużo tam tematów które mnie nie interesują :-) No i żebym ja, programista Java wiedział więcej o serializacji w C# niż ludzie piszący w C#????], na 2 sposoby podesłałem im informację o tej dziurze i liczę, że jutro już tego błędu nie będzie [sam w naszej aplikacji usunąłem tego typu błąd [choć nigdy nikt go nie użył bo mógłby co najwyżej sobie samemu zaszkodzić ;-)] jedną funkcją, która przed zapisaniem do bazy i po odczytaniu z bazy danych sprawdza czy to co odczytano to String, a jeśli tak to po prostu przepuszcza ten łańcuch przez wyrażenie regularne usuwające tagi HTMLa [dla większości pól, poza pewnymi polami, które mogą przechowywać tagi] i tag <script> ze wszystkich] [tutaj mała dygresja, nie należy przesadzać z ilością nawiasów, tak jak ja przesadziłem w poprzednim mega zdaniu ;-) bo do teraz nie wiem czy wszystkie domknąłem ;-)]


Podobne postybeta
Co by zrobić żeby więcej czytać w tramwaju?
Jak zwiększyć swoje IQ?
CONNECT i tunele
Me hacker - debuger dobry
Ingress - to wciąga ;-)

poniedziałek, stycznia 11, 2010

Pythonowe formatowanie kodu ma jednak swoje zalety ;-)

W moim wpisie o tym czego wg. mnie się warto uczyć, a czego nie, krytykowałem Pythona za brzydki [wg. mnie] zwyczaj zaznaczania bloków kodu przez formatowanie.

W piątek znalazłem w kodzie błąd, który spowodowany był tym, że w Java'ie tak nie jest ;-)
Kod szedł mniej więcej tak:
for(SomeType rec: types) {
if("SomeText".equalsIgnoreCase(rec.getName()))
someTextTypeForIhread.put(Thread.currentThread(), rec.getTypeNo());
return rec.getTypeNo();
}

Nad tym kodem był warunek sprawdzający czy w mapie jest już może wartość, a jeżeli była to używana była wartość z mapy [OK, w oryginale typy były inne, klucz inny i inny tekst, a same rzeczy z kolekcji types pobierane były z bazy, ale kod mniej więcej taki sam].
Niestety ten kod działał źle ;-)
Bo intencja była taka by w razie rec.getName() byłoby równe "SomeText" to powinna wypełnić się mapa i zwrócić wartość z reg.getTypeNo().... dzięki temu w razie kolejnego wykonania [pewnego] wartość byłaby podana od razu z cache [a przypominam, że elementy types pobierane były z bazy i zabierało to dość dużo czasu] jednak w rzeczywistości zawsze zwracana była wartość rec.getTypeNo() dla pierwszego elementu w kolekcji types :-)

Co najgorsze sam zrobiłem ten błąd [dodając fragment związany z mapą] bo dałem się "oszukać" komuś piszącemu przede mną i głupio założyłem, że ponieważ kod jest sformatowany tak:
for(SomeType rec: types) {
if("SomeText".equalsIgnoreCase(rec.getName()))
return rec.getTypeNo();
}

To znaczy, że jest on kodem, który powinien wyglądać tak:
for(SomeType rec: types) {
if("SomeText".equalsIgnoreCase(rec.getName())) {
return rec.getTypeNo();
}
}


Czyli choć sam uważam, że Pythona nie opłaca się uczyć by zastąpić nim kodowanie w Java'ie czy C++, to jednak ma swoje zalety [i to prócz szybkości :-) bo w obliczeniach numerycznych bywa szybszy od C#, którego mimo wszystko polecam do nauki "na przyszłość"]


Podobne postybeta
Nie inicjalizuj rozmiaru kolekcji...
Sztuczki tropiciela błędów, part 2 ;-)
Lenistwo w działaniu, "piklujemy" Androida ;-)
GPT + Python = sprawdzanie czy 5 książka z Bobiverse już jest dostępna ;-)
Wszystkiemu winne są szybkie komputery ;-)

Plus dla Scala, minus dla Groovy ;-)

W ramach przyglądania się różnym językom zacząłem oglądać Scale i Groovy, żeby sprawdzić jak się w tym pisze małe rzeczy napisałem sobie moje "ulubione" całkowanie numeryczne [to takie moje Hello World].

W Scala wygląda tak:
  object Speed {
var N=10000
var M=1000

def calc():Double = {
var sum:Double = 0.0;
for (i <- 0 until N) {
var x:Double=20.0*i/N-10.0;
sum+=Math.pow(Math.E,-x*x)*(20.0/N);
}
return sum;
}

def main(args: Array[String]) = {
var s:Double=0;
var start:Long=System.currentTimeMillis();
for (i <- 0 until M) {
s+=calc();
}
println((System.currentTimeMillis()-start)/(M*1.0));
}
}

W Groovy tak:
N=10000;
M=1000;

def double calc() {
double sum=0;
for (i in 0..N) {
double x = 20.0*i/N-10.0;
sum+=Math.pow(Math.E, -x*x)*20.0/N;
}
return sum;
}

long start = System.currentTimeMillis();
double s = 0;
for (i in 0..M) {
s+=calc();
}
println((System.currentTimeMillis()-start)/(M*1.0));

Trudno powiedzieć która składnia jest bardziej czytelna, na pewno bardziej mi się podoba zapis pętli for w Groovy.

Jednak okazało się, że Groovy poległo na całej linii jeśli chodzi o wydajność ;-)
Scala [na JVM] potrzebowała na jedno wykonanie funkcji calc() średnio 5.15 ms, a Groovy na to samo potrzebowało aż 138.79 ms! Dla porównania Java potrzebowała 4.84 ms.

Na razie nie czuję się przekonany do żadnego z tych języków ;-) wydaje się tak na pierwszy rzut oka, że Scala jest taka jakby dojrzalsza, a Groovy choć bardziej podobne do Java'y to tak celuje w język skryptowy.


Podobne postybeta
Raspberry Pi to nie jest demon prędkości ;-)
Całkujący Dart ;-)
C# i Java okazały się szybsza od Pythona :-) [było Java okazała się szybsza od C# i Pythona]
ETA - liczymy szacowany czas zakończenia [przybycia ;-)]
Go wolniejsze od C i JavaScript, i ciut szybsze niż Java ;-) [a jednak od Java'y też wolniejsze]

środa, stycznia 06, 2010

Java, JavaScript, Python, C++, C#? co ma przyszłość?

Teraz wiadomo Java rządzi w aplikacjach Enterprise, C++ też sobie dobrze poczyna.
Ale co w przyszłości? Czego warto się uczyć?

Java
Java mimo swych zalet ma dwie wady, Swinga i to, że źródła są ciężkawe. Ten sam algorytm zakodowany w Java'ie i C++ wygląda zwykle lepiej w C++ :-)
Zmiany w Java 7, czyli np. operator czy jak to nazwać ;-) diamentowy <> powinien uczytelnić kod, jest szansa, że do języka wejdą też domknięcia czy upraszczając sprawę metody anonimowe ;-) Przydałoby się chyba jeszcze przeciążanie operatorów.
Moja rekomendacja: Jak nie znasz Java'y albo znasz tak sobie to warto się jej uczyć :-) Jeśli już znasz to pogłębiaj swoją wiedzę. Ciągle liczę, że Sun czy teraz Oracle da Java'ie kopa w górę i usprawni Swinga [bo to jest bardzo zacna biblioteka, dużo pozwala zrobić i jest ładna, ale żeby dobrze używać Swinga trzeba się z niego doktoryzować, a i tak w końcu się poddajesz i tworzysz GUI przy pomocy edytora prawie WYSIWYG [prawie bo oczywiście to, że w edytorze są takie, a nie inne wymiary wcale nie musi oznaczać, że w ostatecznym wyglądzie będzie tak samo].
Ale w zastosowaniach Enterprise Java będzie pewnie jeszcze jakiś czas królować np. dzięki bezwładności ;-) choć szybkość i przenośność też będą miały wpływ [i to większy :-)]. Java ma też to do siebie, że żeby w niej pisać trzeba być w miarę dobrym programistą [to wynik wnioskowania ;-) Ja piszę w Java'ie, ja z definicji jestem dobrym programistą ;-) czyli dobrzy programiści piszą w Java'ie ;-) [tak zdaję sobie sprawę z luk w tym rozumowaniu ;-)]]

JavaScript
JavaScipt jest wielki [mówię głównie o tym co widać z ECMAScript w przeglądarkach bo to jednak nadal jego główna emanacja ;-)], miło by było gdyby dodano do niego [i do HTMLa] parę rzeczy takich jak np. możliwość pracy na wyższym poziomie abstrakcji w GUI, coś w takim stylu, że chcę stworzyć diva z tekstem i guzikami w środku, to zamiast tworzyć np. DIV przez document.createElement użyłbym:
div = new DivElement(); div.add(new TextElement("Napis"));
button = new Button("tekst guziczka",function(){
div.style.display="none";
});
div.style.top=300;
div.style.left=300;
div.style.display="block";

Sam HTML mógłby się za to nabawić jakichś bardziej przyjaznych developerom elementów, takich jak nieśmiertelny ;-) ComboBox
Moja rekomendacja: Podobnie jak Java, na dodatek różne straszne rzeczy w stylu Flasha też używają ECMAScript ;-) Czy się to komu podoba czy nie JavaScript staje się coraz ważniejszy. Ziszcza się to czego chciałem 10 lat temu ;-) czyli przenosi się wiele działań serwera na stronę klienta, bo w końcu po co przesyłać klientowi wygląd całej strony jak można przesłać same dane, a JavaScript sobie wygeneruje zawartość strony? [z dumą podkreślę, że 10 lat temu sam na to wpadłem :-) i tak działa w dużej części BuffyPedia :-)]
Przez to JavaScript powoli acz skutecznie staje się podstawowym językiem sieci :-)

Python
Python jest fajny, ale mimo wszystko udziwniony ;-) Ja mam zawsze problem gdy w nim pisze przy użyciu notatnika czy czegoś podobnego bo strasznie dużo muszę się napisać i strasznie dużo spacji wstawić czy tabów ;-)
Toż IF z ELSE są straszne:
if number==1:
print("1");
else:
print("coś innego")

4 linijki na 1 prostego IFa to strasznie dużo ;-)
Moja rekomendacja: podpadnę pewnie, ale mimo wszystko, choć momentami jest to przyjemny język to chyba nie warto w niego inwestować zbyt wiele czasu, do WEBa wygodniej użyć np. Java'y, C# czy PHP, do aplikacji okienkowych praktycznie wszystko się lepiej nadaje, pozostają skrypty i np. proste serwerki, miło sobie to pokodować, ale czy jest to opłacalna inwestycja? Wątpię.

C++
C++ jest szybki, elegancki i piekielnie trudny. W C było prościej, w C++ to się komplikuje, szczególnie w sytuacji gdy masz pecha pisać dla MS Windows i używać musisz Microsoftowej notacji węgierskiej......... C++ zyskałby chyba BARDZO dużo gdyby ktoś go ściął w taki sposób, że zamiast 48 typów do trzymania tekstu byłby 1, no może 2 ;-)
Moja rekomendacja: Nie wiem jak wy, ale ja ciągle się chcę C++ nauczyć i to tylko z powodu "bo wypada", i takiego że gdybym chciał np. wziąć udział w pisaniu Firefoksa, OpenOffice.org czy Chrome to musiałbym użyć C++, skoro takie wspaniałe programy są pisane w C++ to ten język musi być wart nauki.

C#
C# jest ble, taki miks Java'y z Delphi, w którym pewnie dla przekory zdecydowano się zastosować inną konwencję nazewniczą i rozwalić wszystko w dziwny sposób po dziwnych bibliotekach przypisując wszystko praktycznie na stałe do jednego systemu operacyjnego [tak, wiem, jest Mono, ale ile znacie aplikacji w .NET, które działają na .NET Frameworku pod Windows i Mono pod Linuksem i wyglądają i działają tak samo?]. Jednak mimo mojej niechęci ;-) muszę przyznać, że C# się stara.
Moja rekomendacja: zagryźć zęby i się uczyć. Tak, człowiek może czuć się odrobinę brudny ;-) ale powiedzmy wprost nie ma prostszego sposobu na mały okienkowy programik niż napisać go w C#. Z jednej strony w miarę czytelny język, z drugiej WinForms, które są po prostu dobre i wygodne. Co ważne gdy umiesz napisać aplikację okienkową w WinForms to prawie natychmiast potrafisz też napisać podobną aplikację na cokolwiek z Windows Mobile [które podobno jest w odwrocie, ale to już inna historia], umiejętność korzystania z ASP.NET też łatwo wchodzi ;-)

Co tam jeszcze jest?

PHP
Moja rekomendacja: zostaw, nie warto, te 8 lat temu to było coś, ale teraz? I nie chodzi o sam język [choć obrzydliwego $ przed zmiennymi mu nie daruję ;-)], a o developerów. Każdy dzieciak, który zakodował więcej iż 100 linii w PHP go "zna", a przez to ktoś kto zna go świetnie i umie w nim czarować [podobno pierwsza wersja GMAILa czy Google Calendar była napisana w PHP] jest automatycznie klasyfikowany do grupy tych wannabe programistów.
Inna sprawa do czego go chcesz używać, przecież do zrobienia prostej stronki sklepu nie będziesz używać kolosów w stylu Java'y czy ASP.NET, zrobisz to elegancko w PHP i użyjesz MySQLa do trzymania danych. Czyli PHP tak jak chcesz robić takie rzeczy. Ja nie chcę więc dla mnie jest na nie :-)

Ruby
Moja rekomendacja: brak zdania, sam język mi się nie podoba, ale to tylko problem "estetyki" i jak będzie trzeba to się go nauczę :-) Inna sprawa, że Ruby jest z nami od 15 lat i nadal nie jest wiodącą technologią [.NET wypłynął w 2002 roku i jest już o wiele bardziej popularny], są jednak Railsy, które mają 5 czy 6 lat i coś tam zrobiły na rynku. Więc nie mam zdania, warto się przyglądać chyba ;-)

Delphi
W Delphi pisałem długo, choć przyznaję, że nieumiejętnie ;-) za dużo w tym było Turbo Pascala, a za mało Object Pascala ;-)
Moja rekomendacja: niby szybkie, niby fajne środowisko, ale chyba sam Borland w nie nie wierzył bo jak jeszcze była ich to zabili Kyliksa i nie ma wersji dla Linuksa [OK, inna sprawa, że się wtedy sam Borland przejechał na tym hypie Linuksowym, kiedy to Linux już miał wchodzić pod strzechy, tylko, że nie wszedł, i teraz nie jest w stanie gonić nawet Mac'a który ma od 4 do 8 razy większy udział w rynku desktopów] przez co jesteś uwiązany/uwiązana do Windows, co w przypadku np. softu serwerowego jest do bani. Bo w pewnym momencie staniesz przed wyborem czy porzucić swój kod i użyć czegoś bardziej przenośnego, czy pisać drugi produkt czy może udać, że poza Windows nic nie istnieje ;-) [OK, jest np. Free Pascal Compiler, czy Lazurus [który chyba jest tym samym, ale głowy nie dam ;-)] ale jakoś szczególnie popularne nie są].

Objective-C
Na Apple bez tego ani rusz. Sam język to tak na pierwszy rzut oka taki mutant z C, C++, C# i Java'y ;-)
Moja rekomendacja: chyba warto, nie znam, ale może to być źródło pewnego dochodu ;-) bo jak chcesz pisać na iPhone'a to nie masz innego wyjścia niż Objective-C [OK, są inne wyjścia, ale nie tak dobre], do tego to jest super ważny język dla MacOS'a.

VisualBasic
Koszmar, zawsze twierdziłem i twierdzę, że jeśli programista ma złe uczynki na sumieniu to po śmierci w piekle będzie programował w VisualBasic'u ;-)
Moja rekomendacja: omijać szerokim łukiem. Jeśli już chcesz to użyj C#. Swego czasu Sun próbował tworzyć [czy kilku inżynierów z Suna raczej] coś w stylu własnego VisualBasica........ na szczęście projekt chyba umarł ;-)


Podobne postybeta
HP7 bez manifestu ;-)
Najkrótsza droga do przyszłości - Polymer ;-)
Java, JavaScript, Python, C++, C#? co ma przyszłość? 7 lat później ;-)
A jednak Pythona warto ;-)
"Kodowanie" na Chrome OS ;-)

wtorek, stycznia 05, 2010

Sortujemy JTable gdy się da ;-)

Java jest świetna, Swing bywa świetny, ale czasem jest tak, że niektóre biblioteki z czasem nabierają rumieńców i otrzymają pewne przydatne rzeczy. Czasem jest tak, że użytkownik może żyć bez tych dodatkowych rzeczy, ale gdyby były one dostępne w programie to na pewno nie będzie narzekał ;-)
Jedną z takich rzeczy jest możliwość sortowania w JTable [tego komponentu używam w OOo2GD do wyświetlania listy plików w oknie importu]


Niestety możliwość ta jako standardowa funkcjonalność komponentu pojawiła się dopiero w Java 6, wcześniej by to zrobić trzeba było strasznie kombinować.
Jednak czasem pisząc program musimy celować w starszą wersję Java'y niż najnowsza, tak jest w przypadku OOo2GD, które ze względu na część MacOS'ów korzysta z Java 5... jednak większość użytkowników OOo2GD używa go z Java 6 co więc robić? :-)
Użyć sztuczki! :-)

Cały dowcip polega na tym by na systemach z Java 6 wykonać kod:
jTable1.setAutoCreateRowSorter(true);

Niestety kod OpenOffice.org2GoogleDocs kompilowany jest dla Java 5, a jak już wyżej pisałem JTable w Java 5 nie ma tej metody.

W tym miejscu pojawia się wspomniana sztuczka :-) Polega ona na tym by wywołać tą metodę setAutoCreateRowSorter(boolean) poprzez mechanizm odbić :-)
        if (System.getProperty("java.specification.version").compareTo("1.5")>0) {
try {
Method method = jTable1.getClass().getMethod("setAutoCreateRowSorter", boolean.class);
method.invoke(jTable1, true);
} catch (Exception ex) {
ex.printStackTrace();
}
}

Najpierw upewniamy się, że mamy do czynienia z wersją Java'y wyższą niż 1.5, a następnie szukamy w klasie JTable metody setAutoCreateRowSorter(boolean) by wywołać ją przy użyciu invoke(Object,Class[]) i już wszystko gotowe :-)
Oczywiście ponieważ kod związany z odbiciami może się "nie udać wykonać", bo np. Java kłamie i choć przedstawia się jako coś wyższego od 1.5 to w rzeczywistości nie oferuje odpowiedniej metody, to łapiemy wyjątek i tutaj mamy go prawo całkowicie legalnie zignorować.

Voilà :-) ot cała sztuczka :-)


Podobne postybeta
Refleksje i serializacja w Java'ie - podstawy i obalanie mitów ;-)
Sztuczki tropiciela błędów, part 2 ;-)
Sztuczki tropiciela błędów, part 4
Zinwigiluj się sam ;-)
O wojsku

poniedziałek, stycznia 04, 2010

Walka z VacLagiem - start ;-)

Przyjdzie mi dziś w nocy walczyć z JetLagiem, a właściwie to z VacLagiem ;-) [czyli przesunięciem czasowym wynikłym z późnego chodzenia spać w trakcie urlopu, który trwał ponad 3 tygodnie :-)]
Wracam z czasu odpowiadającego Azorm lub środkowemu Atlantykowi ;-)

Zwykle w trakcie urlopu spać chodziłem koło 4:30-5:30 nad ranem, a teraz wypadałoby pójść spać około 2:30...... Czyli 3 godzinny vaclag ;-)

Z innych rzeczy, jechałem dziś tym nowym odcinkiem A1 z Bełku do węzła Sośnica [trasa autostrady biegnie prawie tak jak to co tu kiedyś umieściłem], fajnie było, bo autostrada była praktycznie pusta, z naprzeciwka minąłem może 5 samochodów, a w moim kierunku widziałem 1, który był za mną, ale później gdzieś zniknął :-) Dużym plusem są ekrany dzięki którym w niektórych miejscach mogłem sobie spokojnie jechać na długich wiedząc, że nikogo jadącego z naprzeciwka nie będę oślepiał :-)


Podobne postybeta
Jak biegnie A1? :-)
Moja następna poprawka do konstytucji ;-)
A może zarwać noc?
Stand desk w walce z jetlagiem... albo byciem niewyspanym ;-)
Autostrada dowiezie mnie do domu dopiero za 2 lata :-(

niedziela, stycznia 03, 2010

OOo2GD 2.1.0 - filtrowanie, sortowanie [dla niektórych ;-)] i bardziej *nixowe nazwy

W wersji OpenOffice.org2GoogleDocs 2.1.0 trzy nowości:
  • filtrowanie w oknie importu, od teraz gdy próbujesz znaleźć swój dokument by go pobrać przy pomocy OOo2GD nie musisz długo szukać, wystarczy że znasz choć fragment nazwy pliku, który chcesz pobrać :-) [zobacz jak to działa :-)]
  • sortowanie w oknie importu [tylko jeżeli do uruchamiania OOo2GD używasz Java'y 1.6]
  • bardziej przyjazne *nixom nazwy plików konfiguracyjnych, od teraz OOo2GD będzie starało się trzymać swoją konfigurację w plikach, których nazwa zaczyna się od kropki.

Jak zwykle zapraszam do pobierania ze strony OOo2GD w repozytorium rozszerzeń OpenOffice.org lub ze strony projektu.

Od strony developerskiej w tej wersji pomagał mi Mercurial dzięki czemu o wiele łatwiej jest mi prowadzić eksperymenty :-) bo mam kontrolę wersji, a nie korzystam z centralnego repozytorium i gałęzi w nim.


Podobne postybeta
OOo2GD 1.8.1 - i znów poprawki
Linkownika mi zaczyna brakować...
Lekcja na dziś - żeby konfiguracja działała trzeba ją zapisywać i odczytywać ;-)
OOo2GD 2.1.2 i malutka poprawka :-)
Nikt już nie dba o tekstowe przeglądarki

sobota, stycznia 02, 2010

A taki sobie nowy ficzer - filtrowanie :-)

Ze się zaczął nowy rok to i nowe obowiązki ;-) i dziś musiałem poszukać tekst referatu, który kiedyś razem z kolega mieliśmy na konferencji. Myślałem, że mam go w Google Docs tylko, że w OOo2GD strasznie trudno mi go było znaleźć...
Dlatego dodałem sobie nowy ficzer ;-) czyli filtrowanie, tutaj filmik jak to teraz działa :-)


Dzięki filtrowaniu wyszukiwanie powinno być o wiele wygodniejsze. Nie jestem jeszcze pewien czy tak to będzie ostatecznie wyglądać, bo możliwe że lepiej byłoby zrobić to tak, że filtrowanie odbywałoby się w ComboBox z autosuggestem i zrobienie Enter by pobierało plik i otwierało go w OpenOffice.org.

Btw. okazało się, że dokumentu nie miałem w Google Docs, ale w standardowym miejscu które wykorzystuje w trakcie testowania OpenOffice.org2GoogleDocs czyli na dysku E:\ ;-)


Podobne postybeta
Strzeż się uses-feature
OOo2GD 2.1.0 - filtrowanie, sortowanie [dla niektórych ;-)] i bardziej *nixowe nazwy
TQM, BPEL, CVSNT i inne skróty
Funeral TV
OOo2GD 1.8.1 - i znów poprawki