czwartek, kwietnia 30, 2009

Nowy Gadacz v0.2

Nowy Gadacz v0.1 nie współpracował z Nowym Gadu-Gadu w wersji 8.0.0.8344.
Działo się tak ponieważ okazało się, że istnieje 3 przypadek obsługi metody GET ;-) [Pewnikiem dla POST i innych też tak jest]

Wcześniej wiedziałem o 2 możliwych przypadkach, takim w którym w nagłówkach odpowiedzi serwer podawał rozmiar odpowiedz, albo taki w którym tego nie robił, ale informował przeglądarkę, że reszta odpowiedzi będzie w kawałkach... Okazuje się, że jest też 3 przypadek - serwer nie podaje ani rozmiaru wiadomości, ani nie mówi że będzie wysyłał wiadomość w kawałkach...

Dzięki zmianie wspierającej tą trzecią drogę Nowe Gadu-Gadu znów może gadać przy pomocy syntezatorów Expressivo i Dant. Okazało się także, że WP Spik potrafi zalogować się do Gadu-Gadu przez Nowego Gadacza :-) Nowy Gadacz nie potrafi jeszcze czytać wiadomości WP Spika [tych słanych do sieci Gadu-Gadu, o tych jabberowych na razie nie myślę] bo ten używa starszej wersji protokołu GG, ale pierwsze koty za płoty :-)

Co robić jeśli Nowy Gadacz nie gada?
1) Jeżeli to pierwsze uruchomienie to wybierz z menu swój syntezator, po czym wyłącz Nowego Gadacz i włącz go jeszcze raz. Teraz powinno gadać.
2) Czy Twoje Gadu-Gadu używa serwera proxy? Żeby to sprawdzić skorzystaj z "instrukcji"
3) A masz syntezator mowy? Wybierz z menu Nowego Gadacza syntezator którego używasz. Czy słyszysz nazwę syntezatora?

Pobierz


Podobne postybeta
Totalna beta ;-) czyli Nowy Gadacz v 0.1
Gadające Gadu-Gadu
Nowy Gadacz v0.7 - gadać czy nie gadać? ;-)
Nowy Gadacz - raport z prac
Gadacz v1.2

OpenOffice.org i inne produkty Open Source - ofiary kryzysu? ;-)

Już któryś raz z kolei czytam, że OpenOffice.org umiera, a co najmniej ma poważne kłopoty.

W ramach tworzenia OOo2GD ocieram się trochę o OpenOffice.org i nie wiem co sądzić o tych rewelacjach. Fakt, że w grupie API która najbardziej mnie interesuje widać 1, może 2 developerów [zatrudnionych zresztą w Sun'ie], ale przecież ktoś musiał napisać wersję 3.0, więc teza o braku developerów wydaje mi się podejrzana.

Jeżeli rzeczywiście jest tak źle z OO.org, to może fakt wykupienia Sun'a przez Oracle coś zmieni? Choć znając opinie o szefie Oracle to można wątpić by były to zmiany na lepsze ;-)

Czyżby to było tak, że każdy duży projekt Open Source musi mieć za sobą jakąś firmę lub organizację, która będzie pilnować produktu i która będzie płacić za jego rozwój? A jeśli tak to czy to się opłaca?
Taki np. Sun, włożył miliony dolarów w rozwój StarOffice/OpenOffice, w OpenSolaris'a, GlassFisha [serwer aplikacyjny J2EE], wydali nawet na pastwę Open Source Java'ę i stworzyli OpenJDK, kupili MySQLa, a jednak pieniędzy na tym wszystkim szczególnych nie zrobili i wykupiła ich firma skupiająca się na oprogramowaniu własnościowym.
Zresztą Sun ostatnio zachowywał się niemal jak organizacja charytatywna ;-) Stworzyli Java'ę, stworzyli specyfikację J2EE, ale pieniądze na tym biły firmy takie jak IBM [z ich WebSphere jako serwerem J2EE] oraz Bea WebLogic [wykupiona później przez Oracle, który ma teraz i WebLogica i GlassFisha], Sun za to nigdy nie zawojował rynku swoim serwerem.
Podobnie z StartOffice/OpenOffice.org. Najpierw Sun kupił niemiecką firmę tworzącą StarOffice, a później wydał cały kod jako OpenOffice.org. I zarabiały na tym inne firmy, a nie oni.

Wygląda to tak, że na rynku najlepiej mają się firmy, które może i coś robią z Open Source, ale ich główna działalność jest skupiona na oprogramowaniu własnościowym.
Tak robi np. IBM, który wśród wielu ludzi uchodzi za firmę z awangardy Open Source... może i są w awangardzie, ale trzeba pamiętać, że to raczej niewielki odłamek działalności IBM. Oni naprawdę duże pieniądze robią na całej serii produktów, które kiedyś kupili, a teraz sprzedają z zamkniętymi kodami. ClearCase, ClarQuest, FileNet, Tivoli [zawsze mam problem czy to się tak nazywa ;-) teraz też mam ten problem].

