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.
Miałem dziwny problem z WinInet. Nie chciało mi działać poprawnie Basic Authentication przy wysyłaniu requesta przez HttpSendRequestEx. Mimo, iż przy łączeniu dane niezbędne do autoryzacji zostały podane w InternetConnect, w wysyłanych nagłówkach na darmo było szukać linii zaczynającej się od:
Authorization: Basic ... Pozostało poszukać w sieci jakiegoś rozwiązania. Sam Microsoft proponuje rozwiązanie tego problemu w sposób opisany tutaj: How to use HttpSendRequestEx with password-protected URLs.
Oczywiście w HttpSession dorzuciłem tylko HttpSendRequest do metody RequestPostMpfd i wszystko zaczęło działać.