czwartek, marca 30, 2006

Scriplet w służbie wygody

Od dłuższego czasu stosuje w pracy malutki scriplet do Firefoxa, który to scriplet pozwala mi na wysłanie adresu oglądanej strony na adres pocztowy.

Poniżej skrypt, który należy zmienić w scriplet:


addr=document.location.href;
addr="mailto:ktos@gdzies.pl?subject="+addr;
addr=+"&body=strona_do_zobaczenia:"+addr;
document.location.href=addr;

W celu jego „instalacji” należy utworzyć nową zakładkę o nazwie Send [lub innej, jak kto woli ;-)], a następnie w polu adresu wstawić treść scripletu. Można też przeciągnąć na pasek tą linkę :-)

Oczywiśćie adres mailowy ktos@gdzies.pl należy zmienić na własny :-)




Podobne postybeta
Kolejne zdjęcie i scriplet
EEE Storage - czyżby nie dla wszystkich?
Historia jednego #....
Korelacje
Chrome2Chrome w Chrome Web Store

Bawimy się w klasyfikacje dokumentów

W celu przetestowania mojej „teorii” semisubiektywnej klasyfikacji dokumentów, zacząłem dziś tworzyć program dokonujący właśnie takiej klasyfikacji.

Pierwszy krok mam już za sobą, mam klasy które potrafią wczytać plik i zliczyć w nim ilość słów ;-)

Pierwszym testem tych klas będzie sprawdzenie jak wygląda klasyfikacja przy pomocy wektorów, w przypadku dokumentów w języku polskim problemem może okazać się odmiana wyrazów, z tego też powodu większość testów chcę przeprowadzić z tekstami angielskimi. Podobny eksperyment przeprowadziłem półtora roku temu, ale rezultaty nie były do końca jasne.

Gdy skończę pisać program będę musiał uściślić warunki eksperymentu. Wstępnie myślę, że spróbuje na opowiadaniach, czy jak kto woli fanfic'ach ze świata Buffy i Angela. Sprawdzę czy „wektoryzacja” ;-) pozwala na rozróżnienie opowiadań w świecie Buffy i tych w świecie Angela.

Drugą częścią eksperymentów będzie próba implementacji wyszukiwania grup wyrazów, a później wzorców co jak sądzę będzie trudniejsze.

Na razie mój wzrok sięga tylko do tego momentu ;-)




Podobne postybeta
Działamy
Gdzie jest Nawiedzony Dom z książek Chmielewski? ;-)
"Semisubiektywna" klasyfikacja dokumentów ;-)
Byłem u Buffy :-)
Mini bug w Google Analytics?

środa, marca 29, 2006

Zdjęcia i Gadacz

Bawiąc się dziś Picasą znalazłem na laptopie parę zdjęć które zrobiłem moim aparatem cyfrowym (HP PhotoSmart 935). Szczególnie spodobały mi się moje nocne zdjęcia drzew.
Obok mała próbka.
Myślę, że będę musiał w końcu znów wsiąść z sobą aparat do Krakowa i spróbować kiedyś zrobić jakieś nocne zdjęcia.

Jakiś czas temu zacząłem się zastanawiać czy dodać do Gadacza obsługę syntezatora Dant. Od autora Dant'a dostałem dziś maila z informacją jak dogadać się z jego syntezatorem dlatego też sądzę, że może w weekend spróbuje dodać do Gadacza support Danta.


Podobne postybeta
Pomysł
Gadacz dla Danta
Wszystko kłamie ;-)
Telefon lepszym aparatem niż prawdziwy aparat ;-)
I znów widziałem ISS :-)

wtorek, marca 28, 2006

"Semisubiektywna" klasyfikacja dokumentów ;-)