Wracając do OpenOffice.org to szkoda by go było. Co prawda Google Docs w 80% przypadków wystarcza, ale dobrze jednak mieć w domu coś bardziej desktopowego ;-)

Tak btw. Open Source, zawsze mnie jedna rzecz w Open Source trapiła. Developerzy jako tacy wolą zwykle pisać nowe ficzery, niż fixy. W firmie jak nikt się dobrowolnie nie złapie roboty to ochotnik zostanie namaszczony przez management. A w Open Source i czymś co nazwiemy sobie community developmentem, co? Jak zmusić developera by naprawił nudny błąd? ;-)

[za mało snu ostatnio i choć dopiero 0:39 to już prawie spię pisząc tego posta]


Podobne postybeta
Linux to jednak fajny jest ;-)
Google I/O 2015
Szkoda Java'y
Java wygrała ;-)
A jednak się kręci

wtorek, kwietnia 28, 2009

Totalna beta ;-) czyli Nowy Gadacz v 0.1

Update 02/05/2009:
Nowy Gadacz v0.3 - dzięki niemu przemówi Nowe Gadu-Gadu, ale i inne klienty sieci Gadu-Gadu [np. WP Spik, czy Gadu-Gadu 7.7].

Updata 30/04/2009:
Nowe Gadu-Gadu w wersji 8.0.0.8344 nie współpracuje z Nowym Gadaczem w wersji 0.1.
Nowy Gadacz w wersji 0.2 współpracuje z Nowym Gadu-Gadu 8.0.0.8344.
Więcej o Nowym Gadaczu v0.2


Właśnie przed chwilą dodałem prawie GUI do Nowego Gadacza i w myśl zasady, że nie ma nic lepszego niż wielkie testy ;-) postanowiłem go opublikować.

Jeżeli chcesz spróbować zabawy z Nowym Gadaczem to potrzebujesz:
  1. Sun Java 6.0
  2. Syntezatora Expressivo lub Dant


Nowy Gadacz współpracuje z Nowym Gadu-Gadu [wersja 8.0], powinien także współpracować z Gadu-Gadu w wersji 7.7.

Ponieważ jest to wersja całkowicie testowa to potrafi tylko czytać wiadomości wychodzące i przychodzące bez żadnego filtrowania, informowania kto do nas pisze, czy też informowania o statusach.

Aby użyć Nowego Gadacz, po pierwsze uruchom plik NowyGadacz.jar, w większości systemów z Javą wystarczy dwuklik na tym pliku, jeżeli to nie działa [czyli nie pojawiło Ci się okienko z informacją o nowym Gadaczu] to spróbuj z linii poleceń wykonać:
java -jar NowyGadacz.jar


Aby Nowy Gadacz mógł działać Gadu-Gadu musi zostać skonfigurowane tak by używać serwera Proxy, którym jest Nowy Gadacz.
Wybierz z Menu Gadu-Gadu opcję Ustawienia, a później kliknij na ostatniej tabce Proxy, i wpisz takie ustawienia jak na rysunku poniżej:



Zmiana syntezatora mowy odbywa się przez "ikonkę" Nowego Gadacza, która będzie widoczna w pasku obok zegara. Ikonka w chwili obecnej jest dużym białym kwadratem ;-)



Chętnie poznam wszelkie opinie :-)

Pobierz

Całkowicie i dokumentnie zabraniam umieszczania Nowego Gadacza gdziekolwiek, zabraniam też hotlinkowania do pliku. Można swobodnie linkować do tego postu.


Podobne postybeta
Nowy Gadacz v0.7 - gadać czy nie gadać? ;-)
Nowy Gadacz v0.2
Gadające Gadu-Gadu
Nowy Gadacz - raport z prac
Gadający Spik, Nowe Gadu-Gadu, Gadu-Gadu i co tam jeszcze - czyli Nowy Gadacz v0.3 :-)

środa, kwietnia 22, 2009

Lenię się :-)

<potok świadomości>

Straszny leń mnie dopadł.

Od niedzieli nie napisałem ani jednej nowej linijki kodu w moich prywatnych projektach. Zwykle tak miewam gdy nie mam pomysłów i natchnienia, ale teraz mam takowe :-) a i tak nie piszę.... może to z powodu spania po mniej niż 6 godzin? ;-)

Z tym snem to wina "Boso ale w ostrogach" Stanisława Grzesiuka. Czytałem to ostatni raz chyba w podstawówce [czyli jakieś 16-18 lat temu... jajx, ale ten czas leci :-)] i ostatnio mnie porwało, przez co spać w ciągu kilku ostatnich dni idę około 2:30-3:00 w nocy.

Plus, że mimo lenia udało mi się zawieźć pojazd na badania techniczne. Dostałem na 2 lata :-) teraz już tylko trzeba załatwić ubezpieczenie i zacząć machinacje z badaniami do prawa jazdy [bo 2 lata temu dostałem prawo jazdy na 2 lata ;-)]. Dzięki temu powinienem móc przez najbliższe lata jeździć samochodem ;-)

