poniedziałek, maja 29, 2006

Dzień z frontu ;-)

Z dobrych rzeczy, które mnie się dziś spotkały: Carpe Jugulum :-), Projektowanie obiektowe. Role, odpowiedzialność i współpraca i Język UML 2.0 w modelowaniu systemów informatycznych.
Z niemiłych: kradzież paliwa z baku, kontakt z Delphi ;-) [wiem, wiem, przesadzam ;-)]
Ta kradzież paliwa z baku nastroiła mnie niezbyt przyjaźnie do rodaków i do kraju jako takiego.
W piątek postanowiłem wrócić do programu SETI@Home, teraz realizowanego w ramach BOINC.
Na razie włączyłem do tego mój komputer stacjonarny i firmowego laptopa, niestety mój prywatny laptop ma jakieś "ale" ;-)
BOINC rozgrzewa mu procesor do 97 stopni Celsjusza i wtedy osiągnąwszy temperaturę krytyczną na CPU komputer się wyłącza ;-)
Co prawda "po drodze" czyli przy 92 stopniach powinno zostać użyte chłodzenie pasywne czyli obniżenie prędkości procesora, ale obawiam się, że ta zmiana temperatury zachodzi zbyt szybko ;-) dlatego mój Turion 64 raczej na razie nie policzy nic dla BOINC ;-)
Btw. mojego firmowego laptopa, jest to Acer Aspire 1694WLMi [chyba], Centrino 2.0GHz, 1MB RAM, 80 GB HDD, DVD-R DL, WiFi, Bluetooth, IrDA, FireWire i takie tam. W taki sposób jestem teraz posiadaczem/użytkownikiem 3 laptopów w tym 2 Acerów ;-)


Podobne postybeta
Konferencja
Chromebook vs netbook z Windows 8 ;-) - pierwsze wrażenia
Laptop + PDA = UMPC???
Laptop
Jestem lepszy od UE ;-)

niedziela, maja 28, 2006

Visual Desing Lead w staini Gooogle'a

Wiele serwisów i blogów (np. Google Operationg System i Google Blogoscoped) poinformowało dziś o fakcie przejścia Douglas Bowman'a do Google.Douglas Bowman będzie pracował w Google jako Visual Desing Lead. Jednym z dzieł Bowmana jest wygląd Blogger'a (schemat z którego korzystam to również jego dzieło).Bowman ma się zająć w Google przeprojektowaniem interfejsów części z usług Google'a takich jak GMAIL, Writely.com, Page Creator'em i innymi tak by ich wygląd był zunifikowany.Nie wiem do końca czy należy się z tego cieszyć, szczególnie jeżeli Bowman maczał palce w systemie komentarzy Blogger'a, który należy raczej do paskudnych.Czas pokaże.


Podobne postybeta
Mieszkania ;-)
Sztuka ;-)
Zrobię sobie SCJP ;-)
IE8 beta 1
Phoenix wylądował :-)

Groch z kapustą, czyli co daje mieszanie OOP z programowaniem strukturalnym

Nudziłem tutaj już kilka razy na temat programowania obiektowego i jego implementacji w C#.Od 2 tygodni mam okazje próbować w nowej pracy Delphi, którego już używałem ale niezbyt obiektowo w poprzedniej ;-)Jak na razie podstawową wadą Delphi jest dla mnie to, że pozwala na pisanie nieobiektowe.Nie chodzi tu o to że jestem jakimś szczególnym fanatykiem OOP, a raczej o to, że mamy tu do czynienia z klasycznym przypadkiem "mienia ciastka" i jednoczesnego "zjedzenia ciastka". Delphi dostarcza wszystkich środków niezbędnych do pisania obiektowego i większość użytkowników części z nich używa, ale pozostawia też furtkę do pisania nieobiektowego i niestety większość ludzi też z niej korzysta. W wyniku mamy spaghetti code, który obiektowy bywa, ale zwykle nie jest czytelny.A to prowadzi do sytuacji gdy poznanie prostego projektu zajmuje o wiele więcej czasu niż poznanie obiektowo napisanego bardziej skomplikowanego projektu.To może wydawać się mało ważne, w końcu niby wszyscy wiedzą, że kod należy komentować bo przyda się to na przyszłość, ale mało kto to robi ;-) to samo z obiektowością, przecież nic się nie stanie jak się ją trochę "nadłamie". Niestety, taka dualność w Delphi prowadzi do tego, że można tego języka używać przez lat wiele i nadal nie wiedzieć, że źle się pisze ;-)Ostatnio czytałem kod w Delphi, który napisał jakiś jak przypuszczam zaawansowany programista, kod ten służy do "dogadywania" się z wbudowanym w Windows NT mechanizmem mierzenia wydajności. Mechanizm niezbyt ładny, a kod go obsługujący również. Mamy w nim gdzieś z 7 plików i góra 15-20 klas i żeby go zrozumieć trzeba momentami przechodzić do 4 wymiaru ;-) a wszystko przez to, że kod jest poszatkowany. Raz jest bardzo obiektowy, do tego stopnia, że klasy implementują pewne interfejsy, utworzone specjalnie tylko dla tych klas, a innym razem ustawień pól w obiektach dokonują jakieś globalne procedury.Poprzednio pracowałem z kodem liczącym około 300 tysięcy linii, które znajdowały się w około 1,5 tysiącu klas i mimo skomplikowania można się było w nim chociaż "połapać" o co chodzi ;-) a wszystko przez to, że był obiektowy.Podobnie w jądrze Linuksa [tak Linuksa, a nie Linuxa, bo ta druga forma jak mi wiadomo jest niepoprawna ;-)], choć kod jest złożony to jednak możemy się w nim również "połapać" [wymaga to jednak większej wiedzy], bo tu kod mamy strukturalny.OOP i programowanie strukturalne to dwa całkiem odmienne paradygmaty. Można je oczywiście mieszać, ale zawsze przez to mieszanie stracimy na czytelności i otrzymamy właśnie groch z kapustą ;-)


