Můj Androidí Hello World, aneb aplikace na počítání lhůt
November 15, 2010 Category: Programování, Právo, android No Comments »
Ráno se koná hackaton, kde se s naším týmem chceme dobře umístit jako programátoři pro zažízení Android. Nikdo z nás, ale na android nikdy předtím nic nenaprogramoval, takže jsme si každý naprogramovali nějaký ten hello world abychom alespoň věděli o co jde (a mohli to vyhrát
).
Já jsem si jako hello world aplikaci naprogramoval počítátko lhůt. Základním problémem totiž je, co proboha naprogramovat. Protože v poslední době ležím ponořen do právních knih, počítání lhůt byla jasná volba
Oč jde. Pokud někomu dáte lhůtu, například “Lomikare, do roka zvu tě na boží súd”, nastává otázka, kdy že se to má vlastně dostavit. Občanský zákoník toto řeší poměrně jasně, má se dostavit přesně v den, který má shodnou číslovku dne v měsíci a shodnou číslovku měsíce, ale o jedna vyšší číslovku roku. Pokud to tedy není víkend. A pokud to není státní svátek nebo třeba velikonoční pondělí. A nebo pokud ten den vůbec existuje, co kdyby Jana Sladkého Kozinu věšeli zrovna 29. února?
Toto vše a mnohé další naše aplikace řeší, již žádná právní nejistota, na kdy je vlastně Wolf Maxmilián Lamingen z Albenreuthu pozván k tomu božímu soudu.
Pro stažení aplikace buď dejte v marketu hledat “Počítání lhůt” a nebo načtěte následující kód:
Odvolávám co jsem prohlásil, došlo totiž ke změně!
January 8, 2010 Category: Programování No Comments »
Pri klasickém ročním vyhodnocování, který komentář je spam, jsem našel i svůj starší post Frameworky mě zdržují.
Cítím potřebu svů předchozí post odvolat a prohlašuji “Frameworky me již nezdržují”
(A stále používám primárně ten Zend FW)
Frameworky mě zdržují
June 30, 2008 Category: Programování, Zkušenosti 3 Comments »
Bohužel jsem zjistil, že mě frameworky zdržují. Pro svůj ročníkový projekt jsem si zvolil použít Zend Framework. Je to pěkné, dělá v tom kdekdo na “stojedenáctce”, je to free, je to cool, je to in, radost z toho má každý frikulín. Bohužel jsem zjistil, že framework, který si nenapíšu mě strašně zdržuje. Většinu času nevěnuji řešení problému, ale otázce “jak to či ono udělat v zendu”.
Zcela to není vina frameworku. Z části za to může “násilné zobjektování” projektu. Ale místo abych položil jeden obyčejný dotaz na databázi a programoval danou věc minutu s odladěním a testy, tak tím zabíjím dlouhé minuty. A to se nedá.
Dnešní spot nemá hlubokou myšlenku ani morální ponaučení, a mohl by se vlastně omezit jen na nadpis. “Frameworky mě zdržují”.
C++: Otočení řetězce. Pěkně.
June 21, 2008 Category: Programování, Ročníkový projekt, Zkušenosti No Comments »
Opět jeden ze série krátkých kuchařkových spotů, který by se vyjímal délkou spíše na twitteru… Kdyby byl twitter zaměřený na C++
Tak tedy:
String str z knihovny STL rychle otočíme zavoláním
#include
…
std::reverse( str.rbegin(), str.rend() );
Jak vidno, žere to nějaké obecné iterátory, takže ano, otočí to libovolnou věc, která se dá přes iterátor procházet. A to je na této knihovně pěkné, ne?
C++: Jak převést pomocí WinApi text z ANSI do TCHAR
June 10, 2008 Category: Programování, Zkušenosti No Comments »
Při psaní ročníkového projektu na mě vyskočil problém, jak převést text v ANSI, který přečtu z ini souboru do TCHAR se kterým pracují WinApi funkce. Děkuji matousecovi, který mě nasměroval na funkci MultiByteToWideChar, která má právě toto ve svém popisu práce
int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar );
Jako codepage se vyplatí dát ACP (active codepage), flags stačí nastavit na 0. Třetí parametr je ukazatel na převáděný řetězec, čtvrtý jeho délka, pátý ukazatel na cílový řetězec a šestý délka bufferu pro cílový řetězec.
Bohužel nic není tak jednoduché, jak by se mohlo zdát. Tato funkce převádí z ANSI do WCHAR, ne do TCHAR. TCHAR je hromada maker, která dle situace buď znamená char a neboo WCHAR. Druhá zákeřnost spočívá v tom, jak dlouhý buffer si naalokovat na výstup.
Pokud dáme čtvrtý parametr rovný -1, tak je očekáván vstup ukončený nulou a délku si to zjistí samo. Pokud navíc dáme poslední parametr rovný 0, tak funkce vrátí potřebnou délku bufferu, ale do samotného bufferu nepíše nic (ani ho nepotřebuje, stačí dát místo něj null).
Protože je práce se samotnými char* resp TCHAR* docela krkolomná, tak není od věci mít řetězce uložené v std::string. Není ani problém mít string na TCHARy, prostě si jako datový typ dáme std::basic_string<TCHAR>. A nyní i kousek kódu, který dělá co od něj očekáváme:
#include <windows.h>
#include <string>
typedef std::basic_string<TCHAR> tstring;
tstring ANSItoTSTRING(std::string to_convert)
{
tstring tstr;
#ifdef UNICODE
size_t size = MultiByteToWideChar(CP_ACP,0,to_convert.c_str(),-1,0,0);
WCHAR *converted = new WCHAR[size];
MultiByteToWideChar(CP_ACP,0,to_convert.c_str(),-1,converted,size);
tstr = converted;
delete[] converted;
#else
tstr = to_convert; // V ansi modu je std::string to same co tstring
#endif
return tstr;
}
Samotné pole TCHARů ukončené nulou pak získáte např voláním ANSItoTSTRING(“běžešelemovací řůčovičky”).c_str();
Wordpress a totální vytížení serveru
June 9, 2008 Category: Programování, Zkušenosti 1 Comment »
Před časem se mi ozval Dalibor Behún pro kterého jsem programoval web http://www.proofreading.cz/ s tím, že dostal na českém hostingu nůž na krk, protože totálně vytěžujeme server. Odpověď se hned nabízela – wordpress je poměrně nenasytný produkt a dokáže zkonzumovat strašná kvanta systémových prostředků. Klasika, nahodíme WP-Cache a problém bude vyřešen. Bohužel, opatření se minulo účinkem. Z hostingu stále docházely stížnosti a nakonec i onen nůž na krk v podobě 24 hodin na uklidnění situace a nebo opuštění serveru. To už byla seriózní výhružka a přitom žádná zjevná příčina, na statistikách web nevykazoval zvýšenou návštěvnost, vše co šlo bylo cacheované, části webu které jsme sami dopsali a na které jsme byli náležitě hrdi byly pro jistotu cacheované vlastním systémem…
A přesto, nic nepomáhalo. Poslední možnost, pohled do logů apache… První varovný signál, log za jeden den měl několik megabajtů. Tedy zagzipovvaný, rozbalený měl kolem 100MB. To už bylo podezřelé. V logu bylo řádově statisíce řádků za den. Web měl přesto del statistik návštěvnost řádově v tisících. A po letmém pohledu do logu bylo zarážející zejména jak často je tam požadavek ve tvaru:
“GET /jak-se-poprat-s-nazvy-firem-s-malym-pismenem/scripts/scripts/scripts/scripts/scripts/scripts/scripts/scripts/\”%20+%20gaJsHost%20+%20\”google-analytics.com/\”%20+%20gaJsHost%20+%20\”google-analytics.com/scripts/scripts/scripts/scripts/scripts/scripts/\”%20+%20gaJsHost%20+%20\”google-analytics.com/ga.js
Dokonce tak často, že tvořily 91% denní komunikace serveru se světem. Jak je vidět z odkazu, problém byl v nějakém skriptu, který se snažil stáhnout celý web a ideálně i stránky, které na webu nejsou. Web totiž v patičce obsahoval kód google analytiky, který pomocí document.write připisoval do stránky své umístění (buď http nebo https). Útočící skript si to vzal po svém a pokusil se za aktuální URL vložit /scripts/ a text který se vkládal pomocí document.write.
Taková stránka ale nevyhodila regulérní 404 ale pouze upozornění botovi nesrozumitelné. A kód na analytiku. Rekurze byla na světě.
Řešení se ukázalo jako velmi prosté, pokud nám něco přistoupí do /scripts/ ohlásíme 404 chybu (stránka nenalezena) a ukončíme skript. Efekt byl okamžitý.
Error C2471: cannot update program database
June 9, 2008 Category: Programování, Ročníkový projekt No Comments »
Tak s tímto problémem na mě vyskočilo Visual Studio 2008 poté, co jsem se po delší době dostal k práci na ročníkovém projektu. Bohužel, nepomohlo nic, clean solution, smazání zmíněných souborů, ani jiná temná magie. Převod projektu zpět do Visual Studia 2005 není to, co bych zrovna preferoval a tak jsem začal googlit. Po několika neúspěšných nálezech, které dokola omílaly “o chybě víme, a bude někdy zařazena do releasu, ale pokud to chcete hned, tak nám radši zavolejte” jsem konečně našel co jsem hledal. Položka MSDN KB946040, kterou stačí nainstalovat a problém je vyřešen. Poté již stačí jen restartovat počítač, provést clean solution a je po problému.
Name: Michal Tuláček