Ostatnio bawię się w rozwijanie własnego systemu operacyjnego. Wspaniała sprawa jeśli ktoś myśli, że wszystko wie ;)
W trakcie wyszło na jaw, że muszę zaimplementować synchronizowany zbiór (dokładniej rzecz biorąc - nieużywanych stron). Ale czekanie na mutexie nie wydaje się optymalną strategią. Poszukałem więc algorytmów lock-free. Na początek przyszedł stos.
Chciałem napisać sterownik dla modemu USB pod OpenBSD. Instalacja pod qemu nie spowodowała większych trudności. Współdzielenie plików między hostem a gościem trochę większe (qemu współdzieli przez smb a OpenBSD nie wspiera ani smbfs ani sshfs) ale w końcu udało się (tcp redirection + sshfs).
Zdobycie źródeł OpenBSD też nie nastarczało trudności. Kłopoty zaczeły się dopiero potem...
Prosty kod który ma jedno zadanie - resetować połączenie gdy nie może spingować czegoś. Nie jestem pewien czy czekanie działa.
Kod jak zwykle na MIT.
Umieściłem wersję 0.0.1 na lauchpadzie. W międzyczasie wyszło kilka wydań. Obecne są dwa milestony nazwane roboczo 0.0.10 i 0.0.15. Kłopot polega na tym, że zbliża się wersja 0.0.5 która, jak wszystko się uda, będzie zawierała wszystkie wymagania dotyczące 0.0.10.
Nie mogłem znaleźć dobrego programu do grafów. Gnuplot jest niestety zbyt skomplikowany i ma za dużo opcji. Napisałem, w połowie na kolanie własny program do rysowania ich. Na razie rysuje w formacie SVG, ale planuje dodanie innych formatów (zapewne pojawi się warstwa pośrednia). Program jest napisany Rubim i korzysta z biblioteki SVG.
Składnia pliku jest następująca:
Nowa wersja ignorująca białe linie na końcu i na początku oraz ignorująca kod z klasą inline
<pre>, dotychczas stosowane na tej stronie, okazało się niezgodne z w3c.
Często się mówi, że tabela jest wyklęta. To nie prawda - tabela powinna być wyklęta jako sposób projektowania stron/formularzy a nie jako sposób prezentacji danych, który w sposób naturalny są tabelami. Idąc tym tropem W3C zabroniło stosowaniaznacznika <form> w <tbody> i <tr>.
Wszystko by było w porządku, gdyby nie przyszło mi do głowy zaprezentować danych jako tabela. Na razie wszystko gra. Wpadłem na prosty pomysł - zastosowanie ostatniego pola jako pola dodawania nowego rekordu:
Przymierzam się do zabezpieczenia się przed tym co czeka mnie w lipcu (tak ten sam wspaniały firewall blokujący ssh). Ponieważ OpenVPN otwarte na porcie innym niż 80, 443 etc. na pewno zostanie zablokowane (zablokowali nawet 8080) a 80, 443 są już w użytku. Przydałoby się coś napisać...
Dzięki jQuery. Jest również o połowę krótszy.
Zaczeło się niewinnie - dlaczego nie mieć Google Calendar i Google Mail w Evolutionie 'natywnie (czyli nie przez POP3 i ro ical)? W chwili obecnej nie istnieje żadna biblioteka dla Google Calendara pod C. Instnieją natomiast pod Javę, C# i pythona.
Nie wiem, czy jest już coś takiego.
Wsparcie niby do zapisu jest, ale nie działa. Nie mam siły/czasu żeby to zdebugować. Na razie wypuszczam wersje 0.0.1.90. Mam nadzieje, że wersja 0.0.2 będzie ostateczna ;)
GConfFS wykorzystuje FUseFS i ruby gconf2
Jeśli licencja FUseFS okaże się niewolna przepiszę na Mono (ktoś wie, czy mam trzymać się pliku README, czy COPYRIGHT?). Na razie jest to opublikowane na MIT'cie
Szukam dobrego frameworku AJAX. Który?
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?
... 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?
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.
Wszystkie informacje o sowie (w moim łamanym angielskim ;) ) będą teraz na Sowa Blog.Każda pomoc mile widziana :)
Dodałem klasy abstrakcyjne i poprawiłem kilka błędów.
Sowa Data Capacitor 0.0.0 dev0 już jest. Jak widać Na razie wersja niestabilna (tak na prawdę nie ma 100% funkcjonalności wersji 0.0.0).
Zapraszam do testowania.
Z JVM (zarezerwowane na sf.net) na Sowa.
Jestem otwarty na nowe zmiany, jesli wie ktoś, jak to zmienić na sf.net
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:
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.