Podobne postybeta
Lubię enumy
Poniedziałek, czyli "w tę"
Internacjonalizacja
Patrzajcie w kod a znajdziecie ;)
Windows 8 Preview - koszmar to za mało....

poniedziałek, maja 22, 2006

Warunki rozmyte ;-)

Pisząc poprzedniego posta przypomniałem sobie mój szalony pomysł warunków rozmytych w języku programowania ;-)
Myślałem o 2 możliwych wersjach implementacji warunków rozmytych, pierwsza polegałaby na tym, że w momencie dotarcia do warunku rozmytego program dzieliłby się na dwa nowe wątki z których każdy otrzymywałby pewne prawdopodobieństwo [zależne od parametrów warunku rozmytego ;-)] i dalej by działał już z takim ustawieniem prawdopodobieństwa.
Np. program wyglądający w taki sposób:

01: a=1;
02: b=2;
03: fuzzyif(0.7) c=a+b : c=a-b;
04: d=a*2+c;
05: fuzzyif(0.3)
06: {
07: d=d-1;
08: fuzzyif(0.7) d=d+3;
09: }

działałby tak:
na początku mielibyśmy wątek 1 o prawdopodobieństwie 1.
W linii 3 postałby wątek 2 z prawdopodobieństwem 0.3, prawdopodobieństwo wątku 1 zmieniłoby się na 0.7 i wykonałby on kod c=a+b, za to wątek 2 wykonałby kod c=a-b;
Mielibyśmy więc w linii 4 dla wątku 1 takie wartości: a=1, b=2, c=3, d=5, a dla wątku 2 a=1, b=2, c=-1, d=1
W linii 5 znów doszłoby do rozszczepienia naszych wątków, z wątku 1 o prawdopodobieństwie 0.7 powstałby nowy wątek 3 o prawdopodobieństwie 0.7*0.7, a prawdopodobieństwo wątka 1 zmieniłoby się na 0.7*0.3, wątek 2 zmieniłby swoje na 0.3*0.7, powstałby też nowy o prawdopodobieństwie 0.3*0.3 ;-)
I tak dalej i tak dalej, wyniki mojej symulacji na kartce są następujące:
wynik1: a=1, b=2, c=3, d=7, P=0.7*0.3*0.7=0.15
wynik2: a=1, b=2, c=3, d=5, P=0.7*0.7=0.49
wynik3: a=1, b=2, c=3, d=4, P=0.7*0.3*0.3=0.06
wynik4: a=1, b=2, c=-1, d=3, P=0.3*0.3*0.7=0.06
wynik5: a=1, b=2, c=-1, d=1, P=0.3*0.7=0.21
wynik6: a=1, b=2, c=-1, d=0, P=0.3*0.3*0.3=0.03



Co jeżeli uznać prawdopodobieństwa za wagi daje wyniki:
a=1, b=2, c=1.8, d=4.13.
W celu obliczenia tych wartości konieczne byłoby stworzenie 6 wątków.

Drugie podejście mogłoby polegać na tym, że w każdym fuzzyif'ie odbywałoby się losowanie i zależnie od wyniku kod zaczynałby działać w odpowiedniej ścieżce kodu ;-)

Przyznam, że zastosowanie żadnego nie widzę dla warunków rozmytych ;-) widzę nawet wielkie problemy z nimi, ale idea i tak jest zabawna.


Podobne postybeta
I tak żle i tak niedobrze
Java i liczby pierwsze, odsłona druga
Szkoła, a ja zaczynam rozumieć ClassLoader'a
Thread.stop() i "nieśmiertelne" wątki ;-)
Matematyczne podstawy zakupu skarpetek ;-)

Logika w rozwiązywaniu problemów NP-zupełnych.

Ostatnio na seminarium na studiach doktoranckich jeden z referentów [prawdę mówiąc jedyny, bo ja zawiodłem i się nie wyrobiłem ;-)] mówił o pewnym wykorzystaniu programowania w logice do rozwiązywania pewnej klasy problemów NP-zupełnych.Nie będę się zagłębiał w jego tematykę, ale jedna rzecz mnie zadziwiła.Żeby problem mógł zostać rozwiązany konieczne jest nałożenie pewnych ograniczeń, które wynikają z opisu problemu.Żeby te ograniczenia nałożyć należy je najpierw wygenerować i tu pojawia się wg. mnie problem, bo wcale nie jestem do końca przekonany czy stworzenie listy ograniczeń nie jest też problemem NP-zupełnym, a jeśli tak jest to znaczy, że cała idea użycia programowania w logice do rozwiązania problemu jest "lekko" nierozsądna.W tzw. międzyczasie pojawiło się kolejne ciekawe narzędzie od Google'a czyli Google Notebook.


Podobne postybeta
Linia poleceń rządzi!
120 km/h, czyżby nowe 140 km/h? ;-)
Zwłoki na plakatach... brrr...
Znów o rozwiązywaniu krzyżówki
Pośpiech, BuffyPedia i Cool and Quiet

