W starym kochanym laptopie był fajny i przydatny klawisz funkcyjny pod F7 służący do wyłączania/wygaszania ekranu LCD. W aktualnym sprzęcie rozkład klawiszy funkcyjnych trochę się zmienił i strasznie brakuje mi owej funkcji. Zamiast tego pojawił się skrót do menadżera kart bezprzewodowych, włączania/wyłączania Wi-Fi i Bluetooth.
Opisywana funkcjonalność bodajże sprzętowo wygaszała LCD, a po ponownym naciśnięciu zapalała. Namiastkę tej brakującej opcji można w bardzo prosty sposób rozwiązać programowo, tworząc np. skrót na pulpicie do szybkiego wyłączenia monitora.
Wreszcie sobie wymieniłem mojego starego laptopa - Asusa A2500H z procesorem P4 2.8GHz i marnymi 512MB RAM-u na coś bardziej aktualnego. Ten nowy sprzęt to VBI z asusowym kadłubkiem S96S i intelowskim procesorem T9300, czyli dwu rdzeniowy grzmot po 2.5GHz na rdzeń z 6MB L2 cache i magistralą 800 MHz. Do tego po 2GB pamięci RAM przypadającej na rdzeń (4GB/800Mhz) i jakiś tam hdd o pojemności 320GB. Reszta standardowa, jak w większości konfiguracji opartych na ASmobile S96S.
Udało mi się wreszcie opisać sposób i algorytm autoryzacji w usłudze Gadu Radio. Wykorzystałem materiały udostępnione przez AQQKillera oraz własne analizy i spostrzeżenia wynikłe w czasie prac nad wtyczką “Gadu Radio” dla komunikatora Tlen.pl.
Wprowadzenie Gadu Radio to najpopularniejsze polskie radio internetowe. Po raz pierwszy zaczęło nadawać we wrześniu 2006 roku. Obecnie słucha je już 250 tys. osób dziennie i ponad 1,2 mln osób miesięcznie.
Jest to typowa usługa internetowej rozgłośni radiowej nadająca swoje audycje przez Internet za pomocą przesyłania strumieniowego, wykorzystując odpowiednie oprogramowanie serwera mediów strumieniowych, w tym przypadku oprogramowania fundacji Xiph.
Znalazłem chwilkę czasu na mały update wtyczki Gadu Radio dla komunikatora Tlen.pl.
Główne zmiany w wersji 2.0 wtyczki:
przepisano większość kodu (na oop); naprawiono kilka błędów w kodzie, wycieków, deadlocków i innych paskudztw; możliwość ustalenia z jakiego konta gg ma korzystać wtyczka; możliwość ustalenia adresu serwera pool; usunięto link do oficjalnej strony Gadu Radia; dodano ulepszone wycinanie “śmieci” (“w Gadu Radio” etc.) z tytułów; wyłączono generowanie hasha i ustawiono stałą wartość w kodzie; Jak napisano wyżej, większość kodu wtyczki przepisano, co powinno rozwiązać kilka błędów występujących w poprzednich wersjach związanych z wyciekami, wątkami i innymi takimi…
Potrzebowałem jak najprostszym sposobem uzyskać efekt alpha blending (przezroczystość). Z racji, że nie miałem o tym większego pojęcia1 to próbowałem zaczerpnąć informacji w niezliczonych zasobach sieciowych ;)
Szukałem jakiegoś prostego sposobu wyznaczania średniej wartości składowej koloru danego piksela. W różnych źródłach znalazłem kilka różnych działań obliczających tę wartość, od bardzo prostych i wydajnych, to złożonych i ociężałych. Poniżej kilka znalezionych przykładów ;)
Na początek mała legenda używanej w dalszej części symboliki.
Tak, kompilator gcc będzie pisany w C++ ;)
To kolejna już migracja dużego projektu z C na C++. Choć ponoć z jądrem Linuksa się nie udało. Więcej o “gcc w cpp” można znaleźć w temacie gcc-in-cxx branch created rozpoczętym przez pomysłodawcę przedsięwzięcia - Iana Taylora.
Oczywiście wydarzenie to odbiło się echem także na polskiej grupie usenetowej dotyczącej C i C++, temat gcc in c++.
Pierwszym krokiem będzie doprowadzenie do kompilowania gcc w C++, a potem… Zobaczymy co z tego wyniknie ;)
O php-owych frameworkach… słów kilka… a raczej o jednym, bądź dwóch, małe przemyślenia…
Może na początku powinienem podkreślić, że aktualnie webdeveloperką zajmuję się już bardzo sporadycznie, głównie na własne potrzeby, więc nie siedzę na bieżąco w temacie php-owych frameworków.
Tak już jest, że obecnie wolę swoje kompilowane języki i desktopowe/systemowe aplikacje ;)
Na uniwerku, na zaliczenie z projektu muszę stworzyć panel do zarządzania serwerem usługowym. Jako serce zaprzęgłem Zend Framework. Już kiedyś coś tworzyłem z “jego pomocą” i nawet przyjemnie się pisało, tylko ta ociężałość, rozbudowana struktura i funkcjonalność czasem może sprawić trochę problemów.
Popełniłem sobie małego arta na temat dostępu do konsoli spod aplikacji GUI, opisującego jak najprościej rozróżnić czy aplikacja okienkowa została uruchomiona spod konsoli i jak do niej się dorwać, choćby po to by wyświetlić dostępne opcje linii poleceń naszej aplikacji.
Główna inspiracja do wgłębienia się w ten temat była obsługą linii poleceń w aplikacjach napisanych z wykorzystaniem toolkita wxWidgets. Tam właśnie dostępne opcje linii poleceń aplikacji GUI wyświetlane są w MessageBoxie, nawet, jeśli uruchamiamy ja spod konsoli.
Potrzebuje jakiejś ciekawej, prostej i optymalnej implementacji tablicy dwuwymiarowej do przechowywania prostych elementów lub wskaźników. Najprostszym rozwiązaniem byłoby wykorzystanie kontenerów z STL:
std::vector<std::vector<Element*> > array Szybko i prosto, tylko używać.
Ale pojawia się problem, bo chciałbym, aby pojedyncza linia zachowywała się jak czysta tablicą w stylu C (wymagania API).
Także można by bez problemu zastosować vectora w vectorze, ale… ale o tym później.
Moja obecna i pierwsza implementacja takiego kontenera oparta jest na vektorze, który zawiera wskaźnik na alokowana dynamicznie tablice wskaźników do elementów.
Na szybko taki krótki komentarz odnośnie STL-a…
Standard C++ zaleca w make_pair przekazywać elementy przez referencje, a kochane gcc mimo, że o tym wspomina, to “robi” to przez wartość ;)
Przez co proste dodanie elementu do std::map z wykorzystaniem std::make_pair w takiej postaci:
std::pair<my_map_type::iterator, bool> ret = my_map.insert(std::make_pair(key, value)); doprowadziło do 4-krotnego kopiowania obiektu. Za to zmiana tego na:
std::pair<my_map_type::iterator, bool> ret = my_map.insert(my_map_type::value_type(key, value)); zredukowała ilość kopiowania do 2.