Wracając do lenia, to leń wynika trochę z lekkiego pomieszania priorytetów ;-) Z jednej strony chciałbym wypuścić mojego Nowego Gadacz, ale tutaj bruździ mi chęć utrudnienia życia złodziejom ;-) oraz organiczna niemal niechęć do walki z JNI, zresztą co do JNI to niezależnie jak powinno się to wymawiać ja stosuję jedyną prawidłową wymowę, która brzmi tak samo jak Ginny ;-)
W każdym bądź razie mam już Nowego Gadacza, który zna się z Nowym Gadu-Gadu [tudzież 8.0] i Expressivo, ale pozbawiony jest jakiejkolwiek konfiguracji i zdolności mówienia kto do nas pisze [to przez brak obsługi listy kontaktów].
Btw. w trakcie zabawy z Nowym Gadaczem odkryłem, że moja implementacja proxy HTTP nie jest idealna ;-) i taki np. WP Spik nie potrafi się przez nie połączyć z Gadu-Gadu [z Jabberem się łączy, choć nie mogę go podsłuchać bo złośliwiec używa SSL]. Tak jeszcze dodatkowo btw. to nigdy nie mogłem zrozumieć czemu tak wielu programistów podnieca się frameworkami przy jednoczesnym ignorowaniu "bebechów", np. używają Springa nie wiedząc w ogóle jak on działa, albo HTTP [to akurat protokół] bez choć minimalnego zrozumienia jak to wygląda..... IMHO puki nie potrafisz zbudować samemu requesta do serwera to nawet nie zacząłeś rozumieć jak działa HTTP. Znasz HTTP zaś dopiero wtedy gdy używając telneta potrafisz udawać przeglądarkę ;-)
Co do Nowego Gadacza to w ankiecie, którą ogłosiłem pojawiło się parę głosów za wsparciem dla AQQ [ktoś na ich forum dał linkę i trochę "zbiasowali" wyniki ;-)]. Ale wsparcia dla AQQ jak na razie nie będzie, bo AQQ nie umie używać serwerów proxy HTTP, tylko SOCKS, a na razie nie widzę powodów by pisać kolejne proxy tylko dlatego, ze jeden z komunikatorów nie potrafi używać proxy HTTP.
Jest też problem w tym, że strasznie trudno zleźć dobrą dokumentację tego jak napisać proxy. Proxy HTTP opracowałem na podstawie obserwacji rzeczywistości, a w przypadku CONNECTa przez bezczelne zajrzenie do kodu proxy napisanego w Ruby.

Drugi priorytet na mojej liście to OOo2GD w wersji dla nieszczęsnego MacOS. Czyli wersja w Java'ie 5. Pierwsza konieczna zmiana to przerobienie obsługi wielu języków. Złośliwie się składa, że pliki properties z tekstami muszą mieć znaki z UTF-8 zakodowane jako \xXXXX czy jak to się pisze. Nie jest to problem, ale trochę utrudnia życie... Druga sprawa to fakt, że na MacOS SDK do OpenOffice.org ma buga i nie potrafi zmusić OO.org do otwarcia pliku... tu powinno pomóc użycie java.lang.Runtime.exec, ale żeby to móc zrobić muszę zmusić userów do zapodania ścieżek do odpowiednich plików wykonywalnych. A to powoduje kolejne zmiany w konfiguracji ;-) Dodatkowo ponieważ chciałbym jednak by wersja dla MacOS nie była jakąś specjalną wersją, a całkiem zwyczajną to muszę powalczyć jeszcze z java.awt.Desktop, które dodano dopiero w JDK6.
A to wszystko przez to, że Apple uparło się pisać swoją Java'ę. Tak btw. to oni chyba coś dodają do plastiku z którego robią swój sprzęt bo posiadacze produktów Apple pałają jakąś manią na temat swoich produktów...
Przez to problemy z Javą na Apple mam ochotę co jakiś czas posiadaczom Maców domagającym się OOo2GD dla MacOS powiedzieć, żeby lepiej zainstalowali jakiś normalny system ;-) A to dobry objaw nie jest ;-)

Do tego wszystkiego wymyśliłem, że przeniosę moją stronę z Google Pages do Google App Engine dodając jej jeszcze inne ficzery... Np. chciałbym tam dodać edytor do tworzenia nowych wersji językowych dla OOo2GD, oraz umieścić tam docelowo miejsce gdzie OO.org sprawdza czy nie ma nowych wersji wtyczki. Mógłbym np. wtedy policzyć ile osób jeszcze używa OOo2GD. Bo jak na razie wiem tylko, że ze strony OO.org pobrana została ponad 140 tysięcy razy... [btw. gdybym od każdego pobrania dostał 10 złotych to mógłbym sobie kupić miły dom i samochód ;-), inna sprawa że tylko szaleniec zapłaciłby mi 10 złotych za wtyczkę ;-) i nawet cena w wysokości 1 złotego spowodowałaby, że te 140 tysięcy zmieniłoby się w góra 2-3 tysiące pobrań ;-), a obiektywnie rzecz ujmując koszt pracy włożonej w OOo2GD do tej pory był wyższy i wyniósł jakieś 15-20 tysięcy złotych, co oznacza że nie byłby to zbyt dochodowy biznes ;-)].