środa, maja 17, 2006

Refleksja nad punktem 11

Czytając opisany we wcześniejszym poście regulamin Gadu-Gadu, a dokładniej jego punkt 11 doszedłem do ciekawych wniosków.
Fragment punktu 11 mówi [podkreślenie moje]:

"W celu wyjaśnienia wątpliwości Operator zastrzega, że użytkownik nie jest uprawniony do korzystania z usług komunikatora Gadu-Gadu w celu komunikowania się poprzez komunikator Gadu-Gadu z użytkownikami innego komunikatora internetowego, [...]"


Jako prosty człowiek o wykształceniu ścisłym rozumiem to zdanie w taki sposób:
jeżeli użytkownik korzysta z regulaminowego komunikatora do komunikacji z osobami, które używają nieregulaminowych komunikatorów to łamie regulamin.

To coś jak uznać kogoś kto miał pecha odebrać telefon wykonany z kradzionego aparatu za współwinnego kradzieży ;-)


Podobne postybeta
11. Nie będziesz używał komunikatorów innych...
Łuna - luna ;-)
Ścisłowcy vs. humaniści
PayPal - rozczarowuje
Pożycz mi swój procesor ;-)

11. Nie będziesz używał komunikatorów innych...

Właściciel sieci Gadu-Gadu postanowił zaostrzyć regulamin korzystanie z serwisu Gadu-Gadu.
Punkt 11 regulaminu ma teraz brzmienie [podkreślenie moje]:

"Korzystanie z usług komunikatora Gadu-Gadu (w szczególności komunikacja z innymi Użytkownikami komunikatora Gadu-Gadu) jest możliwe wyłącznie za pomocą rozpowszechnianego przez Operatora oprogramowania służącego do korzystania z tych usług, dostępnego na stronie internetowej http://www.gadu-gadu.pl, którego dotyczy Licencja w wersji tego oprogramowania udostępnianej przez Operatora bez jakichkolwiek modyfikacji dokonywanych przez inne osoby. Korzystanie przez Użytkownika z usług komunikatora Gadu-Gadu oraz komunikacja z innymi Użytkownikami komunikatora Gadu-Gadu za pomocą innych programów, w szczególności służących do świadczenia przez inne podmioty innych usług internetowych, w tym usług komunikatorów internetowych stanowi naruszenie postanowień niniejszego Regulaminu. W celu wyjaśnienia wątpliwości Operator zastrzega, że użytkownik nie jest uprawniony do korzystania z usług komunikatora Gadu-Gadu w celu komunikowania się poprzez komunikator Gadu-Gadu z użytkownikami innego komunikatora internetowego, ani też nie jest uprawniony do korzystania z tych usług w taki sposób, że będąc jednocześnie użytkownikiem innego komunikatora internetowego będzie korzystał z usług komunikatora Gadu-Gadu poprzez swój Numer Użytkownika komunikatora Gadu-Gadu w celu komunikacji z innymi Użytkownikami komunikatora Gadu-Gadu realizowanej w ramach infrastruktury, w tym oprogramowania takiego innego komunikatora tj. poprzez korzystanie z oprogramowania innego komunikatora. Użytkownik przyjmuje do wiadomości, że Operator nie jest stroną jakichkolwiek umów bądź porozumień z operatorami innych komunikatorów internetowych, na podstawie których tacy operatorzy byliby uprawnieni do udostępniania swoim użytkownikom funkcjonalności swoich komunikatorów naruszającej zakaz opisany w niniejszym pkt 11, zaś ewentualne faktyczne udostępnianie przez takich operatorów bez zgody Operatora wymienionej funkcjonalności użytkownikom ich usług nie zwalnia Użytkownika z odpowiedzialności za naruszenie niniejszego Regulaminu."

W regulaminie mowa o zakazie korzystania z komunikatora przy użyciu klientów z modyfikacjami dokonanymi przez inne osoby. Zastanawiam się czy PowerGG się pod to wpisuje. Samo PowerGG nie modyfikuje w żaden sposób Gadu-Gadu, wchodzi między Gadu-Gadu a system operacyjny. Jeżeli dochodzi do modyfikacji to tylko w trakcie działania, sam program nie jest w żaden sposób modyfikowany na dysku, a jedynie w pamięci. Faktem jest, że PowerProject rozprowadzany był z programem, który dokonywał modyfikacji pliku gg.exe w taki sposób by zamordować w nim możliwość wyświetlania reklam, zaznaczyć jednak trzeba, że już samo użycie takiego zmodyfikowanego programu było naruszeniem praw autorskich właścicieli Gadu-Gadu. Mała szansa by komuś udało się dowieść, że modyfikacji tych dokonywał w celu zapewnienia prawidłowego funkcjonowania programu.
Wracając jednak do legalności użycia PowerGG w świetle nowego punktu regulaminu, problem jest chyba istotniejszy.
Jeżeli operator Gadu-Gadu uzna, za łamanie regulaminu używanie Gadu-Gadu zmodyfikowanego przez PowerGG to problem ten dotknie nie tylko zwykłych użytkowników, którzy chcą sobie np. sprawdzić jakie IP mają ludzie z ich listy na GG (dzięki Inwigilatorowi), ale również w osoby słabowidzące, które używają Gadu-Gadu zmodyfikowanego przy pomocy PowerGG do używania Gadacza, dzięki któremu mają choć trochę ułatwioną pracę z komputerem.
Jeżeli takie osoby zostaną ukarane poprzez odebranie numerka to będzie to, nie bójmy się tego słowa prawdziwe świństwo ze strony operatora Gadu-Gadu.
Jeżeli kara dopadnie takich jak ja, którzy używają innych komunikatorów to inna sprawa, w końcu nikt mi nie każe korzystać z sieci Gadu-Gadu.