Jakieś półtora roku temu próbowałem swoich sił w stworzeniu narzędzia, które pozwalałoby na ocenianie dokumentów wg. moich upodobań. Schemat działania przedstawiać miał się w sposób następujący, oglądam strony, czy też czytam dokumenty, które są logowane, a ja je oceniam, tudzież do oceny wykorzystywany jest czas jaki spędzam na danej stronie. W trakcie mojego zwiedzania sieci gromadzone są linki, które służą do dalszej penetracji sieci gdzie wyszukiwane są dokumenty najbardziej podobne do tych, które uzyskały najwyższą ocenę.
Po co?
Wydaje mi się, że pozwoliłoby to na wyszukiwanie stron zgodnych z moimi upodobaniami, czyli na klasyfikacje dokumentów nie tylko ze względu na treść ale również ich styl. To dość ryzykowne stwierdzenie i nie do końca zweryfikowane przez moje próby.
Teksty najłatwiej klasyfikować wg. podobieństwa mierzonego przez odległość między wektorami w przestrzeni gęstości słów. Bierzemy wszystkie słowa w korpusie, liczymy ich ilość w dokumentach, normalizujemy i otrzymujemy zbiór wektorów w przestrzeni. Każda wiązka to jedna kategoria dokumentów. Zastosowanie tego mechanizmu pozwala na klasyfikowanie tekstów, ale ocena zależy głównie od słów kluczowych dla dokumentów. Nie ma tu jeszcze słowa o ocenie subiektywnej. Do tej samej wiązki wektorów mogą należeć dokumenty, które mi się podobają i takie, które mi się nie podobają. Gęstość występowania słów nie jest tu dobrą miarą. Mój pomysł to użyć kilku metryk, po pierwsze właśnie tej wyżej opisanej czyli odległości między dokumentami, po drugie tej samej metryki dla dokumentów potraktowanych "kompresją synonimową" ;-)
Kompresja synonimowa polegać powinna na zastępowaniu słów w dokumencie ich najkrótszymi synonimami. Oczywiście prowadzić to może do absurdów, ale z drugiej strony daje nadzieje na zmniejszenie "szumów".
Trzecią metryką powinno być użycie czegoś na kształt łańcuchów markowa. Tutaj powinno to polegać na liczeniu prawdopodobieństw występowania 2 i 3 słów obok siebie oraz wzorców zbudowanych z 2-3 słów [z co najwyżej 2-3 słowami między]. Czyli szukamy w tekście najpierw zbitek 2-3 wyrazowych, i liczymy dla nich gęstość. Dopiero tych zbitek używamy do stworzenia wektorów... nie wiem czy to zadziała, musze sprawdzić po te półtora roku temu nie dotarłem do tego momentu ;-) To samo robimy na tekście potraktowanym "kompresją synonimową". Metryka dla wzorców wydaje się być trudniejsza do policzenia i nad tym musze się jeszcze zastanowić....
Później wyniki tych wszystkich metryk należy przedstawić bandzie agentów czyli prostych programików czy po prostu zestawowi współczynników i przepuścić go przez algorytm genetyczny. Rezultatem powinno być kilka agentów reagujących na teksty, które im się podobają....
Tak jest teoria, praktyka nie posunęła się jeszcze tak daleko ;-) Na razie udało mi się policzyć pierwszą metrykę i stworzyć system, który łazi po sieci śledząc linki na podstawie stron, które już zna.




Podobne postybeta
Co lubie :-)
Bawimy się w klasyfikacje dokumentów
Ekszperyment :-) czyli Podobne posty :-)
Go dla Java'owca ;-) odcinek 2 "kontenery dwa ;-)"
[lifehack] Najprostszy sposób priorytetyzacji

poniedziałek, marca 27, 2006

Klasy .NET w Java'ie....

W ramach odpoczynku darowałem sobie wczoraj eksperymenty nad ClassLoader'em dlatego dziś mam zamiar do nich znów powrócić ;-)
Zastanawiałem się też nad tym jak mógłbym zmodyfikować ClassLoader'a i w głowie pojawił mi się pomysł wykorzystania "odległego" wykonywania klas z .NET.
Jak na razie widzę jeden problem, mianowicie nie potrafiłbym zapewnić możliwości korzystania z obiektów w Java'ie obiektom z .NET, czyli współpraca byłaby raczej mikra.
Na razie spróbuje jednak podpiąć pod mojego loadera klasy wykonywane "odległe" ;-)



Podobne postybeta
Czy "Nowy" Blogger znaczy, że Blogger będzie żyć?
Budzik zagłady...
Nieznane ścieżki ClassLoader'a ;-)
Szukając parsera Java'y
Frustracja....

sobota, marca 25, 2006

Szkoła, a ja zaczynam rozumieć ClassLoader'a

Już wiem czemu mój ClassLoader nie ładował niektórych klas, chociaż program ich używał :-)
Delegowałem po prostu ładowanie klas do "rodzica" ClassLoader'a [czyli do standardowego SecureClassLoader'a], który ładując klasę ładował od razu wszystkie klasy, których ona używa.
Olśnienia doznałem na seminarium, a eksperymenty na moim ClassLoader'ze robiłem w trakcie wykładu ze "Zbiorów rozmytych" i z "Inżynierii języka naturalnego". Rzeczywiście uczelnia poszerza horyzonty ;-)
Wystarczyło zapewnić ładowanie i definiowanie klas przez mojego ClassLoader'a i od wtedy za większość działań odpowiada mój kod :-)
Na razie ograniczyłem działanie mojego kodu do ładowania definicji klas z plików .class czyli robie niemal dokładnie to samo co SecureClassLoader [z tym, że ja nie sprawdzam czy wolno ładować daną klasę].
Kolejny cel to próba podpięcia pod ClassLoader'a ładowanie klas przez sieć :-) Wiem, że to już jest napisane ale praca odtwórcza dobrze uczy :-)