Btw. Google App Engine, to ciągle szykuję się do wznowienia prac nad moim "wspaniałym" ;-) Screen2Net [czyli projektem, który daje możliwość wrzucania screenshotów prosto do sieci przez jedno kliknięcie w programie]. Jak na razie jest ohydnie wyglądająca wersja w Pythonie, a chciałbym zrobić ładniejszą i bardziej użyteczną wersję w Java'ie.
Tak btw. ciekawe jak się ma to jakiego enigne'u się używa w Google App Engine do zużycia procesora. Czy obecne 46.30 godziny dziennie [od maja będzie to tylko koło 6 godzin dziennie] pracy CPU starczy na więcej operacji w Java'ie czy Pythonie?

</potok świadomości>


Podobne postybeta
A tak sobie ;-)
Java, JavaScript, Python, C++, C#? co ma przyszłość?
Nazwy
Refleksje i serializacja w Java'ie - podstawy i obalanie mitów ;-)
Jestem u mechanika i mi się nudzi...

piątek, kwietnia 17, 2009

Migracja z Google Pages do Google Sites zacznie się w maju.

Wchodząc na stronę http://pages.google.com gdzie ukrywa się edytor do strona hostowanych przez Google w ramach Google Pages, można u góry strony zobaczyć smutny komunikat informujący, że już wkrótce strona zostanie przeniesiona do Google Sites.



Osobiście nie cieszę się z tego manewru, co prawda strony w Google Pages nie są najlepszym i najwygodniejszym sposobem na bytność w sieci, ale Google Sites są w moim odczuciu dużo bardziej ograniczone. Na Google Pages możemy używać własnych styli CSS, własnych skryptów JavaScript i mamy dostęp do takiej wspaniałej technologia jaką jest HTML ;-) W Google Sites niestety tego nie mamy.
Mechanizm Wiki jest świetnym pomysłem, ale nie nadaje się do wszystkiego, a możliwość wzbogacania go o gadżety Google'a pomaga tylko w pewnych sprawach.

Ciekaw jestem jak będzie wyglądała moja strona po migracji ;-) Z tego co pamiętam nie używam w niej jakichś szczególnych technik, choć parę jest ;-)

Miło by było gdyby w trakcie migracji Google dodało także API do Google Sites, bo od dłuższego czasu po głowie chodzi mi przeniesienie pewnej strony na Google Sites, ale niestety na przeszkodzie stoi przeniesienie danych ;-)

Dodatkowo możliwe API do Google Sites w połączeniu z Google App Engine pozwoliłyby zapewne na stworzenie "alternatywnego" sposobu edytowania strona na Google Sites :-)


Podobne postybeta
Domena :-)
Popsuty redirect
Google Spreadsheest :-)
FeedBurner -> Google = (no title) ?
63 GB od Google ;-)

"Herbatka"

Jak to łatwo drzeć łacha ;-)

Rzeczywiście w stanach w trakcie ostatnich wyborów było tak, że za Obamą głosowali często ci, którzy wg. jego projektów zapłacą większe podatki, a przeciwko niemu ci, którzy na jego projektach zyskają.
Szczególnie zabawnie brzmi argument walki z socjalizmem [który w stanach ma dużo bardziej negatywne znaczenie niż w Europie, i oznacza niemal wersję komunizmu którą straszono chłopów w Polsce mówiąc im, że w komunistycznej Rosji wszystko jest wspólne, nawet żony] w ustach ludzi, którzy nawet wg. Polskich kryteriów są biedni, lub średnio zarabiający i którzy są beneficjentami systemu. Choć warto tu pamiętać, że w stanach w ciągu ostatnich parunastu lat wzrosła liczba ludzi deklarujących się jako klasa średnia przy jednoczesnym spadku liczebności klasy średniej wyznaczanej przez dochody, stąd często ludzie bez wykształcenia wierzą polityką ostrzegającym ich przed złymi socjalistami od Obamy, którzy chcą zabrać im pieniądze i dać je biednym [o ironio właśnie im].
Btw. inne brzydkie słowo w stanach to redystrybucja i to również w ustach ludzi, którzy są jej beneficjentami ;-)
To tak jak u nas w Polsce, ktoś kto zarabia 1500 złotych brutto i narzeka na wysokie podatki, których w ciągu roku zapłaci całe 792 złote [czyli 4,4% ;-)], jednocześnie mając pretensję, że u lekarza musi czekać a przecież płaci... 36,75 złotych miesięcznie.