Rozumiem, że operator Gadu-Gadu nie prowadzi organizacji charytatywnej, że utrzymanie serwerów kosztuje, a celem firmy jest przynoszenie zysków. Dlatego nie protestuje przeciwko temu punktowi, jednak jeżeli uderzy on w osoby, które używają zmodyfikowanych klientów bo muszą to.... nie będzie ładnie.

Na pocieszenie mogę napisać, że operator Gadu-Gadu będzie miał raczej pewne problemy techniczne z wykryciem innych klientów niż oryginalny. Jedyne co mi przychodzi do głowy to porównywanie logów z adserwerów z tymi z serwerów komunikatora.


Podobne postybeta
Refleksja nad punktem 11
Półsprawny Gadacz....
Gadające Gadu-Gadu
Niezawodność
Nowy Gadacz v0.7 - gadać czy nie gadać? ;-)

niedziela, maja 14, 2006

Gadacz dla Danta

Pisałem jakiś czas temu, że chciałbym dodać do Gadacza obsługę syntezatora Dant.

Trwało to dość długo, głównie z powodu braku siły by zacząć pisać ;-)
Ale oto jest :-)



Podobne postybeta
Zdjęcia i Gadacz
Gadacz v1.2
Pomysł
OOo2GD v1.2.1
Totalna beta ;-) czyli Nowy Gadacz v 0.1

Cybernetyka w działaniu ;-)

Przymiotnik "cybernetyczny" zarezerwowany jest w języku potocznym praktycznie całkowicie dla rzeczy związanych z komputerami.
W rzeczywistości jednak cybernetyka to nauka o systemach sterowania i przetwarzania związanych z tym sterowaniem informacji.
Cybernetyka zajmuje się tak samo układami sztucznymi jak biologicznymi i społecznymi.

Praktycznie każdy z nas przeprowadził kiedyś pewien eksperyment, który można uznać za eksperyment cybernetyczny ;-)

Do przeprowadzenia tego eksperymentu [zwykle nieświadomie] potrzebujemy przedstawiciela gatunku Lepisma saccharina, czyli rybika cukrowego ;-)

Jeżeli spotkaliście kiedyś rybika na swej drodze to mogliście zauważyć takie oto zjawisko. Rybik sobie idzie, ale gdy mocniej stąpniecie, tudzież stukniecie koło niego palcem, natychmiast się zatrzymuje i wygląda jakby był martwy. Po chwili jednak znów zaczyna się poruszać, jeżeli jednak w tym momencie znów go przestraszymy to nasz mały prakrewny (rybiki żyją na Ziemi od ponad 300 mln lat) znów się zatrzyma.
Logicznym byłoby założenie, że ruszy po podobnym czasie jak poprzednio... jednak dzieje się inaczej.
Rybik stoi nadal, i jeszcze dłużej, i jeszcze.... dopiero po bardzo długim czasie zaczyna znów iść.

Dlaczego?

Nie wiem tego na pewno, ale mam teorie tego jak rybiki przetwarzają informacje :-) można rzec nawet, że mam "matematyczny" model rybika ;-)

W modelu tym nasz długowieczny obiekt badań (rybiki żyją do 8 lat!!! co może tłumaczyć czemu im się nie śpieszy ;-) gdyby człowiek na każdy centymetr wzrostu miał 8 lat życia (8 lat stąd, że rybiki mają zwykle właśnie koło 1 cm długości ;-) ) to żylibyśmy przeciętnie po 1400 lat ;-) ) opisany jest tylko przez poziom stresu.
Stres ma naturalną tendencje do opadania z czasem, a rośnie w momencie dotarcia niepokojącego impulsu z zewnątrz rybika. Rybik potrafi też chodzić, idzie gdy jest odpowiednio "wyluzowany" ;-) co możemy przetłumaczyć na niski poziom stresu. Mówiąc inaczej istnieje pewien graniczny poziom stresu powyżej którego nasze małe zwierzątko nie będzie się poruszać.

Na samym początku naszego rybika opisuje poziom stresu równy 0, mówiąc krócej mamy przed sobą okaz szczęśliwego rybika.
Gdy tupniemy, rybik otrzymuje niepokojący impuls, zależnie od siły tego impulsu zwiększa mu sie poziom stresu. Mamy w tym momencie rybika zestresowanego.
Jeżeli impuls (w naszym przypadku tupnięcie) był odpowiednio silny to poziom stresu naszego małego delikwenta mógł urosnąć do tego stopnia, że wyłączyło mu się chodzenie....
Z biegiem czasu jednak stres opada....
Gdy stres opadnie na tyle by rybik mógł znów poczuć się wyluzowanym, zaczyna znów iść...
I w tym momencie znów aplikujemy mu impulsa...
I rybik znów stoi.
Tym razem jednak poziom stresu jest dużo wyższy. Model zakłada tutaj superpozycję aktualnego stresu i docierających impulsów.
Potrzeba teraz dużo więcej czasu by rybik znów ruszył.
Szczegółowo pokazuje to wykres.



