poniedziałek, 30 kwietnia 2007

Metaprogramming

Metaprogramming is the writing of computer programs that write or manipulate other programs (or themselves) as their data or that do part of the work during compile time that is otherwise done at run time. In many cases, this allows programmers to get more done in the same amount of time as they would take to write all the code manually.
-wikipedia

Mówią że C++ daje narzędzia do metaprogrammingu a java nie. Przykładowo by wygenerować klasę całkują funkcje zwracającą double i std::complex, starczy napisać jeden szablon integrator.

Ale to Java ma powera do metaprogrammingu. Czytałem sobie w "Thinking in Java"* w rozdziale o adnotacjach, adnotacje to są takie fajne metadane dołaczane do kodu źródłowego. Ogólnie można do każdego elementu klasy dopisać jakąś informację. Co więcej, można za pomocą narzędzia apt (annotation processing tool), generować nowe pliki klas.

Dziś pisałem sejwowanie klasy do XML wygląda tak że na początku pisze się kod:
Element root = new Element ("[nazwa klasy]");
a dla każdej składowej klasy pisze się:
Element [nazwa składowej] = new Element ("[nazwa składowej]");
[nazwa_składowej].appendChild(String.valueOf(this.[nazwa_składowej]));
root.appendChild([nazwa_składowej]);
W sumie upierdliwe jak się ma 9 składowych. Wyglądało to tak:

package jb.sk;

import java.io.Serializable;
import java.text.ParseException;

import nu.xom.Element;

public class Comment implements Serializable, Comparable{

private static final long serialVersionUID = -5532948060127766412L;

String author;
String authorEmail;
long authorIP;
String authorUrl;
long date;
boolean deleted;
String message;
CommentId no = null;
boolean visible;
public Element getXML(){

Element comment = new Element("comment");

Element author = new Element("author");
author.appendChild(getAuthor());
comment.appendChild(author);

Element authorEmail = new Element("authorEmail");
authorEmail.appendChild(getAuthorEmail());
comment.appendChild(authorEmail);

Element authorIP = new Element("authorIP");
authorIP.appendChild(String.valueOf(getAuthorIP()));
comment.appendChild(authorIP);

Element authorUrl = new Element("authorUrl");
authorUrl.appendChild(getAuthorUrl());
comment.appendChild(authorUrl);

Element date = new Element("date");
date.appendChild(String.valueOf(getDate()));
comment.appendChild(date);

Element deleted = new Element("this.deleted");
date.appendChild(String.valueOf(isDeleted()));
comment.appendChild(deleted);

Element message = new Element("message");
message.appendChild(getMessage());
comment.appendChild(message);

Element no = new Element("no");
no.appendChild(this.no.toString());
comment.appendChild(no);

Element visible = new Element("visible");
visible.appendChild(String.valueOf(isVisible()));
comment.appendChild(visible);

return comment;
}
/*...*/
}


No i trafiło mnie żestarczyłoby utworzyć takie coś:
@XMLAble
abstract Comment_base{
@XMLAbleElement
String author;
/*..*/
Comment(Element e){
set(e);
}

abstract Element getXML();
abstract set(Element elem);

/*..*/
}


Potem automatycznie (przy pomocy apta) pisać klasę: Comment, która te dwie metody nadpisuje kodem generowanym w trywialny sposób. Po prostu tworzyłaby nową klasę dla @XMLAble i która sejwowałaby każdy element z annotacją @XMLAbleElement. Trywial :). Może kiedyś napisze coś takiego :).


---
* Wersji IV, wersja III dostępna na stronie autora (nie ma w niej chyba rozdziału w którym mówie).

niedziela, 29 kwietnia 2007

What kind of bulb emits broken light