Podobne postybeta
Polacy - naród paserów? ;-)
"Pewne takie niedomówienie"
Kto ile zyska?
Rozszyfrowałem w końcu znaczenie słowa "socjalizm" dla przeciętnego "libertarianina" ;-)
Największy przekręt w Polsce?

środa, kwietnia 15, 2009

Nowy Gadacz - raport z prac

Prace nad Nowym Gadaczem zostały oficjalnie rozpoczęte.
Uroczystego otwarcia placu budowy dokonało wkurzenie na złodziejstwo w sieci, wraz z pragnieniem słodkiej zemsty ;-)

Nowy Gadacz docelowo powinien pozwalać na odczytywanie wiadomości przychodzących i wychodzących, oraz informacji o zmianie statusu Nowego Gadu-Gadu, Gadu-Gadu oraz jeśli będzie to możliwe także klientów Jabbera, przy pomocy syntezatorów mowy.

Na razie wersja, którą mam w tej chwili pozwala na odczytywanie wiadomości przychodzących i wychodzących z Nowego Gadu-Gadu i Gadu-Gadu przy pomocy Expressivo, a cały Nowy Gadacz zajmuje w tej chwili raptem 13 KB po skompilowaniu ;-)
Niestety obecna wersja nie potrafi współpracować z WP Spikiem gdy ten jest klientem Gadu-Gadu :-(

Cały Nowy Gadacz składa się jak na razie z 10 klas i jak na razie pisany jest w Java'ie, w momencie gdy/jeśli zacznę doń dodawać wsparcie dla syntezatorów używających DDE zapewne będę musiał użyć JNI i C/C++ lub Delphi.

Po głowie chodzi mi też stworzenie wersji ze zintegrowanym syntezatorem opartym o FreeTTS [angielskim, choć jak by dobrze poszło to może udałoby mi się zaimportować do FreeTTS polski głos z syntezatora MBROLA - pomarzyć można :-)]

W ramach nęcenia ;-) Nowy Gadacz nie wymaga PowerGG/StrongGG. Jedynym koniecznym zabiegiem jest wskazanie w Gadu-Gadu by używało serwera proxy ;-)

Zapraszam też wszystkich do wzięcia udziału w ankiecie dotyczącej przyszłości Nowego Gadacza.


Podobne postybeta
Nowy Gadacz v0.7 - gadać czy nie gadać? ;-)
Nowy Gadacz v0.2
Gadające Gadu-Gadu
Totalna beta ;-) czyli Nowy Gadacz v 0.1
Trochę liczb :-)

piątek, kwietnia 10, 2009

Twitter

Jeśli to kogoś interesuje to od paru dni bawię się serwisem Twitter. Twitter to jak wieść niesie serwis mikroblogowy, w którym notatka nie może mieć więcej niż 140 znaków.

W większości przypadków notatki sprowadzają się podobno do rzeczy w stylu "zjadłem właśnie obiad" albo "oglądam TV". Piszę podobno bo jakoś nie natrafiłem na takowe :-)

Sam zapraszam do śledzenia mojego Twittera ;-)

Sam Twitter przypomina mi miejscami mój własny pomysł [i pewnie wielu innych osób też ;-)] który nazwać mogę linią czasu, czyli z angielska timeline.
Zawsze chciałem mieć coś gdzie odnotowywałyby się moje celowe akcje w stylu komentarzy, ale i wszystkie rzecz w stylu napisania maila, rozmowy przy pomocy komunikatora czy telefonu, otrzymane i wysłane SMSy, dokumenty nad którymi pracowałem, transakcje, kod który zmieniałem, a nawet otwierane strony i programy. Oczywiście 99% z tego musiałoby być "zamknięte" i dostępne tylko dla właściciela.
Zawsze mi się wydawało, że taka linia czasu mogłaby być przydatna, bo często pamiętam że coś kiedyś robiłem, ale nie pamiętam czy sobie to zapisałem, a jeżeli tak to gdzie :-)


Podobne postybeta
Linko skrótacze
Remindery Google Keep i ich ikonki ;-)
Plusy dodatkie i plusy ujemne, czyli co może być złego, a co dobrego w AppInventorze :-)
Flaker
Powiadomieniami w walce z uzależnienie od WhatsApp i Telegrama ;-)

Przymiarki do Nowego Gadacza

Tak w ramach informacji, której podanie może utrzyma we mnie chęć do pracy nad projektem ;-)
Robię przymiarki dla Gadacza, który będzie w stanie pracować także z Nowym Gadu-Gadu. Jeśli wszystko pójdzie dobrze to nie będzie wymagał posiadania PowerGG/StrongGG, a jedynie instalacji samego "Nowego Gadacza" i zmiany w konfiguracji Gadu-Gadu.
W chwili obecnej wszystko też wskazuje, że będzie wymagał zainstalowanej Java'y, ale to się jeszcze okaże.

Wszystko rozbija się o to czy uda mi się zaimplementować poprawnie działanie polecenia CONNECT serwera proxy ;-) Bo ewentualny "Nowy Gadacz" będzie działał jako serwer proxy, i dzięki temu powinien nadawać się dla wszystkich klientów Gadu-Gadu.