Czerwona linia to nic innego jak poziom stresu poniżej którego rybik jest wyluzowany i może się poruszać, a powyżej zamiera w bezruchu. Czarna łamana linia to poziom stresu w danym czasie. Wzrost stresu występuje w momencie gdy tupiemy.

Mając już model rybika możemy zastanowić się po co on się właściwie tak zachowuje?

Moja teoria mówi, że zatrzymując się udaje martwego, a na dodatek mniej się rzuca w oczy, przez co zwiększa szanse na to, że nie zostanie zjedzony ;-)

Oto potęga rozumu ;-) zamiast pójść spać pisze takie głupoty ;-)


Podobne postybeta
5 prawd życiowych ;-)
Pożytki z niedosypiania?
Religia w szkole
Zarodek to nie dziecko
Jak biegnie A1? :-)

sobota, maja 13, 2006

Goooogle ;-)

Pracuje właśnie nad większym psotem ;-) znaczy się postem, dlatego teraz tylko tak w ramach krótkiego wpisu.

Jak nie kochać Google'a?

Właśnie dodali Gmail Chat to innych niż angielski interfejsów, do tego dodali możliwość ustawienia awatarów [niektórzy to lubią ;-)], dodali również jakże przydatny "dzwonek" do okienka czata ;-)

Ale to nie wszystko.

Uruchomili 2 nowe usługi:
w drodze jest kolejna, czyli Google Notes.


Podobne postybeta
Android Nokia syndrome ;-)
4 małpki z trojgiem rodziców :-)
Przepowiednia ;-)
Nie taka klasa konkretna straszna....
Visual Desing Lead w staini Gooogle'a

wtorek, maja 09, 2006

Lubię enumy

Że Java jest świetnym językiem wiedziałem już od jakichś 2 lat, że Java 5.0 jest udanym rozwinięcie wiedziałem od paru miesięcy, ale wczoraj to przekonanie jeszcze we mnie urosło.

Oficjalnie stwierdzam, że kocham nowe ficzery z Java'y 5.0 :-)

Generyki są wspaniałe, varargsy również, for each także, a wczoraj naprawdę poznałem i polubiłem enumy.

Jedno z przykazań poprawnego obiektowego tworzenia aplikacji jest to by jak najrzadziej używać wartości prymitywów, a już w ogóle unikać jak ognia ich porównywania.

Teraz "mała" dygresja.

Fanatycy wydajności kręcą zwykle nosami przy tym punkcie, krzycząc o tym, że prymitywy są szybsze. Zwykle zapominają tu o jednej z zasad programowania Unix'ów, która można swobodnie przenieść do zasad programowania w ogóle, która mówi:

"Rule 1. You can't tell where a program is going to spend its time. Bottlenecks occur in surprising places, so don't try to second guess and put in a speed hack until you've proven that's where the bottleneck is."

za http://www.faqs.org/docs/artu/ch01s06.html

Porównanie prymitywów jest może i szybsze, ale zwykle zysk w prędkości nie rekompensuje problemów, które mogą powstać. Dlatego w OOP zaleca się używanie gdzie tylko się da typów złożonych, między innymi dlatego, że porównywanie jest możliwe tylko między obiektami, które znajdują się w tej samej gałęzi dziedziczenia.
Używając prymitywów możemy mieć klasę Zwierze, która ma pola rodzajPozywienia i iloscNog:

public class Zwierze
{
// Definicje możliwych rodzajów pożywienia:
public final static int FRYTKI = 0;
public final static int ZIEMNIAKI = 1;
public final static int SERKI_TOPIONE = 2;
public int rodzajPozywienia;
public int iloscNog;

[...]
};

Widać, że rodzajów pożywienia mogą być 3 rodzaje, ilość nóg może być dowolna.
Nic nas jednak poza zdrowym rozsądkiem nie powstrzymuje w tym przypadku przed porównywaniem rodzaju pożywienia z ilością nóg.
Całkiem poprawnym kodem jest więc:

if (rodzajPozywienia==iloscNog) robCos();

My wiemy, że to bez sensu ale kompilator nie.

Do tego dochodzi to, że jeżeli ktoś nam wpisze w rodzajPozywienia wartość większą niż przewidziana przez nas znów zaczynają się problemy.

W OOP dlatego powinniśmy używać gdzie się da typów złożonych. Powyższy przykład mógłby wyglądać następująco:

public class Zwierze
{
public static class RodzajPozywienia
{
private int rodzajPozywienia;
public RodzajPozywienia(int rodzajPozywienia)
{
this.rodzajPozywienia=rodzajPozywienia;
}
}
public final static RodzajPozywienia FRYTKI = new RodzajPozywienia(0);
public final static RodzajPozywienia ZIEMNIAKI = new RodzajPozywienia(1);
public final static RodzajPozywienia SERKI_TOPIONE = new RodzajPozywienia(2);

public RodzajPozywienia rodzajPozywienia;
public int iloscNog;

[...]
}

Teraz już kod:

if (rodzajPozywienia==iloscNog) robCos();

nie zostanie skompilowany.

Mamy postęp, ale ileż pisania więcej, a do tego jakoś to mało czytelne.

W tym miejscu pojawiają sie enumy :-)


public class Zwierze
{
public enum RodzajPozywienia
{
FRYTKI, ZIEMNIAKI, SERKI_TOPIONE
};

public RodzajPozywienia rodzajPozywienia;
public int iloscNog;

[...]
}