Podobne postybeta
Spisek ClassLoader'ów ;-)
Wpis próbny, czyli rozproszona wirtualna maszyna Java'y
Nieznane ścieżki ClassLoader'a ;-)
Rekrutacja w czasach pandemii ;-) - a może poszerza liczbę firm?
I tak żle i tak niedobrze

piątek, marca 24, 2006

Laptop + PDA = UMPC???

W tamtym tygodniu Microsoft zaprezentował swoje Origami, czy jak postanowił je nazwać Ultra Mobile PC. W skrócie ma to być tablet wielkości książki z Windows XP Tablet Edition z minimalną rozdzielczością ekranu 800x600.
Jako użytkownik tak PDA jak i laptopów widze dla tego urządzenia nisze, ale czy dużą? Tego nie wiem. Wiem jednak czego oczekiwałbym od takiego UMPC :-)

  • Waga do 1 kg, a najlepiej nie więcej niż 0.5 kg

  • Długa praca na bateriach, powiedzmy 5 godzin

  • Możliwość zmiany orientacji ekranu

  • Wbudowane WiFi

  • Gniazdo PCMCIA [gdzieś musze używać mojego Blueconnect'a ;-)]

  • Kilka portów USB

  • Możliwość dołączenia zewnętrznej klawiatury

  • Wbudowana karta sieciowa 10/100/1000Mbit

  • GPS

I to chyba wszystko. Dodatkowe rzeczy, które by się przydały to wyjście VGA, VHS/SVHS, FireWire.
Nie jestem jednak pewien czy nawet mając UMPC zrezygnowałbym z PDA i laptopa. UMPC wydaje się świetnie pasować do plecaka, świetnie będzie można na nim czytać książki [w PDA ekran jest jednak za mały, w przypadku laptopa niewygodnie się czyta], sprawdzać pocztę, serfować po sieci, oglądać filmy czy robić większe notatki.

PDA szczególnie taki ze zintegrowanym telefonem jest bardziej poręczny gdy się poruszamy, laptop za to daje większy komfort pisania.

UMPC wpasowuje się gdzieś „między” PDA i laptopy. Jest dużo wygodniejsze w użyciu niż PDA i bardziej poręczne niż laptop. Dlatego na razie wydaje mi się, że UMPC nie zastąpi PDA i laptopów, raczej do grona gadżetów dojdzie następny ;-)




Podobne postybeta
Złapałem lenia....
Dzień z frontu ;-)
Zmusiłem Asus MyPal A636N do pracy z WiFiFoFum :-)
Nieszczęście... ale nie takie złe ;-)
Chciałbym Chromebooka

Zastój, albo dzień podróży ;-)

Moje badania w "sferze praktycznej" nie posunęły się dziś zbytnio do przodu, ale znów wróciła do mnie idea napisania całej maszyny wirtualnej w Java'ie :-)
Liczę, że mój jutrzejszy wyjazd do Gliwic na zajęcia się powiedzie, i że pojawią mi się jakieś nowe pomysły.
Za to mój PocketPC przetrwał bez ładowania przez 114.5 godziny, w trakcie których używany był przez około 2 godziny. W tym czasie pożarł aż 73% baterii. Wynika z tego, że byłby w stanie przetrwać bez ładowania baterii co najwyżej trochę ponad 156 godzin.


Podobne postybeta
Jestem lepszy od UE ;-)
Atak klas anonimowych
USB-C w iPhonie dobra rzecz :-)
Kryzys przedsenny ;-)
Pebble to zapewne przyszłość... bo mi się nie podoba ;-)

czwartek, marca 23, 2006

Frustracja....

Walczę nadal z ClassLoader'em. Wszystko wskazuje, że mój paskudny hack nie zadziała ;-)
Zagwozdka związana z tym hackiem wygląda tak, JVM woła z ClassLoader'a metodę loadClass(String,boolean), ale woła ją tylko raz... na to w każdym bądź razie wskazują moje doświadczenia. Nie rozumiem tego do końca ponieważ nawet w JavaDoc'u do loadClass(String,boolean) stoi:

Loads the class with the specified binary name. The default implementation of this method searches for classes in the following order:
1. Invoke findLoadedClass(String) to check if the class has already been loaded.
2. Invoke the loadClass method on the parent class loader. If the parent is null the class loader built-in to the virtual machine is used, instead.
3. Invoke the findClass(String) method to find the class.


Czyli mamy, że najpierw wołana jest metoda findLoadedClass(String), która to metoda zwraca definicje klasy jeżeli była ona już ładowana. Nie wprost, ale jednak sugeruje to, że loadClass(String,boolean) wołane jest za każdym razem gdy JVM żąda załadowania klasy... myślę, że będę musiał przestudiować specyfikacje JVM żeby dowiedzieć się jak to jest dokładniej :-)



Podobne postybeta
Wydało się ;-)
Sortujemy JTable gdy się da ;-)
Nieznane ścieżki ClassLoader'a ;-)
"Log porażek" ;-)
Czy LLMy umieją wnioskować? Test :-)

Jestem lepszy od UE ;-)

Dowiedziałem się przed chwilą z programu Plus Minus w TVP1, że w Unii Europejskiej przypada średnio 31 komputerów na 100 mieszkańców, w Polsce tylko 14. Policzyłem sobie więc jak wyglądam na tle statystyk ;-)
Biorąc pod uwagę, że używam na co dzień 3 komputerów:
  • Laptopa - Acer Aspire 5002LM
  • Stacjonarnego - Athlon 2000XP+ 1GB RAM
  • PocketPC - Optipad 400 Photo aka Mitac Mio 339
przewyższam średnią europejską o około 10 razy ;-), polską zaś o ponad 21 razy ;-)

Dziś moje badania nad rozproszeniem JVM przy pomocy czarów na ClassLoader'ze nie posunęły się zbyt daleko, ciągle nie mam rozwiązania dla pisania pliku ze źródłem kadłubka, nie jest to problem techniczny, a raczej wynik mojej niechęci do dłubania. Jak na razie nie widze eleganckiego sposobu na rozwiązanie tego problemu.


Podobne postybeta
Dzień z frontu ;-)
Zastój, albo dzień podróży ;-)
Kuchenka mikrofalowa
Idioci
Szkoła, a ja zaczynam rozumieć ClassLoader'a

środa, marca 22, 2006

Jadę na konferencje :-) tzn. chyba jadę ;-)

Przed chwilą dowiedziałem się, że referat który przygotowaliśmy z kolegą na konferencje Bazy danych: Aplikacje i Systemy uzyskał dobrą i bardzo dobrą recenzje. Miłe to, choć trochę zaskakujące bo nie starczyło nam czasu na pewne rzeczy, które chcieliśmy w nim jeszcze umieścić.
Teraz pojawia się problem finansowy, czyli konieczność pokrycia opłat związanych z zakwaterowaniem i wyżywieniem na konferencji. Spróbuje przekonać mojego pracodawce żeby partycypował w kosztach ;-) Chociaż tematyka konferencji nie jest bezpośrednio związana z moją pracą więc nie wiadomo czy się uda ;-)


Podobne postybeta
Konferencja
A takie tam narzekanie ;-)
Słuchowisko ;-)
Rok Darwina czas zacząć :-)
Porzucić książkę czy nie? Oto jest pytanie ;-)

wtorek, marca 21, 2006

.... ku rozproszonej JVM

Testuje właśnie moją teorie dotyczącą możliwości użycia ClassLoader'a do stworzenia rozproszonej JVM.
Na razie testy wskazują, że mogą być kłopoty.
Idea jest tak by nowy ClassLoader przy pomocy mechanizmu Reflection badał klasę i pisał jej "kadłubek".
Mamy klasę:
public class Klasa {
public toString() {
return "To jest wynik metody toString()";
}
}
ClassLoader ją bada i generuje plik Klasa.java o treści:
public class Klasa {
public toString() { ... }
}
Gdzie w miejsce ... wchodzi kod który łączy się z odległą maszyną.
Problemów może być kilka, choć w chwili obecnej najbardziej męczy mnie samo napisanie klasy ClassWriter, która będzie pisała "kadłubki", później też nie będzie lekko ;-) Na początek pojawi się problem tego czy javac pozwoli na kompilacje takich "kadłubków"... ale to problem do rozważenia gdy ClassWriter będzie działał ;-)


Podobne postybeta
Wpis próbny, czyli rozproszona wirtualna maszyna Java'y
Javozagadka ;-)
Refactoring bez testów to proszenie się o problemy ;-)
Sudoku - atak pierwszy ;-)
Spisek ClassLoader'ów ;-)