Trzymajcie więc kciuki za to, żeby mi się chciało ;-) i żeby udało mi się przeskoczyć implementację CONNECTa :-)


Podobne postybeta
Gadacz v1.2
Nowy Gadacz - raport z prac
Gadające Gadu-Gadu
Zasada drobnej przekory ;-)
Yeah! Czyżby mój zapominany projekt Echidna miał znów zacząć działać? ;-)

środa, kwietnia 08, 2009

OOo2GD 1.6.0 :-)

Po długich walkach, w których najwięcej zabrała koordynacja, a najmniej kodowanie ;-) dostępna jest wersja 1.6.0 rozszerzenia OpenOffice.org2GoogleDocs.

W tej wersji zostały dodane:
  • autokonwersja [z promptem] dokumentów w formatach nie obsługiwanych przez Google Docs i Zoho do formatów obsługiwanych,
  • tłumaczenie na chiński [w uproszczonej wersji pisma]


Poprawie powinien też ulec proces autoupdate'u wtyczki. Wcześnie nie działało to tak jak powinno ponieważ z jakichś powodów OpenOffice.org nie umiał dogadać się z serwerami Google Code gdzie przechowywana była wtyczka. Od teraz przechowywana jest na serwerach OpenOffice.org i przez to autoupdate powinien działać.

Zapraszam do pobierania


Podobne postybeta
A może by tak wsparcie dla Zoho w OpenOffice.org2GoogleDocs?
PayPal - rozczarowuje
Zombificzna BuffyPedia ;-)
Podejrzanie szybko....
Burza i HSDPA

niedziela, kwietnia 05, 2009

Seek & Click - automagicznie wykryj buttona i na niego kliknij ;-)

W ramach nic nie robienia weekendowego spróbowałem ostatnio napisać coś co pozwoliłoby na kontrolowanie IE z Java'y, tak by można było pisać jakieś proste testy naszej pracowej aplikacji w Java'ie.

Z pomocą przyszedł mi Jacob, dzięki któremu Java może operować obiektami COM/ActiveX.

Dzięki niemu linia:
ActiveXComponent misio = new ActiveXComponent("InternetExplorer.Application");
Dispatch.put(misio,"Visible",new Variant(true));

Tworzy nam połączenie między Java'ą, a kontrolką IE i powoduje pokazanie okienka IE.

Korzystając z takiego połączenia można np. załadować do naszego IE jakąś stronę:
Dispatch.call(misio, "Navigate", url);


Można pobrać obiekt document:
Dispatch document = Dispatch.get(misio,"document").toDispatch();


A używając obiektu document możemy dobrać się do elementów na stronie:
Dispatch field = Dispatch.call(document,"getElementById",id).toDispatch();


I ustawiać ich atrybuty:
Dispatch.put(field,"value",value);


Zachciało mi się jednak wprowadzania znaków nie poprzez operowanie na polach, a przez symulowanie pisania na klawiaturze [chciałem przetestować mój ficzer do autocomplet'u]. Użyłem tu sztuczki polegającej na przeniesieniu focusa do wybranego elementu, a później przesłaniu kodów klawiszy dzięki klasie java.awt.Robot:
Dispatch field = Dispatch.call(document,"getElementById",id).toDispatch();
Dispatch.call(field,"focus");
Robot robot = new Robot();
robot.setAutoDelay(50);
robot.keyPress(KeyEvent.VK_F);
robot.keyRelease(KeyEvent.VK_F);


Do szczęścia brakowało mi tylko klikania na elementy interfejsu ;-)
Miałem kilka pomysłów, ale tutaj przedstawię tylko jeden, najbardziej szalony ;-)

Z pomocą przyszła mi znowu klasa java.awt.Robot i jej metoda createScreenCapture(Rectangle).
W celu wykrycia położenia współrzędnych [w pewnych warunkach ;-)] wystarczy:
1) zniknąć element

2) zrobić zrzut ekranu
3) pojawić element

4) zrobić zrzut ekranu
5) na wszystkich pixelach obu obrazów zrobić XOR


Fakt, faktem, że taka operacja jest o tyle ryzykowna, że nie tylko nasz element może być widoczny na wynikowym obrazku ;-)
Poniżej fragment wynikowego obrazka, na którym widać wszystkie elementy ekranu, które uległy zmianie.



W tym miejscu przyznam się, że poszedłem na łatwiznę i jako położenie elementu do klikania uznałem współrzędne pierwszego widocznego elementu [patrząc od lewego górnego rogu :-)]. Do takich współrzędnych wystarczy dodać po 5 pixeli i jesteśmy w domu ;-) Możemy klikać:
robot.mouseMove(startX+5, startY+5);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);


Tak to jest jak się człowiekowi nudzi ;-)


