Archive for září, 2006
Cache Manager v pRSSreaderu
Cache Manager je v pRSSreaderu pekna brzda. Porad se tam na neco ceka. Aby dobre fungoval, potrebuje Cache Manager, aby byly vsechny site naloadovane. Ale protoze, plnej site load jsem vyhodil, dokonce se uz site ani nenahravaji na pozadi, musi se pred startem Cache Manageru provest uplne nahrani vsech site. Jenze to trva. Obycejny “hodiny” byly dost pitomy, pac se nevedelo, jestli to neco dela, jak je to daleko a vubec.
Takze jsem pristoupil k zneuziti tridy CProgressDlg, ktera slouzi pro zobrazeni stavu dlouho trvajici operace. Ukazeje co se deje a progres, z kteryho je videt, jak jsme daleko. Takze plnej site load se dela ve tride CCacheAnalyzeDlg, ktera dedi prave po CProgressDlg.
Dalsi brzda je, kdyz user tapne na Clear Cache. To se musi vzit vsechny soubory, ktery chceme nechat, a pak projit adresarovou strukturu a vymazat ty, co nechceme nechat. Peknej hnus. Tady se cinnost opet indikovala “hodinama” a obcas to fakt trvalo dlouho. Jediny zlepseni je, ze ted to jede pres potomka CProgressDlg (jmenuje se CCachePurgeDlg).
Posledni brzda byla, kdyz user zmenil stav nacachovani, tj. pridal neco, co nebylo nacachovano, nebo ubral neco, co nacachovano bylo. Puvodni verze prosla tree control a zjistila, co se zmenilo, vymazala, to co se melo vymazat a vratila ven seznam toho, co se melo pricachovat. Sestaveni tech seznamu zase nejak moc trvalo. Takze jsem to vylepsil tak, ze uz kdyz user meni nacachovani, tak se ty seznamy vytvari a pak se to jen rychle smaze – pouzivame uz vytvorenou tridu CCachePurgeDlg.
Lahudka
Jak jsem si tak premyslel, kde to v pRSSreaderu jeste drhne, tak mi doslo, ze kdyz se prechazi v CNewsDlg z jedny site na druhou, tak se ceka na nahrani ty dalsi site. Jenze kdyz je ten soubor velkej a sloztej, tak to trva. Toz me napadlo, ze by se tu hodil nejaky preloading na pozadi. Tak jsem ho teda udelal a ted jsou prechody rychly. Preloaduje se predchozi (kdyz by nekdo zacal cist obracene :-D) a nasledujici. Dela se to na pozadi, takze pribylo zase jedno vlakno. Za chvili se v tom uz nikdo nevyzna. Tyhle GUI veci jsou fakt odporny – neztratit interaktivitu s uzivatelem, takze vykonny kod do vlakna a GUI taky. Tfuj! No ale aspon pRSSreader nebudi dojem amatersky splacaniny.
pRSSreader 1.3.3 beta
Jeste mi chybi dodelat podporu pro HW klavesy – porad se k tomu nemuzu dostat – a opravit jednu dementni chybu, ktera souvisi jak jinak nez s updatem a vlaknama a mohlo by se to dat ven k testovani. To zase bude bug reportu… A jeste budu muset aktualizovat lokalizace – nechci!
Ze zivota
Byl jsem si procistit hlavu na Radobylu, nejak mi to softeni leze na mozek. Na disertaci jsem zase nehrabl :( Jinak se nic zvlastniho nedeje. Za mesic a kousek jdu na TOEFL. Ach jo…
Vyslo LiterakiPPC 0.0.4 BETA – pravuje nejaky chyby a pridava novy veci. Zatim je to jako freeware, ale Piotr chce dat finalni release jako komercni :(
Upravil jsem si theme ve fluxboxu, takze ted vypada jeste lip nez kdy pred tim.
Taky jsem zjistil, ze nejak nemusim pouzivat adesklets, takze jsem je vyhodil z plochy a zvetsil okno s root-tailem.
Hudba
Joe Satriani
Add comment září 30, 2006
Vyjimka
Vzdycky me potesi, kdyz se nekde objevi vyjimka. Neco/nekdo co/kdo vybocuje z masy. Dneska me potesila Yvetta Hlavacova svym vystoupeni v poradu Jana Krause Uvolnete se, prosim.
Obycejne, kdyz slysite nejakeho sportovce mluvit, tak to vazne stoji za to. Nesouvisle mele paty pres devaty, nema to hlavu ani patu. Hlava vetsinou vymyta. Myslenky by se clovek nedohledal. Jasne, jasne, sportovci tu nejsou od toho, aby mysleli. O to radsi jsem byl, kdyz jsem slysel Yvettu. S panem Krausem bravurne drzela krok a ma skvely smysl pro humor. Tak hlavne, aby ji to dlouho vydrzelo…
Add comment září 29, 2006
Refactoring HTTP klienta v pRSSreaderu
Probudil jsem se dnes s naladou dat do poradku bordel v implementaci HTTP klienta v pRSSreaderu. Zlate pravidlo sice zni: Kdyz neco funguje, nerejpej se v tom, ale jak se veci postupne nabalovaly, zacal byt HTTP klient pekna zrudicka.
Dodnes to v pRSSreaderu fungovalo tak, ze existovala trida CHTTPClient, ktera se pripojila k serveru, dokazala na server poslat data, precist data ze serveru. Casem pribyla moznost pristupovat na serveru pres proxy (SOCKS a HTTP). Nedavno jsem dopsal HTTPS. Tridu CHTTPClient pak vyuzivala trida CDownloader, ktera zajistovala logiku HTTP (pripojit, poslat pozadavek, prijmout odpoved, udelat authentikaci, zpracovat chybove stavy, atd.)
Dneska jsem procistil kod, vnitrne ucesal, vyhazel nektery epotrebny metody a datovy cleny. Take jsem vydelil novou tridu CHttpSocket, ktera zapouzdruje socketi funkce. Takze je to ted prehlednejsi a lip se to bude udrzovat.
Ale zjistil jsem zasadni problem. Nefunguje mi HTTPS zpoza proxy serveru. Tohle budu musel dodelat behem beta testovani, ted na to nemam naladu. Ani nevim jak na to. Musim si to nechat projit hlavou.
V souvislosti s refactoringem kodu, ktery se stara o HTTP, jsem zkousel jak je to s tim spojenim pres ActiveSync. Zase jsem stravil par hodin na groups.google.com a hledal. Uz se mi podarilo najit 2 lidi, ktery maji stejny problem. Sranda je, ze jim na jejich otazky nikdo neodpovedel :( Porad se tvari, ze popisovany problem neexistuje. Asi jeste nepsali RSS reader s masivnim cachovanim :) Zkousel jsem vsechno mozny, od prehazovani kodu po alternativni DNS resolvovani, ale nic zasadniho to neprineslo. Zajimavy zjisteni je: kdyz uz se nejde pripojit treba na news.google.com, tak se tam nikdo nepripoji – ani PIE. Takze PIE nedela zadny mind hack na ActiveSync, ktery by zajistil, ze se vzdy pripoji. Muze se to podelat. Jak to tak vypada, problem se od connect prenesl lehce smerem k DNS resolvovani. DNS se sice resolvne a connect() pak kiksne, ale problem bude asi v DNS cachovani na strane ActiveSync. Nechapu, jak muze takova chyba prezivat tak dlouho. Tady musim pochvalit vyvojare SynCE, ktery slape jak ma, ale IMHO to bude tim, ze linux na lip zpracovany TCP/IP stack nez Windows. Dal jsem zjistil, ze kdyz pres kazdym pozadavkem hodim Sleep(2000), tak je problem s Connection refused mensi, cili pripoji se to na vic siti. Jakoby se AS potreboval vzpamatovat z toho zahulu co na nej PDA chrli. Asi neni stavenej na rychlejsi prenosy, coz by vysvetlovalo, proc spojeni pres WiFI a BTH funguje.
Deni ve svete
Uz delsi dobu je mezi nami kernel 2.6.18. Uz se na nej tesim, doufam, ze uz mi pujde poradne MIC na laptopu. V 2.6.17 se ozval jednou, ale pak to nejak prestalo pracovat, nevim proc :( Uz se tesim, az se kernel objevi ve feedu packages.gentoo.org. A vubec nejlepsi bude az se objevi kernel 2.6.18-suspend2.
V souvislosti s MICem jsem vcera zahlidl novou verzi ALSA (1.0.13_rc3), takze nadeje na funkcni MIC jsou velke.
Taky je novy wine (0.9.22), tak si asi zkusim nainstalit nejakou strasi gamesku – kupr. AOEII. Ale nevim jak pak budu psat tu distertacku :)
Dalsi prijemna vec: lm_sensors jsou ve verzi 2.10.1. Cekam na ebuild a doufam, ze konecne budu moci monitorovat teplotu CPU a HDD v laptopu.
Jinak
Jinak jsem zase dostal par stupidnich majlu, ktery si stezovaly na veci, se kteryma moje prgy nemaji nic spolecneho. Zase se ozval jeden, co neumi cist. A zase me vytocili dementi, ktery telefonuji do rozhlasu a neumi se vyzvejknout. Standard.
Hudba
Ozzy Osbourne, R.E.M.
Add comment září 29, 2006
Detekce spojeni s ActiveSync
Celkem dlouho jsem na netu hledal, jak zjistit, ze zarizeni bylo pripojeno k desktopovymu PC pres ActiveSync. Hodi se to, kdyz potrebujete zprostredkovat PDAcku pripojeni k internetu, ale nemate/nechcete se pripojovat pres GPRS/WiFi/atd. Pokud je desktop pripojenej do netu, tak jde vyuzit tohoto spojeni, k cemuz vam pomuze ActiveSync. Do celkem dlouhem hledani jsem na to tedy nejak prisel a delal jsem to takhle:
u_long deviceIP = GetDeviceIP();
// zmenila se IP adresa?
if (deviceIP != LastDeviceIP) {
if (deviceIP == GetUsbCableIp()) {
// Cradled!
return TRUE;
}
LastDeviceIP = deviceIP;
}
return FALSE;
Funkce GetUsbCableIp() enumeruje sitove adaptery a kdyz najde adapter s nazvem 'USB Cable:', tak vrati jeho IP adresu. Tohle mi funguje celkem spolehlive, presto si nekteri uzivatele stezovali, ze detekce cradlingu nejak pokulhava.
Kdyz jsem hledal, proc mi poradne nefunguje spojeni pres ActiveSync, nasel jsem zminku o domenovem jmenu ppp_peer. Pokud zavolame gethostbyname("pp_peer"), ziskame nasledujicim kodem IP adresu desktopoveho PC, ke kteremu jsme pripojeni:
u_long nRemoteAddr = 0;
lpHostEntry = gethostbyname("ppp_peer");
if (lpHostEntry == NULL) {
nRemoteAddr = INADDR_NONE;
}
else {
nRemoteAddr = *((u_long *) lpHostEntry->h_addr_list[0]);
}
Pokud jsme pripojeni, IP adresa by mela byt vzdy 192.168.55.100, coz je pry jeste z historickych dob Windows CE 1.0 a 2.0. Takze zjisteni, zda jsme pripojeni se nam zasadne zjednodusuje. Pokud neni zadne pripojeni funkce vrati 255.255.255.255, pokud jsem pripojeny pres dial-up (BTH k telefonu), vratila funkce 0 a pokud jsem byl pripojen pres NAP nebo WiFi, tak jsem dostal zase 255.255.255.255.
Jeste uvidim, jak to projde beta testovanim. Verim ale, ze to bude ok.
Add comment září 28, 2006
Spojeni pres ActiveSync v pRSSreaderu II.
Takze konecne jsem se dostal k otestovani spojeni pres ActiveSync. Nastavil jsem, aby AS pouzil misto ‘The Internet’ spojeni ‘Work’, pustil plnej update. Vysledek? Porad to ma problemy se to pripojit. Chybovy kod je 10061, coz je ‘Connection refused’ – sluzba nebezi. To je ale kravina, protoze sluzby bezi, jelikoz se na ne da pripojit. Takze jsem tam, kde jsem byl. A porad to vypada na neco vyprasenyho v ActiveSync, ale co to je, to teda nevim a nevim, jak to ten PIE dela, ze se porad dokaze pripojovat.
Nejaky tutorialek od MS by neskodil…
No nic, jdu zkoumat dal, treba na neco narazim. Zkusim zdrojaky k minimo, tam bych na neco narazit mohl…
Add comment září 28, 2006
Cachovani priloh (enclosures) v pRSSreaderu
Dneska jsem opravil chybu v cachovani priloh – enclosures. Kde byl problem? Pokud feed nabizel prilohu, ktera mela URL ve tvaru server-cesta-soubor-pripona, bylo vse ok. Pokud ale bylo URL ve tvaru server-cesta-soubor-pripona-parametery, tak priloha nesla otevrit. Problem byl v tom, ze se spatne zjistovala priloha.
Takze jsem predelal zachazani s priponou. Vzal jsem soubor, zjistil cim ho otevrit, predal shellu a celak, ze shell se o zbytek postara. Ale ouha. Shel sice pustil aplikaci, ale soubor neotevrel. Problem je v tom, ze soubor nekonci tou spravnou priponou.
Takze jsem kompletne upravil prepisovani URL na soubory v cache. Nyni se pripisuji do tvaru server-cesta-soubor-paramtery-pripona. Tim padem uz se otevre vsechno dobre, ale problem je v tom, ze to neni uplne zpetne kompatibilni. Takze to co bylo nacahovano drive nemusi pRSSreader v cachi videt :(
V souvislosti s tim jsem jeste opravil chybu pri mazani obrazku, ktere jsou linkovany primo feedem. V testech cachuji obrazky z feedu google news a slashdotu. Ale obrazky se nemazaly. Dneska jsem prisel na to proc. Vtipne umistena podminka if (!IsFileExists) pri ziskavani seznamu obrazku ve feedu toho byla pricinou. A pak se divim, proc to vraci prazdny seznam.
Add comment září 28, 2006
Software pro Pocket PC
Dneska jsem zahlidl ve feedu freewarepocketpc.net dve aplikace – Task Manager v1.0 a RSS reader v1.0. Obe od cloveka, ktery se podepisuje jako Blade2032.
Pripomina mi to moje zacatky s Pocket PC. Kdyz jsem si PDA poridil, zacal jsem hledat v neprebernym mnozstvi freewaru utility, ktery bych mohl nainstalovat a pomohly mi pri praci. Je pravda, ze v unoru 2005 opravdu dobreho freewaru mnoho nebylo. Hodne programu bylo starych nepodporovaly VGA screen a nebo trpely nedodelky. Predstavuji si, jak takove programy vznikaji. Nekomu neco chybi, umi programovat, tak sedne a napise to. Da to ven a lidi to pouzivaji. Kdyz ma cas tak to vyviji dal, ale jak to tak byva, casu moc neni, prijde prace a vyvoj se zastavi. Na freeware nevydelate – je to spis takovy konicek.
Ja jsem takhle napsal svuj prvni soft – Birthdays, ktery je celkem popularni (okolo 5 tisic downloadu za mesic). Pak jsem potkal program, ktery se jmenoval RSS Info Pocket Feed. Byl napsan pro .NET CF v1.0. Moje PDA ma .NET framework v1.0 predinstalovan, takze no problem. Bohuzel na to, jak byl program jednoduchy, byl zalostne neschopny. Tak jsem sedl a pres vikend napsal Pocket RSS Reader. Melo to bratru 3000 radku v C++. A rikal jsem si jakou to mam super RSS ctecku. Kamos me presvedcil, at to dam ven k dispozici lidem. A tak se stalo. Najednou zacaly chodit feature requesty a ja zacal implementovat. Taky se mi ozval clovek z happyjackroad, ze si lidi pletou muj soft (!) s jejich komercnim (PocketRSS). Tak se Pocket RSS Reader prejmenoval na pRSSreader (na palmare to povazovali za dulezitejsi informaci nez jaky ma soft funkce). Ale je pravda, ze tenkrat to nic moc neumelo – udrzovalo to seznam feedu a stahovalo to XML, ktery to zobrazovalo. Tak takhle nejak zacal pRSSreader, ktery ma ve verzi 1.3.2 okolo 70 000 radku a funkci, ze by je na prstech jedny ruky nespocital.
Jak sel cas dal, zacal mi chybet task manager – proste neco na prepinani uloh, prip. na opravdove ukonceni alikace, ne jen minimalizaci. Celkem ok byl VisBar, ale nepodporoval VGA screen. Takze jsem si napsal tMana. Kupodivu to pouziva nejak moc lidi. Je to ve verzi 0.9.x, cili to jeste nic neumi a moc to nefunguje, ale i presto to lidi pouzivaji. Na spadnuti je uz verze 0.9.5, ktera bude opravovat mnoho chyb, bude asi nejrychlejsi z dosud vydanych a hlavne nejstabilnejsi. Doufam, ze se nekdy dockam verze 1.0 :)
Ale proc to vsechno pisu? Blade2023 bude nekdo jako ja pred rokem a pul. Ale myslim, ze udelal zasadni chybu, ze pouzil .NET CF 2.0. Lidi si nic takovyho moc nechteji instalovat (.NET CF v2.0 neni zatim na zadnem systemu predinstalovan). Je to jeden z duvodu, proc pisu nativni kod. Ale urcite se mu to bude psat rychleji nez me. C++ prilis zdrzuje, v C# v .NET CF 2.0 uz ma spoustu veci hotovych. Tak uvidime, jak se to bude vyvijet…
I kdyz spis nez o programovani a funkcich je to o tom, jestli clovek dokaze udrzet kod v case. Me se to zatim celkem dari. Spis narazim na problemy s casem nez na problemy technickeho razu.
Add comment září 26, 2006
Spojení přes ActiveSync v pRSSreaderu
Cely dopoledne jsem zabil s hledanim chyby v pRSSreaderu. Problem je ten, ze kdyz se pripojim pres ActiveSync, dokazu se pripojit asi ke 12 serverum a pak mi connect() vraci INVALID_SOCKET. Ten problem je v pRSSreaderu uz dlouho. Obchazim to tak, ze se pripojuju pres BTH k notasu nebo jedu pres WiFi. Tam neni zadny problem. Kdyz se pripojim pres SynCE, tak to jede taky ok.
Vypada to, ze ActiveSync nejak cachuje spojeni a nechce je zapominat (ale co jsem se docetl, tak by mel fungovat jen jako router). Kdyz udelam soft-reset, tak se muzu pripojovat dal. Na strane PDA asi problem nebude, protoze by to blblo i Linuxu, ale tam to slape. Proto podezrivam ten ActiveSync (cert vi, co to tam vyrabi). A hlavne jak to, ze funguje PocketIE.
Na groups.google.com jsem hledal par hodin a hledal lidi s podobnym problemem, ale nic jsem nenasel. Jeden post uz vypadal, ze to bude ono, ale tam byl problem se send()/recv() a rada byla, ze spatne zavira spojeni. Ja spojeni zaviram urcite dobre – delam to podle jednoho fajn tutorialu. Princip je: shutdown(socket, SD_BOTH), precist, co zbylo ve fronte na prijmu, closesocket(socket). V mnoha kodech jsem viděl jen shutdown(); closesocket(); a vsichni hlasili, ze to beha ok. Ale oni se pripojovali jen k jednomu stroji. Vyzkousel jsem tade i tuhle variantu a nic.
Taky jsem nasel zminku, ze ActiveSync muze mit problemy s dlouhymi packety. Ja nacitam do bufferu, ktery je dlouhy 2048 byte. Rada znela zmensit buffer na 511, ale taky mi to nepomohlo.
Taky jsem narazil na nějakou tabulku, ktera ukazovala, ze kdyz je v ActiveSync nastaveno spojeni jako ‘The Internet’, tak nejdou TCP/IP spojeni. Ale to je nejaky divny, protoze me jdou – sice omezene, ale jdou. A nebo jsem to blbe pochopil. S tim si budu hrat odpoledne.
Hodne zvlastni je, ze si na tuhle chybu stezuje jen mala cast lidi – radove jednotky. Pritom bych ocekaval minimalne desitky.
Add comment září 26, 2006