Subclipse (instalowane kilkakrotnie z strony domowej) nie chcę działać - nie znajduje swoich klas (eclipse wie, że jest to zainstalowane, a nie uruchamia).
Potrzebowałem zamienić w plikach java-pkg-2-2 na java-pkg-2
find /var/db/pkg/ -exec perl -pi -e 's@java-pkg-2-2@java-pkg-2@' \;
Zajmuje to jednak trochę czasu (dla każdego pliku jest wywoływany perl).
Dlatego postarałem się o taką konstrukcję (tymczasową) :
# find /var/db/pkg/ | xargs grep java-pkg-2-2
/var/db/pkg/dev-java/rhino-1.5.5-r2/rhino-1.5.5-r2.ebuild:inherit ...
/var/db/pkg/dev-java/antlr-2.7.5-r2/antlr-2.7.5-r2.ebuild:inherit ...
/var/db/pkg/dev-java/servletapi-2.3-r2/servletapi-2.3-r2.ebuild:inherit ...
/var/db/pkg/dev-java/libreadline-java-0.8.0-r1/libreadline-java-0.8.0- ...
/var/db/pkg/dev-java/servletapi-2.4-r2/servletapi-2.4-r2.ebuild:inherit ...
/var/db/pkg/dev-java/bsh-2.0_beta4/bsh-2.0_beta4.ebuild:inherit ...
/var/db/pkg/dev-java/ant-core-1.6.5-r13/ant-core-1.6.5-r13.ebuild:inherit ...
Od razu widać, że nie potrzeba nam zawartości. Pozatym 2 procesy nie będą korzystały z tego pliku jednocześnie, więc możemy korzystać z Mapped I/O (wywołanie systemowe mmap(2)
# find /var/db/pkg/ | xargs grep --mmap java-pkg-2-2 | sed 's@:.*@@g;'
/var/db/pkg/dev-java/rhino-1.5.5-r2/rhino-1.5.5-r2.ebuild
/var/db/pkg/dev-java/antlr-2.7.5-r2/antlr-2.7.5-r2.ebuild
/var/db/pkg/dev-java/servletapi-2.3-r2/servletapi-2.3-r2.ebuild
/var/db/pkg/dev-java/libreadline-java-0.8.0-r1/libreadline-java-0.8.0-r1.ebuild
/var/db/pkg/dev-java/servletapi-2.4-r2/servletapi-2.4-r2.ebuild
/var/db/pkg/dev-java/bsh-2.0_beta4/bsh-2.0_beta4.ebuild
/var/db/pkg/dev-java/ant-core-1.6.5-r13/ant-core-1.6.5-r13.ebuild
I przekazujemy to do perla:
# find /var/db/pkg/ | xargs grep --mmap java-pkg-2-2 | sed 's@:.*@@g;' \
| xargs perl -pi -e 's@java-pkg-2-2@java-pkg-2@'
I nie mamy już czasu zaparzyć kawy... (Pierwsze zajmowało strasznie długo)
Czasami nachodzi mnie ochota na myślenie o NIL'u - połączeniu cech Javy, Rubiego i C++. Do cech należałyby:
Mam dziwne wrażenie, że trochę przekombinowałem.
Potrzeby był mi parser tekstu. Niestety najprostsze metody to:
Niestety było mi potrzebne coś w rodzaju leniwego drzewa - w końcu plik może być wczytywany przez słabe łącze. Dodatkowo wykonywanie kilku rzeczy naraz może przyspieszyć na maszynach wieloprocesorowych(i/lub wielordzeniowych procesorach).
Wpadłem na pomysł leniwego dzewka, które wysyła sygnały. W rezultacie:
I tutaj pojawia się pytanie - czy jest to elastyczność, czy przekombinowanie?
Piszę kod w Javie:
W Javie 1.5 mamy lepiej
A czy nie prościej by było to opisać jako:
private Listener listener = new proxyListener();
@ProxyCollection(listeners)
private class proxyListener implements Listener {}
private Set<Listener> listeners;
Nie upieram się przy znaku at(już wykorzystanym), może to być & lub $ (którego i tak nie można wykorzystać). Oczywiście wszystko na poziomie kompilacji...
Czy ktoś może powiedzieć, jak podobny kod wygląda w ruby(tzn. weduk filozofii ruby i w ruby)?
... i dochodzę do wniosku, że zupełnie ona nie nadaję się do tego. Naturalny byłby taki model:
Właściwie to do pisania filtrów wystarczyłaby napisanie ptk. 5. Tymczasem muszę (chyba, że ktoś mi poda, gdzie taką klase mogę znaleźć) prawie wszystkie punkty napisać od początku.
Inne rozwiązanie to z urzyciem synchronizowanej listy. Napisanie tego nie zajmuje dużo czasu i jest w durzej mierze wspomagane JavaCC
Niestety tutaj mamy ten problem, że mamy aż 2 wątki 'nadmiarowe' i rurkę. W dodatku te 2 wątki nie wiem jak zakończyć (w końcu parser przejmuje kontrolę nad parserem a nie ma metody isClosed()).
W Javie wcześniejszej niż 1.5(Program ze swej natury musi być kompatybilny conajmniej z Javą 1.2) nie ma StringBuilder więc zaimplementowanie pierwszego rozwiązania:
Czy w tym momencie jestem zmuszony stworzyć odrębny pakiet utils?
Zaczynam upiekszanie kodu. Najlepeiej, jeśli mialby numery linii (To nie mój pomysł).
Nad stylami muszę jeszcze popracować, ale tutaj jest próbka:
Po prostu kliknik w kod :)
Gdzieś czytałem, nie pamiętam gdzie, żeby kompilator wyświetlał błedy przy takiej konstrukcji:
if(coś);
Co jesnak z takimi konstrukcjami:
if(coś)
instrukcja();
else if(coś2);
else if(coś3)
instrukcja2();
else
instrukcja3();
Można oczywiście:
if(coś)
instrukcja();
else if(!coś2) {
if(coś3)
instrukcja2();
else
instrukcja3();
}
Ale dziwnym trafem wole rozwiązanie pierwsze...
Udało mi się zainstalować wolną Javę. I to w wersji 1.5.
To co nie udało się z sablevm i kaffe (Java 1.2-1.4) udało się za pomocą gcj (kompilator javy w pakiecie gcc) i ecj (kompilator javy w eclipse - jedyny otwarty kompilator obsługujący 1.5).
Generyczność bez typedef jest nie do końca czytelna. Weźmy chocby taka linijkę:
> > objects;]]>
Choćby typdef ConcurrentMap DMap; //Default Map
zmniejszyło by ją.
No cóź - taka jest ta Java...
Chciałem zająć się programowaniem sieci w Javie. Mam książkę o Javie, którą kiedys czytałem. Istnieje porównanie języków. Kod w C jest długi. Oto jego fragment:
Dla nieznających języka dodam, że jest to (archaiczny już) zapis ANSI, który mało kto stosuje. Teraz zajmuje to 5x mniej linii:
W podobny sposób 'zapomniano' o funkcji fdopen(3), która pozwoliłaby skrócic kod o stronę (1/3 kodu), gdyż nie trzeba pisać funkcji operujących na deskryptorach. Dodanie tak dziwnych rzeczy jak biblioteki (na pewno da się w CGI) pozwoliłoby skrocić to do +/- kodu Javy. (no może trochę więcej, ale...)
Ostatnio kupiłem sobie książkę o Java 1.5 Tiger (na temat nowości).
Doszedłem do wniosków, że większość z tego, co wprowadzili, było w C++ (czy nawet w C) i... zostawało przez programistów Java od czci i wiary (typy generyczne, printf) albo w ogóle pominięte (enum). Część to transportacja z .Net różnych rzeczy (adnotacje, for/in).
Java uległa 'skomplikowaniu' przez co... łatwiej się pisze(bezpieczniejsze typowanie, wyłączenie warringów, łatwiejsze formatowanie stringów...).
Pozdrawiam.
Zależało mi na na włączeniu do QT 4.0 możliwości robienia prania i gotowania, ale zdecydowaliśmy, że te funkcje warto pozostawić do rozważenia dla przyszłych wersji
Gnome nie zrobiłby tego w gtk+ - utworzyłby projekt ghome z bibliotekami np. gwash i gcook, co pozwoliłoby utrzymać spójność i prostotę przy dodawaniu nowych możliwości.
YouOS to ciekawy projekt stworzenia... os'u dla przeglądarki...
Polega to na tym, że logujemy się w przeglądarce i w niej pracujemy. Problem nadal nazywa się CPU - od czasu do czasu proces firefox-bin dużo zabierał.
Niedoczytałem, ale chyba cały projekt jest OS i do tego w JavaScripcie.
Statyczne typowanie ma kilka zalet. Można szybko wychwycić błędy/literówki(zazwyczaj wszystko musi być zadeklarowane przed). Jest sie pewnym, że coś jest jakiegoś typu. ect. Długi czas myślałem, że jest zdecydowanie lepsze.
Dynamiczne typowanie pozwala na kilka stuczek - m. innymi brak
interfejsów, brak rzutowań, które pomniejszają czytelność,
wczytywanie klasy bezpośrednio ze string (xyz = eval(xyz +
".new"), a nie TypBazowy xyz =
(TypBazowy)Class.forName(abc).newInstance()). Dynamiczne
typowanie też ma zalety.
Gdyby ktoś znalazł błędy proszę o powiadomienie mnie.
Ostatnio szukałem czegoś o asp.net(mod_mono) i znalazłem ciekawe teksty o ruby.
Dla mnie JSP ma wygodną składnie w plikach, rozdzielenie MVC niekoniecznie odwzorowaną 1-1 [1] z bazą danych - trzeba by było wtedy przechowywać kod html/xhtml i przekonwertowywać go do innych formatów. Nie jest to, o co mi chodzi - patrz sowa - założenia sowy.
ASP.net ma dużo
możliwości 'językowe' (C#, nemerle) - znacznie doroślejsze niż
Javowe odpowiedniki (patrz właściwości vs. JavaBean), ale jedyne
'kursy' to filmiki na stronach MS w
których conajmniej 25% to opowiadanie o wygodzie VS(Wygoda VS) ect. używając WYSIWYG.
Na domiar złego pliki aspx mają dziwną składnie przypominającą
html z końca wojny
przeglądarek(<script runat=server&rt;) -
zamiast, zgodnie z XML, wszystkie instrukcje umieszczając między
<?xyz ?> (xyz to nazwa odpowiedniego języka np.
php [2], jsp, ect.). Dodaje również
'automatycznie' pola - kto wie z czym kompatybilne(opiera się o
html a nie XForm)?
Ruby on Rails ma wymienioną wadę - stosunek 1-1 z bazą danych. Ponieważ jednak(z tego co wiem) jest na tym zbudowany(przynajmniej weduk manuali/prasy ect.) to sowa nie mogła być na nim zbudowana.
Gdyby ktoś wziął JSP i zmienił język na ruby lub platformę na mono - podbiłby świat ;)
[1] Chodzi oczywiście o Ruby on Rails
[2] PHP trochę wyłamuje się z konwencji stosując
short-tags(domyślnie włączone), ale nie o to
chodzi...
Nie zauważyłem, co aktualizuje i zaktualizowałem expat. W wyniku tego (wedle revdep-rebuild) miałem ponad 50 złamanych zależności(w tym dinozaurach typu mozilla).
Gorsza jest tylko niekopatybilność API :)
Co jest prostsze do zrozumienia:
Czy może:
Moim zdaniem to pierwsze...
Pozostaje mi tylko ujednolicić kod (_ przed prywatnymi i chronionymi zmiennymi ect) dołożyć dokumentacje (JavaDoc) i upublicznić(gdzie?)
Do zrobienia do 0.1 Alpha:
Co w niej będzie:
W DC Alpha chciałbym mieć już dodaną obsługę XML/JDBC/Memory. Zachęcam do:
Języki się różnią. Widać to choćby na przykładzie prostej klasy(Korzystającej z (N)Hibernate).
klasa.java:
klass.hbm.xml
Klasa.cs
Klasa.boo(Nie pamietam jak utwożyć ro property, ale to szczegół):
import NHibernate.Mapping.Attributes
[Class] \
class Klasa:
def constructor:
pass
[Boo.Lang.Property(Id)] \
[Id(0, ClassType=UInt64)] \
[Generator(1, Class="native"] \
id as ulong
[Boo.Lang.Property(Nazwa)] \
[Property] \
nazwa as String
Przy nemerle (nie znam składni), pewnie za pomocą makr, dałoby się to zapisać jeszcze krócej.
Kod nie był testowany ani kompliowany.
Bardzo ono ułatwia życie:
Kod ma na celu ilustracje problemu a nie poprawność (public, podzielenie na pliki).
Stronę, o której kilkakrotnie wspominałem(http://glib.mojastrona.dyndns.org/ - na razie nie działa) mam zamier przestawić na JCM - autorskiego CMSa.
W założeniach ma być:
Elementy:
Co z tego wyjdzie, zobaczymy. Czy ktoś zna coś, co mogłoby mi zaoszczędzić pisania Magazynu?
PS. JCM będzie miał oczywiście licencje OS.
Oprogramowanie obiektowe jest 'super'. Do wszystkiego(przykład PHP) dodaje się obiekty. Czy jednak aby zawsze jest to słuszna droga?
Nie da się zaprzeczyć, że w kilku dziedzinach jest to słuszne podejście(GUI), ale czy jednak zawsze?
Oprócz sprawdzania typów(w kompilatorach innych niż gcc) co zyskaliśmy?
int fd w uniksach nie zawsze jest plikiem.Często mówi się o programowaniu modułowym, gdzie zmiana jednego elementu wpływa na drugi. Odpowiedzią na to jest tylko to, że można porównywać zły kod modułowy z dobrym kodem obiektowym. W programowaniu funkcyjnym mamy tak hermetyczne funkcje, że nie mogą one nic zmieniać poza.
Zupełnie też nieznanym, ale dosyć ciekawym podejściem, jest programowanie logiczne. Połączenie tego z obiektami zaowocowałoby jakimś gniotem lub językiem UF.
Zaniedbuje pisanie.
Na usprawiedliwienie mam tylko dużą ilość zajęć i przepisywanie strony(nie działa) na jsp.
Wczoraj dowiedziałem się, że do października br. MS oferuje bezpłatną wersje VS.NET. Postanowiłem dowiedzieć się o co tyle 'szumu' i postanowiłem ściągnąć (na sąsiedni komputer w WinXP, ktory jest szybszy od mojego i mogę go wykorzystywać do 'służbowych celów') - tylko nie bijcie.
'Znam' 3 IDE dla języków .NET i pozwolę sobie je tutaj porównać
| MonoDevelop 0.9 | #Develop 2 | MS Visual 2005 EE | ||
|---|---|---|---|---|
| + Jest/Jest jako plugin, - Nie ma, ? - może jako plugin... Miejsca są pozytywne (tzn. 1 to najgorsze pod tym względem) | ||||
| Języki | Boo | + | + | - |
| C# | + | + | + | |
| C++/CLI | ? | ? | + | |
| Java | + | ? | - | |
| J# | ? | ? | + | |
| Nemerle | + | + | - | |
| VB.Net | + | + | + | |
| Razem | 5 | 4 | 4 | |
| Interface | Wywrotność | 1 | 3 | 2 |
| Podpowiedz | 2 | 1 | 3 | |
| i18n | 2.5 | 2.5 | 0 | |
| Spójność | 3 | 2 | 1 | |
| Razem | 8.5 | 8.5 | 6 | |
| Licencja | Open Source(3) | Shareware(1) | ||
| Razem | 16.5 | 15.5 | 11 | |
| Moja ocena | 11 | 11 | 9 | |
W porównaniu z innymi VS.NET wypada moim zdanie dość blado. Szczególnie np. w VS C# nie mogę znaleść ustawień, gdzie powinny być projekty, które w VS C++ znajdują się bez problemu :) . VS C++ potrafi także 'samo' tworzyć rozwiązania(solution). Zdarza sie więcej zawieszeń niz np. przy #Develop 2 beta.
| C(według tego) | C++(na oko) | C#(na oko) | ||
|---|---|---|---|---|
| Metody ect. | 13+ | 13+ | 41+(!) | |
| Linie na oko | Nagłówek | 89 | 20 | 125 |
| Zawartość | 653 | 60 | ||
| Razem | 742 | 80 | ||
Wartości z C uwzględniają komentarze i GType(moim zdaniem można to skrócić). C++/C# nie uwzględnia obsługi zawartości.
Nie lubię C++. W ten sposób C i C++ są egzekwo na I miejscu. ;)
Jak ostatnio pisałem przepisuje projekt z Javy na C#. Po kilku problemach nareszcie pełna obsługa GUI 1/5 klas :) - teraz z górki...
Zastanawiam się, czy nie napisać własnego modelu do bardziej skomplikowanych rzeczy...
Ostatnio pracowałem nad pewnym projektem. Projekt miał być w Javie, wszystko ładnie, znalazłem biblioteki(Hibernate). I...
Nagle wczoraj wieczorem dowiedziałem się, że na Javie nie, bo za mało RAM'u na tym komputerze...
Jeśli nie pojdzie na .Net to pozostaje: Programista wiesza się razem ze swoim programem
Na ich usprawiedliwienie mam to, że te osoby, które wiedziały, że w Javie, nie znały komputera/nie wiedziały co to Java
Swoją drogą na [GNU/]Linuksie nie spotkałem zawieszonego programu. "Niespodziewanie kończą działanie", ale nie zawieszają się