Reklama.

  1. Rozumieć.

    Rozumiem1 --- znaczy stosuję. Sokratejskie wiedza == cnota.
    Rozumiem2 --- znaczy jest coś czego nie stosuję, ale mógłbym, i to że tego nie stosuje nie jest kwestią wyboru. Na przykład nie mam na to czasu w sensie globalnym. Ktoś może mi powiedzieć --- fajnie jest uczyć się Japońskiego, a ja mu powiem rozumiem2, bo życia nie starczy na nauczenie się wszelkich, godnych i wspaniałych nauk. Tak samo rozumiem2 potrzebę realizowania się poprzez sztuki plastyczne, ale cóż po prostu nie mam specjalnego talentu. Przykład:
    I regret that I am unable to to give you advice on how to plan, write, rewrite, market, or sell your book. I am sorry that I do not have the knowledge or connections to enable me to refer you to an agent. Although I know I might enjoy it very much it if I could do it, the limited hours of the day and the limited span of my life do not permit me to read the material you send me, or tell you my opinion of it.
    -- http://www.ursulakleguin.com/Mail.html
    Rozumiem3 --- znaczy że ja tego nie stosuję z przyczyn koniecznych, ale uważam to również za godne i warte stosowania. Przykładowo rozumiem3 wiarę (dajmy na to, te sensowniejsze odłamu judeochrześcijaństwa). Jest ona ze mną absolutnie niekompatybilna, znaczy nie byłbym sobą gdybym podjął ten wybór. Ale widzę jego zalety i go doceniam.

Reszta na: google Docs

sobota, 28 kwietnia 2007

O potrzebie UML

Wyjaśnienie:
Idea jest taka żeby napisać klasę która liczy dajmu na to całkę z funkcji f, ale nie wie z jakiej funckji --- metoda wyliczająca w punkcie x jest abstarkcyjna:
virtual inline double getValue(double x)=0;

Teraz dodajemy małe klasy, któe na swój sposób implementują funkcję (może to być przez wskaźnik do funkcji, przez obiekt, przez parser matematyki.

*wrapper_f --- implementuje getValue jako wskaźnik do funkcji

*wrapper_obj --- implementuje getValue poprzez obiekt funkcyjny


random_generator_base --- zwykły generator liczb losowych (też z funkcją virtualną)

range_function_base --- to klasa opisująca obiekt będący funkcją na przedziale skoczonym.

random_generator --- losuje liczby z dziedziny i zbioru wartości funkcji.

von_neumann --- coś losującego liczby losowe metodą eliminacji von neumanna

simple_monte_carlo --- całkuje funkcję metodą monte carlo.

Cztery ostatnie klasy mają swoje wrappery.

O tyle fajnie że klasa (cała) simple_monte_carlo_f wygląda tak i jest już w pełni funkcjonalną klasą mającą kilkanaście metod:

template &lq class DOUBLE&rq
class simple_monte_carlo_f:
public random_generator_base_wrapper_f& lq DOUBLE&rq,
public simple_monte_carlo_base &lq DOUBLE&rq,
public range_function_base_wrapper_f &lq DOUBLE&rq{
simple_monte_carlo_f(DOUBLE _begin, DOUBLE _end, DOUBLE
(*_rand)(),DOUBLE (*_fun)(DOUBLE x)):

random_generator_base_wrapper_f lq DOUBLE&rq(_rand),
range_function_base_wrapper_f lq DOUBLE&rq(_fun)
{
this->set(_begin,_end);
}
};

Na diagramie (uproszczonym, bo wskazującym tylko dziedziczenie) wygląda cały schemat masakrycznie --- tak:

piątek, 27 kwietnia 2007

Marzenie

--- Dzień dobry. Chcę u pana pisać pracę magisterską.
--- A zna się pan na Fizyce?
--- Nie ale dobrze programuje.
--- Jasne.

EDIT: Marzenia się spełniają :)
Bogowie nie czynią ludzi szczęśliwymi.

Hymn

A [sterty papierów]
runą, runą, runą

Google

--- Sprytne, nie robić od nowa, a naprawić to co jest.
--- Nie to co Bóg --- stworzył Kobietę.
122 postów

środa, 25 kwietnia 2007

When someone reads a text, wants to discover its meaning, he will not
scorn the symbols and letters and call them deceptions, coincidence,
and worthless hull, but he will read them, he will study and love them,
letter by letter. But I, who wanted to read the book of the world and
the book of my own being, I have, for the sake of a meaning I had
anticipated before I read, scorned the symbols and letters, I called the
visible world a deception, called my eyes and my tongue coincidental
and worthless forms without substance. No, this is over, I have
awakened, I have indeed awakened and have not been born before this
very day.


Its all there, all there,

czwartek, 19 kwietnia 2007

Dwóch matematyków, trzech fizyków...

Dwóch matematyków, trzech fizyków, dwóch programistów, jeden inżynier, jeden lotnik, jeden filozof --- razem cztery osoby. Startowaliśmy w konkursie na inżyniera.