Krótko i treściwie :-)
Jeżeli jeszcze chcielibyśmy np. dodać kaloryczność pożywienia [dane wezmę z sufitu :-)] to jest to bardzo proste:

public enum RodzajPozywienia
{
FRYTKI(100.0),
ZIEMNIAKI(75.4),
SERKI_TOPIONE(302.1);

private double kalorycznosc;

private RodzajPozywienia(double kalorycznosc)
{
this.kalorycznosc=kalorycznosc;
}

public double getKalorycznosc()
{
return kalorycznosc;
}
}

Trochę się to rozciąga, ale nadal jest dość czytelne, a w enumie mamy od razu dodatkowe informacje.

Enumy wymagają chwili by się ich nauczyć i je zrozumieć, ale czas zużyty na ich poznanie jest wart "zużycia".


Podobne postybeta
Javozagadka ;-)
Cieniowanie Gourauda w JavaScript part 2 - przyśpieszamy :-)
Przepływ sterowany danymi - A takie Java'owe coś ;-)
My - Niedouczeni ;-)
Groch z kapustą, czyli co daje mieszanie OOP z programowaniem strukturalnym

niedziela, maja 07, 2006

Maj

Maj jest ciekawy.

Tak się przed chwilą zastanawiałem i w maju zawsze działo się coś ciekawego.

W tym roku (2006) w maju kupiłem samochód i zmieniam pracę.
W tamtym roku (2005) w maju zmieniłem mieszkanie.
Dwa lata temu (2004) w maju.....
Trzy lata temu (2003) w maju byłem w Taunusstein.
Cztery lata temu (2002) w okolicach maja broniłem się na studiach podyplomowych ;-)

Chyba zrobię analizę ciekawych zdarzeń i sprawdzę czy maj się jakoś wybija "na tle" ;-)


Podobne postybeta
C++
TQM, BPEL, CVSNT i inne skróty
Dart - się mnie podoba :-)
GeoTool
Podróże ;-)

O tym dlaczego programista powinien mieć oczy dookoła głowy

Podstawowe prawo Murphyego mówi:

"Jeśli coś może się zepsuć, zepsuje się na pewno"

Ja muszę chyba wprowadzić nowe prawo ;-)


"Jeśli coś wydaje się działać, to na pewno działa"

Skąd to zaskakujące prawo?
Jak wczoraj pisałem stworzyłem mój mini systemik do wyszukiwania podobnych stron WWW. Gdy pisałem wczorajszego posta wszystko działało. Kilka godzin później znalazłem błąd, który wydawał się powodować, że system działa, ale źle.

Poprawiłem go.
Nadal działało tak samo i wyniki były identyczne.

Trochę mnie to zdziwiło i dopiero teraz doszedłem gdzie jest błąd, który niwelował poprzedni ;-)

Ten przypadek pokazuje, że programując komputery nie można niczemu ufać i wszystko trzeba testować ;-)


Podobne postybeta
Czas się uczyć!
Poniedziałek, czyli "w tę"
Straż Nocna
Prosty test obiektywności dla zwolenników PiS/PO/whatever
Nowomowa

Odwiedzacze 2 ;-)

Moja głowa w wątku tła "liczy" i stara się wykoncypować lepsze metody do klasyfikacji tekstów, a ja zajmuje się głupotami, oto jedna z nich :-)

Kolaż słowny związany z odwiedzaczami ;-)

Tupac Amaru [ale nie ten] ;-), inali, f.h. meisel, chorzów, white, bebu, aksel, elemele, motorola, julia, lilah, chomik, gery, siostra


Jeśli ktoś się znajdzie i uzna za stosowne to może pozostawić ślad ;-)


Podobne postybeta
DisplayPort.... za jakie grzechy?
Problem języka
Universal Studios i Hollywood ;-)
Google Analytics i odwiedzacze
Lokalizowanie zdjęć ;-)

sobota, maja 06, 2006

Działa :-)

Kilka dni temu miałem wizję ;-)

Wizja tyczyła się moich zabaw z "semisubiektywną" analizą tekstów. Napisałem to co zobaczyłem w wizji i działa :-)

Skonstruowałem sobie 3 narzędzia.

Pierwsze to WebCrawler, który chodzi po stronach [na początku wypada mu wrzucić choć 1 adres] wrzuca ich treść do bazy danych, oraz szuka na nich linków, które też wrzuca do bazy. Po przejrzeniu dokumentu bierze kolejny z bazy i tak dalej i tak dalej.

Drugie narzędzie to SideAnalayzer, którego zadaniem jest analizowanie treści stron, wynikiem analizy są zbiory słów i ich częstotliwości występowania na danej stronie. Wyniki te również lądują w bazie danych.

Trzecie narzędzie to z braku lepszej nazwy Search ;-), dostaje ono adres strony, pobiera ją, buduje tabele częstotliwości występowania słów, pyta bazę o adresy stron gdzie występowało dane słowo, a następnie porównuje wszystkie wskazane dokumenty z tym, który dostało na początku.

Wynikiem działania trzeciego narzędzia jest lista wszystkich stron w bazie, które mają jakiekolwiek słowo wspólne z dokumentem źródłowym. Każdy z tych adresów jest wzbogacony również w "odległość" od dokumentu wzorcowego.
Jeżeli teraz taką listę posortujemy od najmniejszej odległości do największej to powinniśmy otrzymać listę dokumentów uszeregowaną według podobieństwa do dokumentu wzorcowego :-)