Podobne postybeta
Mój Robot - podejście pierwsze ;-)
Sprawdź godzinę wschodu i zachodu Słońca na komórce ;-)
Bookmarklet do robienia CSV z obligacjami i ich oprocentowaniem ;-)
Motanie kodu - czyli co wynika z chęci zarządzania zadaniami
Stróż biurka ;-)

Otwarty umysł - definicja ;-)


Świetny filmik przedstawiający problem otwartego umysłu i krytycznego myślenia, który znalazłem na blogu PZ Myers'a

Btw. filmiku, czasem myślę, że dobrze by było co roku robić sobie listę swoich przekonań, tudzież wypełniać ankietę dotyczącą przekonań po to by sprawdzać jak bardzo ma się zakuty łeb ;-) i co ważniejsze by zdać sobie sprawę z tego, że to co teraz uważamy za bezsprzecznie prawdziwe, wcale nie musiało takie wg. nas być jakiś czas temu, i wcale nie musi taki być za jakiś czas.


Podobne postybeta
Chumbawamba "Charlie" - wypijmy za Darwina :-)
Początki życia wg. Shapiro ;-)
Zrobię sobie SCJP ;-)
Strona z pomocą dla OOo2GD
Studia wyższe

sobota, kwietnia 04, 2009

Internacjonalizacja

Internacjonalizacja, czy też lokalizacja oprogramowania to dość dziwna rzecz.
W założeniach prosta. Wystarczy sprawić by aplikacja pozwalała na wprowadzanie, wyświetlanie i składowanie znaków z UTF-8, oraz wyprowadzić wszystkie teksty "na zewnątrz" kodu.
W przypadku aplikacji WEB, pierwszą część można osiągnąć przez odpowiednie zdeklarowanie kodowania dokumentów, oraz przez przekonanie serwera aplikacyjnego, że to co przychodzi od klienta jest w UTF-8.
Składowanie jest trudniejsze, ale i to można przewalczyć.
Kłopoty zaczynają się w przypadku wyprowadzania na zewnątrz kodu łańcuchów tekstowych.
Podstawy są proste.
W Java'ie używamy po prostu klasy java.util.ResourceBundle, która jest na tyle miła że potrafi pobierać zasoby dla zadanych Locale'i. Nasza praca sprowadza się więc do owijania istniejących w aplikacji String'ów w wywołania metody pobierającej łańcuchy z odpowiednich zasobów. Tracimy trochę na wydajności i czytelności, możemy mieć też większe wydatki na pamięć, ale prawdziwe problemy zaczynają się później ;-)

Jeżeli aplikacja jest po angielsku i znajduje się w niej np. taki tekst:

Before uploading your ${typeOfDocument} must be converted to ${format} format (${ext}). Do you want to convert and upload your ${typeOfDocument}?

Gdzie ${typeOfDocument} będzie przyjmować wartości:
  • document
  • presentation
  • spreadsheet

Po przetłumaczeniu na chiński uproszczony nie jest źle:

在上传${typeOfDocument} 之前必须将其转换为 ${format} 格式 (${ext})。是否要转换并上传该 ${typeOfDocument}?

Ale już przy polskim zaczynają się problemy:

Przed wysłaniem twój ${typeOfDocument} musi zostać skonwertowany do formatu ${format} (${ext}). Czy chcesz skonwertować i wysłać ${typeOfDocument}?

Świetnie to zadziała dla ${typeOfDocument} ze zbioru dokument, arkusz. Dla słowa prezentacja zabrzmi to źle:

Przed wysłaniem twój prezentacja musi zostać skonwertowany do formatu ${format} (${ext}). Czy chcesz skonwertować i wysłać prezentacja?

Prezentacja jest rodzaju żeńskiego, czyli trzeba odmienić słowo twój oraz skonwertowany na ich "żeńskie" wersje.

Dodatkowo w niektórych językach istnieją jeszcze przyimki określające rodzaj, albo tak jak w angielskim mówiące o tym że dany rzeczownik jest jednym z wielu, czy szczególnym.

Najprościej w momencie gdy dochodzimy do takiej sytuacji zrefaktorować kod tak byśmy mogli użyć kilku wariantów tekstu, np. w przypadku naszych łańcuchów przedstawionych powyżej, najlepiej wprowadzić 3 oddzielne łańcuchy dla każdego z typów dokumentu.

Ale to wszystko to jeszcze mięta ;-) Prawdziwe problemy zaczynają się przy językach takich jak arabski, czyli językach pisanych od prawej do lewej. Tutaj problem nie sprowadza się tylko do walki ze słowami i ich odmianą, problemem jest dynamiczne przekształcanie interfejsu.
Pole do wprowadzenie nazwy użytkownika nie może mieć już opisu po lewej stronie, bo będzie to nieczytelne. Elementy sterujące w liście dokumentów też powinny być ułożone od lewej do prawej....
Pierwszy problem z opisami pól w formularzach nie jest trudny, wystarczy gdzie się da używać układu w którym opis pola jest umieszczony NAD polem.
Gdy się nie da, dobrze używać komponentu nad którym będziemy mogli zapanować.
Sprawa elementów nawigacji w listach jest trochę bardziej skomplikowana, możemy użyć komponentu, ale on już musi być bardziej skomplikowany ;-)