Pytanie: na ile ciekawych sposobów możesz zastosować spinacz (wymień). 0.5pkt /zastosowanie.
  • Dla każdego n należącego do N+ mogę spiąć nim n+1 kartek. Zatem mogę zastosować spinacz na przynajmniej Alef 0 sposobów.
  • Jako niewybredne narzędzie tortur (zaostrzony pod paznokciem).*
  • Mogę nim złączyć dwa punkty dowolnego obwodu (co daje już Continuum zastosowań). W szczególności:
  • Mogę zrobić ciemność (o ile gniazdko elektryczne jest w pod tym samym bezpiecznikiem co żarówka).
* Przy zastosowaniach ekspresu do kawy i klamerki stało: jako wyszukane narzędzie tortur (w ekspresie jest kompresor --- czyli silnik).
* Grześ ma status: Ciągle odkrywam tajemnicę kosmosu
[ja] Jest tylko jedna tajmenica, to że nie ma żadnych tajemnic, wszystko jest jasne i proste.
[grześ] Spierdalaj!
*Startuje w BEST Engineering Competition.
[adam] No to mamy team. Pomysł na nazwę?
[jacek] Epifenomeny
[adam] A to nie brzydkie słowo?
[jacek] Chyba tylko dla skrajnie naiwnych racjonalistow

Targi pracy

  1. Cukierki IBM są lepsze niż te Samsunga.
  2. Długopisy Deloitte są lepsze niż te IBM

środa, 18 kwietnia 2007

Perfumy

-- Jak mówimy że Bóg nie jest nie--bytem nie mamy na myśli że on nie istnieje, ale że on tak przewyższa byt że już nie jest bytem.
-- Czyli najlepsza wódka nie jest wódką?
-- To już są perfumy


Dostałem maila z taką stopką. A w drugim pokoju właśnie drukowało mi się 50 stron Numerical Recipies. Cóż przynajmniej oddam je potem do recyklingu.

wtorek, 17 kwietnia 2007


Ja to bym chyba lubił pracować. Ale ja dziwny jestem

poniedziałek, 16 kwietnia 2007

Kant

[prowadząca] Jasne? Nie? Wiem.
-- Czy kategorie są konieczne?
-- Absolutnie tak!
-- Nie!
-- A jakie było pytanie?
-- Czy wszystkie przedstawienia są przedstawieniami naoczności?
-- Nie, mogą być przedstawienia przedstawień.
-- A przedstawienia przedstawień przedstawień.
-- To tak jak z teorią mnogości.
-- A czy jest przedstawienie zawierające wszystkie przedstawienia?
Nemo -- nikt.
Nullus -- nic.

Formy te nie mają wołacza.

-- Znać że Rzymianie nie mieli Filozofii Egzystencjalnej.
[łacina]
-- Jaki to ma wszystko sens? -- pytam Maję retorycznie, egzystencjalnie, i po cichu.
-- Nie wiem! -- odpowiada Maja.
-- A czego dokładnie? -- prowadząca

sobota, 14 kwietnia 2007

Nie lubię siedzieć godzinę nad wyprowadzeniem z książki i dojść że jest w nim błąd!

Życie

obserwujemy procesy bardziej złożone, w których strzałka czasu też istnieje, ale procesy te zachodzą przez pewien okres czasu poza stanem równowagi (...) Komórki roślin i zwierząt rodzą się, żyją i giną, rodzą się, żyją i umierają całe organizmy, powstają trwają i umierają całe gatunki zwierząt, technologie, kultury i cywilizacje


*Z materiałów do Fizyki Statystycznej Stanów Nierównowagowych ze strony Pana prof. Hołysta WF PW.

Gdzież równowaga w życiu. Jakże jej szukać, skoro samo życie jest procesem nierównowagowym.

Internet is for Porn!

Nieprawda że the Internet is for porn:

Internet jest żeby łatwiej było się uczyć matematyki i programowania. Serio :)

Otwarcie sezonu motocyklowego

-- Dlaczego oni jeżdżą w kółko?
-- Tak chyba masz jak chcesz gdzieś jechać, a nie masz dokąd.
Na końcu notatek z wykładu umieszczonych w necie.
To jest coś podejrzanie krótki wykład - możliwe że zwiałam z drugiej godziny, choć się o to nie podejrzewam.. :D
Spytać na forum feministek, czy to prawda że kobiety mają mniejsze mózgi.