Trzęsienie ziemii i poszukiwania wiosny ;-)

Dwa dni temu, w moje urodziny ;-) dostałem prezent od geologii ;-) około 20:20 zatrzęsło w Wodzisławiu ziemią i to jak się okazuje zatrzęsło z siłą 2.9 stopni w skali Richtera.
Za to będąc dziś w pracy w chwili przerwy prowadziłem przy pomocy Gadu-Gadu poszukiwania wiosny. Wyniki nie są zbyt obiecujące... W Warszawie i Gdyni jej nie widać, a we Wrocławiu i Krakowie jakoś nieśmiało wychodzi....
Od wczoraj za to prowadze badania pod tytułem "Ile czasu wytrzyma mój PocketPC bez ładowania?". To wersja oficialna..... nieoficialnie zapomniałem wziąść z domu ładowarki ;-)

Podobne postybeta
Trzęsienie ziemi co 2-3 godziny
Minisec
Moje G1 jest "chore", zamiast 30 godzin, wytrzyma chyba 90 godzin na baterii bez ładowania ;-)
Ja i mój zegarek chcemy wiosny!
Zła zima!

poniedziałek, marca 20, 2006

Informacja źródłowa

Zawsze gdy natrafię w sieci na jakąś sensacyjną wiadomość staram się znaleźć jej potwierdzenie, używam do tego zwykle google'a... i zwykle trafiam na tą samą wiadomość napisaną czasem trochę innym językiem.
Po dłuższych poszukiwaniach udaje mi się zwykle znaleźć informację źródłową na której bazowały wszystkie inne, robiąc to wprost lub dziedzicząc po innej wiadomości.
Mamy tu do czynienia z dwoma problemami.
Pierwszy jest taki, że w czasach szybkiej informacji nikt nie ma czasu na jej weryfikację, dlatego wystarczy umieścić odpowiednio nośny temat w poczytnym miejscu i jeżeli ktoś go podchwyci to mamy pewną sensację.
Drugi, z mojego punktu widzenia ciekawszy i istotniejszy to problem znajdowania informacji źródłowej, oraz obserwacji ewolucji tej informacji. W pierwszej publikacji mamy np. stwierdzenie "X potwierdził, że rozważano możliwość interwencji", któryś z potomków tej informacji będzie zawierał już stwierdzenie "X twierdzi, że interwencja jest niemal pewna", aż w końcu gdzieś przeczytamy "X stwierdził, że interwencja jest kwestią godzin".
Zastanawia mnie czy możliwe jest opracowanie mechanizmów wyszukiwania informacji źródłowych i późniejszego śledzenia ewolucji informacji, a przez to automatycznej oceny rzetelności serwisów.

Podobne postybeta
Kody źródłowe JPC - emulatora x86 w Java'ie
Ekran co się świeci vs. matowy ekran
Nie wyłączysz światła jak padnie WiFi....
Atak kreacjonistów
Maniacki pomysł na inteligentny dialer ;-)

Wpis próbny, czyli rozproszona wirtualna maszyna Java'y

Od dłuższego czasu prześladuje mnie pomysł stworzenia rozproszonej maszyny wirtualnej Java'y, ale nie takiej od podstaw, a raczej bazującej na istniejących rozwiązaniach :-)
Wg. teorii wyglądać powinno to w taki sposób, bierzemy kilka komputerów z zainstalowanymi JVM, w każdej z nich przekształcamy ClassLoader'a w taki sposób by zamiast plików class ładował on "kadłubki" klas, które zapewniać nam będą zdalne wykonywanie na odległych maszynach. Można sobie wyobrazić, że ClassLoader będzie przy pomocy mechanizmów odbić badał oryginalną klasę i pisał dla niej "kadłubek", którego zadaniem będzie jedynie odwoływanie się do maszyny na której stworzone będą obiekty [problemem pozostaje tu to jak te obiekty powinny być obsługiwane po drugiej stronie], dodatkowo kadłubek mógłby przechowywać informacje o położeniu obiektu tak by możliwe było przenoszenie obiektów "w locie". Problemem pozostają jednak wątki, mechanizm serializacji w Java'ie nie daje możliwości zserializowania wątku i późniejsze podniesienia go.....
Na razie to pomysł i luźne przemyślenia, ale w końcu to tylko post próbny :-)

Podobne postybeta
.... ku rozproszonej JVM
Droniątko
Luźne spostrzeżenia ;-)
Łuna - luna ;-)
A jednak się kręci