I teraz powiedzcie szczerze, czyż pisanie programów komputerowych nie jest fascynujące? :-) Algorytmy w środku, komunikacja, logika biznesowa, a do tego wszystkiego GUI, które jest elastyczne aż do bólu ;-)
A do tego wszystkiego dobrze pamiętać jeszcze o tym, że nasze aplikacje mogą być używane przez osoby niewidome, lub słabowidzące, oraz przez inne programy....

I jak w tym wszystkim nie robić błędów? ;-)


Podobne postybeta
JNI i łańcuchy ;-)
Książkowy Stack Overflow ;-)
Bio"etyka"
11. Nie będziesz używał komunikatorów innych...
Proxy :-)

czwartek, kwietnia 02, 2009

Skróty klawiszowe

Aplikacje webowe [i biurkowe też], oraz strony Internetowe robimy zwykle pod swoje upodobania i potrzeby.
Opcje w menu umieszczamy tam gdzie wydają się nam logiczne, ikonki robimy zrozumiałe dla nas samych, ogólnie jako autorzy zwykle jesteśmy też projektantami. Później to samo robią testy. Czasem do głosu dopuszcza się też kogoś od User Experience i Usability.
I zwykle wszystko ładnie działa, bo wszystkie osoby zaangażowane w projektowanie, wykonanie i testowanie mają pewną umiejętność.

Wszyscy widzimy.

Tylko, że w rzeczywistości około 0.6% ogółu ludzi na Ziemi jest niewidoma, a 2% ma problemy z widzeniem. Ich jedyny kontakt z komputerem to często praca ze screen readerem, a to oznacza że komputer próbuje opowiedzieć jak wygląda ekran aplikacji, czy strona web [dla wszystkich developerów przydatna może być wtyczka Fangs do Firefoksa, która potrafi przedstawić stronę tak jak zostanie ona opisana przez jeden z najpopularniejszych screen readerów JAWS].

Co możemy zrobić jako developerzy by choć trochę ułatwić życie ludziom, którzy Internet poznają dzięki screen readerowi? Możemy pokusić się o dodanie skrótów klawiszowych do naszej web aplikacji. Zyskają na tym także reszta użytkowników.

W tym celu używamy atrybutu accesskey, który dostępny jest dla TAGów: A, AREA, BUTTON, INPUT, LABEL, LEGEND i TEXTAREA [btw. nie mam pojęcia co to za TAG ten LEGEND].

Dodając accesskey do linka robimy to tak:
<a href="adres" accesskey="a">Treść linka</a>

Od teraz w IE kliknięcie lewy ALT-A, a w Firefoksie lewy ALT-SHIFT-A, spowoduje w IE to, że link zyska fokus, a w Fireofoksie spowoduje aktywowanie linka.
W celu sprawienia by w IE i Firefoksie accesskey działało tak samo robimy to tak:
<a href="adres" accesskey="a" onfocus="document.location.href=this.href">Treść linka</a>

Dzięki kodowi podpiętemu pod onfocus adres wskazywany przez ten link zostanie załadowany do bieżącego okna.

Czasem jednak jest tak, że na stronie mamy pewne elementy, które są odsłaniane dynamicznie przez JavaScript w momencie najechania na inny element myszką albo coś podobnego... Wtedy problemem jest to, że nawet gdy przypiszemy accesskey to nic nie zyskamy bo przeglądarka będzie ignorować accesskey póty, puki element nie będzie widoczny.
Wtedy lepszym rozwiązaniem może być stworzenie niewidocznego linka, który wywoła odpowiednią reakcję. Jeżeli tło naszej strony jest białe można zrobić to tak:
<a href="adres" accesskey="a" onfocus="document.location.href=this.href" style="position:absolute;top:0px;left:0px;z-index:-1;font-size:0pt" color="white">Treść linka</a>

Chyba trochę przydługi wstęp by "sprzedać" zainteresowanym sztuczkę, ale z drugiej strony warto.


Podobne postybeta
Lepszy test mniejszy i dokładniejszy, niż większy i ogólniejszy ;-)
Android, lokalizacja i koszty
Windows 8 - błeee, ciągle błeeee
Data binding w Polymerze jest oszukany ;-)
Nie ma to jak klawiatura ;-)

OOo2GD po chińsku :-)

Jakby ktoś był ciekaw jak wygląda OOo2GD po chińsku :-) to proszę bardzo :-)



Jest to dokładniej chiński uproszczony, i będzie dostępny w wersji 1.6.0.


Podobne postybeta
Google Translate po polsku!!!! :-)
OOo2GD 1.6.0 :-)
IT - Jaka kasa w zależności od skilla? ;-)
Internacjonalizacja
Skrócona wersja zmian w ustroju Polski po wyborach w 2015 roku