Sprawdziłem i działa :-)

Test przeprowadziłem jak na razie na bazie w której znajduje się ponad 103 tysiące słów oraz 392 dokumenty.

Wyniki poszukiwań najbardziej podobnego tekstu do tego wpisu w blogu to:
http://przemelek.blogspot.com/2006/05/roman.html
http://przemelek.blogspot.com/2006/04/podrujemy.html
http://przemelek.blogspot.com/2006/04/wdraam-cmm.html
http://przemelek.blogspot.com/2006/04/cvs-zamany.html
http://przemelek.blogspot.com/2006/05/czerwony.html
http://przemelek.blogspot.com/2006/05/nie-mwiem.html
http://przemelek.blogspot.com/2006/04/google-analytics-i-odwiedzacze.html
http://przemelek.blogspot.com/2006/05/biuro-on-line.html
http://przemelek.blogspot.com/2006/05/komputer-dla-mamy.html

Narzędzie nie jest jednak jeszcze doskonałe ;-) Po pierwsze strasznie długo działa ;-)


Podobne postybeta
Eksperyment, czyli z Google+ do Bloggera ;-)
Lepszy test mniejszy i dokładniejszy, niż większy i ogólniejszy ;-)
"Semisubiektywna" klasyfikacja dokumentów ;-)
Kombatanctwo JavaScript'owe ;-)
Żyje :-)

Roman....

Z tego miejsca chcę wyrazić współczucie wszystkim uczniom, którzy dorobili się teraz nowego ministra Edukacji, właśnie tytułowego Romana.
Składam też najszczersze wyrazy współczucia wszystkim Romanom w tym kraju z racji tego, że muszą takie ładne imie dzielić z TYM Romanem.

To co wydawało się niewyobrażalne stało się faktem, ministerstwu Edukacji szefować będzie człowiek, który w swoich poglądach lepiej pasowałby do Polski z lat 20 XX wieku, a jeszcze lepiej do przedwojennych Włoch, momentami zaś do III Rzeszy. Człowiek, którego bojówki używają publicznie symboliki faszystowskiej. Człowiek, który normalnością nazywa bandę ogolonych na łyso niespełnionych bandziorów, którzy wycierają sobie twarze hasłami o patryjotyźmie i honorze, jednocześnie używając symboliki III Rzeszy, która za jeden z celów obrała sobie eliminację "podludzi" - między innymi Polaków.

Dziękuje w tym miejscu wszystkim wyborcom PiS. Macie coście chcieli, tylko czemu za moje podatki?


Podobne postybeta
Ile wie o Tobie Internet?
Znów Roman ;-)
Zagwozdka
Jeden kawałek za mną ostatnio łazi ;-)
Iran coraz bliżej....

piątek, maja 05, 2006

Czerwony ;-)

No i oto jest wpis, który miał być wczoraj ;-) Niestety wczoraj na drodze stanął mi wydział komunikacji, w którym dziś odstałem swoje 3,5 godziny (miałem numerek H09).



To wyżej to mój nowy pojazd :-)
Mam już czym jeździć do pracy ;-) w obecnej nie jest to wymagane, ale w następnej się bez tego nie da ;-)

Teraz musze wymyślić mu (jej? ;-)) imię ;-)

Wpis pod silnym napięciem emocjonalnym, dlatego lekko chaotyczny ;-)


Podobne postybeta
Uczymy się... a przynajmniej próbujemy się uczyć ;-)
Zamienił stryjek siekierkę na kijek ;-)
Urodzeni koderzy
Dinozaur na UJ ;-)
EEEBateria ;-)

czwartek, maja 04, 2006

Biuro On-Line :-)

Dzisiejszy wpis miał być o czymś innym, ale niestety pokonał mnie dziś wydział komunikacji, dlatego to co miało być dziś będzie dopiero
jutro ;-)


Podstawowe oprogramowanie na komputerze to dla większości ludzi:
  • program pocztowy
  • kalendarz
  • edytor tekstów
  • arkusz kalkulacyjny
  • komunikator internetowy
Do niedawna oznaczało to dla większości osób instalacje na komputerze MS Office z Outlook'iem, Word'em i Excel'em, do tego dochodziło Gadu-Gadu.
Jako, że jestem nietypowym przypadkiem u mnie za edytor robił i zwykle nadal robi Writer z OpenOffice.org, za arkusz Calc z tegoż samego pakietu, za program pocztowy The Bat!, w miejsce kalendarza ziała pustka, jako komunikatora zaś używałem WPKontaktu, a teraz WP Spika.

Jednak w ciągu ostatnich kilku miesięcy okazało się, że w miejsce programu pocztowego milej mi używać GMAILa, który ostatnimi czasy w pracy zastępował mi też komunikator :-)



W miejsce edytora tekstu zacząłem ostatnio używać Writely:




Jako kalendarza Google Calendar:



Teraz zaś dzięki Enterowi znalazłem arkusz kalkulacyjny Numsum :-) :



W taki oto sposób udało się skompletować zestaw aplikacji, które pozwalają na używanie biura on-line :-)

Warto tu zauważyć, że jedynie Numsum nie ma jak na razie nic wspólnego z Google ;-)


Podobne postybeta
Narzędzia
Google Spreadsheest :-)
Spik mnie wkurzył
Scriplet w służbie wygody
Wpisy z Bloggera jako eventy w Google Calendar

A nie mówiłem? ;-)