Crosspostować na alt.tactless i alt.pets.cats temat "How to cook a cat".

Na forum bibliofilów wrzucić tekst: po co wam paoierowa starodruki, nie lepiej zeskanować a oryginały niech gniją.

Spytać na comp.lang.c++ goto... is it so bad?

Czas

-- Skoro za oddanie tydzień po czasie jest -33% punktów, to może za oddanie tydzień przed czasem powinno być +33% punktów? Byłoby symetrycznie. A my, fizycy, lubimy symetrię.
-- Zapomniał Pan o jednym, zjawiska związane z czasem są raczej asymetryczne.

Co racja to racja.
Czasem na w książkach naukowych widać kto od kogo zżynał. Bo na przykład w książce A pojawia się symbol d, który jest zdefiniowany w książce B.

Na kolokwiach też to widać.

piątek, 13 kwietnia 2007

std:transform(dataset, dataset+size, dataset, dataset, std::multiply< double>());

Komentarz: a nie łatwiej for--em?

Ale tak fajniej!

Doktorantem być

Byłem dziś na zajęciach z programowania, oddawałem programy z 6 zajęć, więc się zeszło :), i zostałem po czasie. Do 'mojego' doktoranta przyszli znajomi doktoranci. I się zaczęło.

I:
-- Pech! Miałem zastępstwo, i przyszedł jakiś [imie i nazwisko] po raz pierwszy i ponoć oddał drugi program.
-- Nie pamiętam go. Widocznie na [przedmiot który mówiący prowadzi] też nie chodzi.
-- Ja pamiętam go -- źle.

II:
-- I jak dobre wyniki? -- pytam.
-- Skąd mam wiedzieć? -- mówi 'mój'
-- Przecież napisałeś rozwiązanie modelowe i znasz odpowiedź -- mówi kolega doktorant.
-- Taa.

III:
-- A niech sobie przychodzi komisja akredytacyjna, i tak przyjdzie tylko jeden student na zajęcia.

IV:
-- Kiedy kończysz? -- pytają 'mojego'
-- Jak skończę
-- To my wpadniemy o 15 -- wtedy jest oficjalny koniec zajęć.

V:
[Napisałem program i go wysłałem w terminie prowadzącemu, on go nie dostał]
-- A ma Pan dowód wysłania? -- pyta doktorantka
-- Właśnie, holender, ma! -- odpowiada 'mój'.

A mówią (PhD webcomic) że doktorat to jest 'circle of no-life'.
Doh!
Wikipedia nie udziela porad fachowych, medycznych, prawnych ani innych


Nie mówię że należy strzelać do idiotów. . . Dla mnie starczyłoby pousuwać wszystkie nalepki z ostrzeżeniami i informacje prawne tego typu, i pozwolić działać ewolucji.

środa, 11 kwietnia 2007

Hania: a przy okazji: jak wczorajsza kawa? Los mowil, ze film po raz drugi tez jest fajny :D
ja: Mi się podobało. Choć mamy z Łosiem tendencję do wpadania w tematy ne pojęte dla Mai.
Hania: ani dla pozostalych istot plci pieknej, wiem... :P
ja: Nie generalizuj :)
ja: Są kobiety-inżynierowie.
Hania: nie uwierze, dopoki nie zobacze :]
ja: Hmm.
ja: Fakt że ich nie znam.
ja: Ale są.
ja: Muszą być!

wtorek, 10 kwietnia 2007

[łoś] Ale mi zjechali, aż mi wystyd
[ja] Kto, kto??
[łoś] w OGAME.
[ja] doh!
[łoś] Ale tak że nie ma już co zbierać.
[ja] OGame jest jak kobieta. Przegrasz jedną, możesz zacząć z następną :P
[łoś] To jest zły trip, ale czuję się, jakbym dostał kosza
[łoś] Dobra kurwa! Gram w kolonizację.
Ciekawe którą z 12 kategorii można kierować?

Nescafe 3 w 1

Nescafe 3 w 1, to chyba nie kawa. Prawdziwa kawa po trzech dniach stania pod monitorem jest nie do picia.

Nescafe jest.

poniedziałek, 9 kwietnia 2007

