Haszowanie stringów z wykorzystaniem prostego algorytmu Roberta Sedgwicksa z książki “Algorithms in C”.
Według testów różnych prostych algorytmów opublikowanych na stronie Hash Function Efficiency, można zauważyć, że to właśnie RS jest prostym i mało kolizyjnym algorytmem. Dlatego wybrałem go do użycia w swoim projekcie, do haszowania nazw funkcji serwisowych, eventów, hooków.
Jego najprostsza implementacja w C++:
unsigned int RSHash(char* str) { unsigned int a = 63689; unsigned int b = 378551; unsigned int hash = 0; while (*str) { hash = hash * a + static_cast<unsigned char>(*str); a = a * b; str++; } return hash; } W źródłach mirandy, użyty przez nią algorytm znalazłem w wersji C i Asemblera, więc naszła mnie mała ochota, aby mój algorytm również nieco zoptymalizować i przy okazji przypomnieć sobie bebechy asemblera ;)
Mój HttpSession jest trochę “do dupy”, bo uzależniony jest od Windowsa i jego WinInet. No cóż, potrzebowałem na szybko jakąś łatwą i prostą obsługę sesji HTTP pod tymi okienkami, więc powstała ona taka jaka jest.
Od dawana chodzi mi po głowie mała refaktoryzacja. Wydzielenie publicznego interfejsu i uniezależnienie się od systemu. Wersja Windowsowa oparta dalej na WinInet, a wersja Unixowa na cURL. Wtedy nawet Ci, co nie bardzo chcą patrzecć na WinInet, mogą poprzez jedną flagę wykorzystać w windowsowej wersji także cURL-a.
Drażni mnie jak niektórzy wstawiają spacje przed niektórymi znakami interpunkcyjnymi. Co oczywiście nie jest zgodne z zasadami gramatyki, semantyki, czy czegoś tam, w języku polskim i nie tylko.
W pewnym projekcie, w którym obecnie pracuję, tłumacze właśnie mają małe zboczenie do wstawiania spacji przed “!” i innymi znakami. A zapewne kolegom deweloperom nie będzie się uśmiechała ręczna edycja plików.
Dlatego “machnąłem” prościutki skrypcik w Perlu ;)
#!/usr/bin/perl -pi.bak BEGIN { @ARGV or print "\nusage: .
Już jakiś czas temu zaopatrzyłem się w książkę “Język C++” Bjarne Stroustrupa, twórcy tegoż języka. Wydanie WNT z 1997 roku udało mi się w prawie idealnym stanie i w twardej okładce zdobyć “za grosze” na allegro ;)
Dziś otrzymałem drugą książkę Stroustrupa - “Projektowanie i rozwój języka C++” z roku 1996, również wydawnictwa WNT. Z tą różnicą, że książka nowa prosto z wyprzedaży WNT na allegro. Szkoda tylko, że miękka okładka i klejona.
Hah, znalazłem fajnego liba do SIP-a - PJSIP, a pisząc dokładniej, to taki mały framework do softphone-a czy VoIP-a:
Open Source, comprehensive, high performance, small footprint multimedia communication libraries written in C language for building embedded/non-embedded VoIP applications.
Open source SIP stack and media stack for presence, im/instant messaging, and multimedia communication.
PJSIP posiada dosyć duże wsparcie rozszerzeń i funkcjonalności oferowanych przez SIP (SIP extensions/features).
Wydaje się być idealną alternatywą dla sipXtapi, który mnie ostatnio trochę drażni, a na nim to miałem oprzeć pewien projekt klienta, nad którym obecnie pracuję.
Wczoraj zaktualizowałem bibliotekę Pinger++ o kilka nowych dodatków w API, a dziś nieco zmian we wtyczce Pingerek dla komunikatora Tlen.pl.
Główne zmiany to obsługa tagów w dodawanej wiadomości, bo akurat to jest mi potrzebne ;)
Changelog wersji 0.7 beta:
tytuł i tagi przy dodawaniu wpisu; wiadomości obserwowanych; możliwość określenia ilości pobieranych wpisów; powiadomienie o nowych wpisach znajomych; Aktualną wersję wtyczki można pobrać z forum ekipy w temacie poświęconym pluginowi oraz mojej strony projektu.
Moja implementacja prostego programu graficznego - Painta - na “swingu” w Javie.
Program zaliczeniowy z laborek Javy na uniwerku. Planowana była większa funkcjonalność, co można zauważyć po pozycjach w menu i paskach narzędzi, ale niestety z braku czasu tylko kilka funkcji działa prawidłowo :)
Źródła programu dostępne na licencji GPL i można je pobrać wraz z całym projektem NetBeans’a z projects.malcom.pl.
Mój pierwszy i ostatni program w Javie ;)
Biorąc laptopa na zajęcia na uniwerku wkurza mnie ciągłe zmienianie ustawień sieci, głównie adresów IP, aby podłączyć się do sieci. Dlatego postanowiłem poszukać, ewentualnie napisać prosty programik do szybkiej i wygodnej zmiany ustawień sieciowych z kilku zapisanych konfiguracji.
Jednym z ciekawszych programów, jaki znalazłem to Shock IP Changer. Gdybym miał sam napisać swoją wersję to pewnie wyglądałby podobnie ;)
Sądząc po zachowaniu programu, prawdopodobnie do zmian konfiguracji sieci wykorzystuje on narzędzie wiersza poleceń - netsh.
Pisałem kiedyś jakąś bibliotekę do obsługi API serwisu grono.net. Głównie na potrzeby aplikacji lub pluginu tlenowego na konkurs gronowy. Ale jak się później okazało plany się zmieniły i zaniechałem brania udziału w konkursie, przez co projekt biblioteki został zarzucony.
Niestety przed porzuceniem projektu, został on zaaprobowany jako projekt zaliczeniowy z programowania na uniwerku, i tak się złożyło, że wczoraj musiałem istniejące źródła doprowadzić do działania na dzisiejszą prezentację projektu.
Pamiętam, że w planach miał być bardziej abstrakcyjny i obiektowy model, ale ostatecznie przyjąłem kilka prostych rozwiązań, jakie zastosowałem w Pinger++.
Wypuściłem na LGPL-u napisaną w języku C++ bibliotekę Pinger++ służącą do łatwej komunikacji z serwisem pinger.pl.
Biblioteka implementuje w pełni publicznie dostępne API serwisu, a nawet trochę więcej niż zawarto w dokumentacji dostępnej pod adresem pinger.pl/_/main/api. Wymiana danych następuje w formacie XML, do którego parsowania użyto libxml2, a obsługę sieci i sesji HTTP dostarcza moja prosta klasa HttpSession.
Ze względu, iż Pinger++ implementuje w pełni API serwisu, a metody i ich argumenty odpowiadają znaczeniowo informacjom zawartym w dokumentacji API, dlatego aktualnie zrezygnowano z jakiejkolwiek dokumentacji biblioteki.