Tak jak przypuszczałem w poprzednim wpisie, dziwne wyniki z klasyfikacji dokumentów były wynikiem prostego błędu ;-)

Po prostu zapomniałem jak się liczy odległość między wektorami, zamiast użyć formuły:

użyłem:

Różnica niewielka, ale znacząca ;-)

Stąd liczby zmieniają się odpowiednio z 0.15337566349300585 w 0.07917224602887332 i 0.14206175436070706 w 0.12184770373627736.


Podobne postybeta
Nauka ;-)
Pytania o sen odbierają mi sen ;-)
OpenOffice.org2GoogleDocs 1.4.1
Odwiedzacze 2 ;-)
Prawie jak wardriving ;-)

środa, maja 03, 2006

Nauka ;-)

Nauka z dnia dzisiejszego:
  • Cassini Web Server nie pozwala na udostępnianie aplikacji ASP.NET na zewnątrz, czyli dla innych komputerów.
Przez to mój przebiegły plan musi zostać zmieniony i poczekać na późniejszą realizację ;-)

Specjalnie dla realizacji tego planu przerwałem moje zmagania z klasyfikacją dokumentów.
Ciekawe wyniki mi wyszły ;-) wg. mojego programu to jest mniej podobne do tego, niż to do tego ;-) (dla pierwszego odległość wektorów stworzonych ze słów to 0.15337566349300585, dla drugiego już tylko 0.14206175436070706)
Jak znam swoje szczęście gdzieś musiałem popełnić jakiś prosty błąd ;-) do tego dochodzi też to, że traktuje wszystkie teksty tak jakby były bez polskich znaków, a część z nich je jednak ma....

Ponieważ dziś mieliśmy święto [ktoś pamięta jaszcze co świętujemy?] to telewizje prześcigały się w różnych propozycjach. Ciekawą rzecz pokazała TVP. Był to film, a bardziej fabularyzowany dokument Przestrzeń Banacha, o Stefanie Banachu jednym z największych polskich matematyków. Ciekawie było obejrzeć jak powinno się robić naukę.
Z ciekawych propozycji warto wymienić też Saved na HBO (ciekawa wizja mentalności uczniów chrześcijańskiego liceum), Gwiezdne Wrota też na HBO i Zróbmy sobie wnuka na Polsacie [ach te Krysie ;-)].


Podobne postybeta
... i "we wte" ;-)
Dowcipny laptop ;-)
Nauka, głupcze
Różny target
Książkowy Stack Overflow ;-)

poniedziałek, maja 01, 2006

Komputer dla mamy

Dziś stanąłem przed trudnym zadaniem, przygotowania komputera tak by moja mama mogła oglądać na nim filmy.

Oczywiście samo sprawienie by komputer nadawał się do odtwarzania filmów nie jest takie trudne, problemem jest to by jego obsługa była jak najprostsza i wymagała jak najmniejszej wiedzy o komputerach.

Nie chciałem korzystać z MoviX'a ani instalować innego systemu operacyjnego niż ten, który był już na komputerze (Windows XP).

Zdecydowałem się wykorzystać do wszystkiego odtwarzacz VideoLanClient, głównie przez to, że nie potrzebuje on instalacji dodatkowych kodeków, wszystkie przynosi ze sobą przy okazji nie "motając" w konfiguracji kodeków Windows. Niestety VLC mimo wielu zalet ma jednak tą wadę, że nie należy do najprostszych w użyciu.
Integruje się ładnie z Windows, pozwala na skojarzenie z plikami multimedialnymi, ale niestety nadal wymaga "klikania" na plikach ;-)

W celu eliminacji konieczności zbyt dotkliwego klikania na plikach postanowiłem "dostarczyć" łatwiejszy interfejs ;-)
Komuś kto nie używa komputera na co dzień dwuklik może sprawić poważne problemy (wiem, że można skonfigurować Windows tak by działał poprawnie z jednoklikiem ;-) ale z tego komputera też ja będę czasem korzystał, a taki ficzer mógłby mnie zabić ;-)) dlatego ilość dwuklików należało doprowadzić do możliwie najmniejszej ilości bez ich wyłączania.

W tym celu wykorzystałem mój stary projekt, który służył mi kiedyś do ubarwienia interfejsu.
Jest to aplikacja HTA, która listuje wskazany katalog i pokazuje jego zawartość w postaci listy, wystarczy pojedyncze kliknięcie i plik zostaje uruchomiony. Proste to, ale skuteczne :-)

Wystarczyły drobne poprawki, polegające na tym by pliki z rozszerzeniami kojarzącymi się z filmami były wyświetlane jako większe i gotowe ;-)

Użytkownik, czyli mama :-) jest zadowolony, ale jest jeszcze 1 dwuklik, na początku na linkę do tej aplikacji HTA. Dlatego teraz planuję dodanie jeszcze jednej aplikacji HTA, która będzie startowała razem z komputerem i z niej będzie można uruchomić tą drugą przez kliknięcie na linkę "FILMY" :-)

Jeszcze mam dwa zmartwienia, domyślne włączenie wyświetlania napisów i otwieranie na cały ekran na TV, ale to na jutro, bo inkryminowany komputer został zajęty i odtwarza właśnie filmy ;-)


Podobne postybeta
User Interface... jak ja tego nie lubię...
Po roku...
Tresura owiec ;-)
Dajcie mi język marzeń ;-)
Nieznane ścieżki ClassLoader'a ;-)