Trafiać na strony gdzie w katalogu obok rzeczy urzędowch zą przez pomyłkę wrzucone prywatne zdjęcia.
Oglądanie filmów anime, z angielskimi napisami tłumaczonymi przez komputer z podpisów Rosyjskich to Hardkor.

sobota, 7 kwietnia 2007

Gdzieś pomiędzy 14 a 16 godziną aktywności, staję się nie--iltelligibilny.

Dobranoc.

piątek, 6 kwietnia 2007

The secret to creativity is knowing how to hide your sources
We will draw the line, however, at the inefficient N^2 algorithm, beloved of elementary computer science texts, called bubble sort. If you know what bubble sort is, wipe it from your mind; if you don’t know, make a point of never finding out!


Bubble sort to ciekawy algorytm. Łączy on w sobie dwie, zdawałoby się trudne do połączenia cechy, jest niezrozumiały (jak na sortowanie o złożoności N^2), i jest całkowicie, żałośnie wolny. Nie wiem ki kretyn włożył go do podręcznika. Przeca są algorytmy (też N^2), ale dwa cztery szybsze i jednocześnie zrozumialsze.

Oznaka Dobra

Wypić pierwszą kawę koło 20.

Kuszenie Spinozy


Baruch Spinoza z Amsterdamu
zapragnął dosięgnąć Boga
szlifując
na strychu soczewki
przebił nagle zasłonę
i stanał twarzą w twarz
mówił długo
(a gdy tak mówił
rozszerzał się umysł jego
i dusza jego)
zadawał pytania
na temat natury człowieka
- Bóg gładził roztargnioną brodę
pytał o pierwszą przyczynę
- Bóg patrzył w nieskończoność
pytał o przyczynę ostateczną
- Bóg łamał palce
chrząkał

Kiedy Spinoza zamilkł rzecze Bóg
- Mówisz ładnie, Baruch
lubię twoją geometryczną łacinę
a także jasną skłądnię
symetrię wywodów

pomówmy jednak o
Rzeczach Naprawdę Wielkich

- Popatrz na twoje ręce
pokaleczone i drżące

- Niszczysz oczy w ciemnościach

- odżywiasz się źle odziewasz nędznie

- kup nowy dom
wybacz weneckim lustrom
że powtarzają powierzchnię

- wybacz kwiatom we włosach
pijackiej piosence

- dbaj o dochody
jak twój kolega Kartezjusz

- bądź przbiegły jak Erazm

- poświęć traktat Ludwikowi XIV
i tak go nikt nie przeczyta

- uciszaj racjonalną furię
upadną od niej trony
i szczernieją gwiazdy

- pomyśl o kobiecie
która da ci dziecko

- widzisz, Baruch, mówimy o
Rzeczach Wielkich.

- Chcę być kochany
przez nieuczonych i gwałtownych
są to jedyni
którzy prawdziwie mnie łakną

Teraz zasłona opada
Spinoza zostaje sam

Nie widzi złotego obłoku
światła na wysokościach
widzi ciemność

Słyszy skrzypienie schodów
kroki schodzące w dół


Nie to że polecam :P, nie to że się zgadzam, ale ładne.

Dodam że to Herbert jest.

czwartek, 5 kwietnia 2007

Kant

Ach w jakiż błogosławionych czasach żył Kant! Zaiste były to wieki oświecenia. Umysł wtedy już zgadzał się ze światem, a jeszcze obraz świata przystawał do umysłu.

Jakimiż pięknymi zasadami kierował się świat Kanta. Zasada zachowania pędu była prawdziwa, istniała tylko jedna przestrzeń, cały świat był prosty i poznawalny. Nic dziwengo że te zasady kant uznał za aprioryczne prawa umysłu*. Cudowne! Wiedza zgadzała się ze zdrowym rozsądkiem.

A teraz co? Dupa :) Nie wiemy ile ten wszechświat ma wymiarów. A przypadki mechaniki kwantowej masakrują intelekt.

Płaczmy nad straconą niewinnością.

---
* Czy jakoś podobnie. Jak znajdę cytat poprawię termin.

Reklama:

Zachęcam do zajrzenia na: http://fizolof.blogspot.com/

Moja strona domowa zmieniła adres: http://jbhome.wikidot.com/

Ta strona nie będzie już updejtowana. Blog został przeniesiony na: http://jbhome.wikidot.com/blog:start

Blog: