POMOC: Elektronická podání k dani z příjmu nefungují
March 16, 2009 Category: Všehochuť, Zkušenosti No Comments »
Rok se s rokem sešel a přišel čas, vyplnit daně. Ministerstvo financí má k tomuto účelu připravenou poměrně podařenou aplikaci EPO – Elektronická podání. Má jedinou mušku na kráse, ve verzi 1, ve které je většina formulářů, nefunguje jinde než v Internet Exploreru. Tedy byla to jediná muška až doteď. Druhá muška je ta, že nefunguje už vůbec nikde.
Existuje ale řešení, na které sice vede odkaz z příslušné stránky, ale trochu se ztrácí, takže dám odkaz i sem. Problém je v certifikátech, kterými je aplikace podepsaná. Budu-li citovat certifikační autoritu pak:
Dne 27.5. 2008 dala společnost Microsoft k dispozici Windows update. V tomto updatu se automaticky mezi důvěryhodné certifikační autority zaregistrovaly do systému Windows nové kořenové certifikáty První certifikační autority, a.s. (platné do roku 2018). Tyto certifikáty budou užívány v plném rozsahu přibližně od poloviny letošního roku.
Uživatelé certifikátů I.CA, kteří využívají nebo spoléhají na certifikáty vydané I.CA a neměli zaregistrované aktuální kořenové certifikáty (s platností od 2004,2005 do roku 2010, 2011), mohou mít po instalaci tohoto updatu problémy. Těm uživatelům, kteří do této doby obcházeli zabezpečení serverů a aplikací (neměli instalovány odpovídající kořenové certifikáty I.CA) doporučujeme jejich instalaci z následujících adres:• Standard root certificate I.CA: https://www.ica.cz/userdata/pages/4/RootCERT_NewSica.cer
• Qualified root certificate I.CA: https://www.ica.cz/userdata/pages/4/RootCERT_Qican.cer
Po instalaci příslušných certifikátů (je nutno nejprve je uložit a pak spustit, windows se o zbytek postará) už aplikace vypadá funkční. A pro připomenutí, adresa je http://eds.mfcr.cz/ (mnemonika – elektronická daňová správa ministerstva financí ČR).
Help! Postgre sql is freaking
December 4, 2008 Category: *nix, Zkušenosti No Comments »
I recently needed to find out, what is my postgres doing. The only statistics i had were process ids and the system load. This is good to find out, that postgres is the problem causer but if the only purpose of the server is to serve as database it is little bit unuseful.
After hours of freaking (as well database freaking as mine) I found some useful queries which I found useful. The most important is query SELECT * FROM pg_stat_activity ORDER BY procpid; which selects all recent queries with a lot of useful information like pid, ip, username and others.
That would be enough, because now we are able to see the problematic queries or kill the thread which is running processor to 100%. However we could appreciate more data about our database.
| Query | Meaning |
|---|---|
| SELECT * FROM pg_stat_activity; | Usage stats |
| SELECT * FROM pg_stat_user_indexes; | Index usage |
| SELECT pid, mode, current_query FROM pg_locks, pg_stat_activity WHERE granted = false AND locktype = ‘transactionid’ AND pid = procpid ORDER BY pid, granted | Locks |
| SELECT * FROM pg_stats | Statistics of database objects |
More information about these queries can be found in the postgres documentation.
Dnes ve zkratce: Xming
August 2, 2008 Category: *nix, Zkušenosti No Comments »
Sleduji cukrárnu online. Chcete také něco podobně zabezpečit?
July 14, 2008 Category: Zkušenosti 2 Comments »
Kdo čte můj twitter asi tuší, že jsem se tu vychloubal, že zloději nemají šanci, protože se na naši cukrárnu koukám z prahy kamerou, otázka ale je, jak toho dosáhnout. A o tom je tento post.
Read the rest of this entry »
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?
Prototyp bakalářské práce – unplugged, uncorrected
June 18, 2008 Category: Zkušenosti, Škola No Comments »
Tak jsem se dostal i k sepisování textu mé bakalářské práce. Kdo by měl zájem sledovat její vývoj, aktuální text se nachází zde.
Tento text je automaticky generovaný z SVN, takže je vždy (skoro) aktuální.
Zároveň bych se asi mohl zmínit o tom, jak takovouto věc provést, aby se práce automaticky updatovala.
Napsal jsem si skriptík, který volám z svn hook post-commit (spustitelný soubor s názvem post-commit [na windowsech klidně s koncovkou .exe nebo .bat), který obsahuje následující řádku
/home/tulacekm/build_thesis.sh >> /home/tulacekm/logs/svn.log 2>&1
Samotný build_thesis.sh pak vypadá
#!/usr/local/bin/bash
cd /home/tulacekm/bakalarka
# /usr/local/bin/svn update .
echo p | /usr/local/bin/svn update --username nobody --password ToByScHtElVeDeTcO? .
export PATH=/usr/local/bin/:$PATH
echo LATEX 1 && /usr/local/bin/latex bc_prototype.tex && echo OK
echo BIBTEX && /usr/local/bin/bibtex bc_prototype && echo OK
echo LATEX 2 && /usr/local/bin/latex bc_prototype.tex && echo OK
echo LATEX 3 && /usr/local/bin/latex bc_prototype.tex && echo OK
echo DVIPDF && /usr/local/bin/dvipdf bc_prototype.dvi && echo OK
echo COPY && cp bc_prototype.pdf /home/tulacekm/projekty/tulacek.eu/download/bc_prototype.pdf && echo OK
Celé to tedy běží na freeBSD, proto ty podivné cesty. V ~/bakalarka mám checkoutlou část svn repository s bakalářkou. A to je vše, hook by nyní měl běžet. Jen bacha na práva apod.
Jak na screen někoho jiného
June 12, 2008 Category: *nix, OpenTTD, Zkušenosti 1 Comment »
Před chvílí jsem řešil ožehavý problém. Náš kolejní server Králík, na kterém hrajeme mašinky mi tu vytrvale bzučí a já bych rád šel spát. Nikdo zrovna nehraje, tak připojím monitor, napíšu pause, save, exit a je to, no ne?
Bohužel ne, vláčky pustil Vojta vzdáleně přes screen (užitečná utilita) a já se do něj nemohl dostat. Udělat dvojici příkazů
tutchek$ su
# su gufy
nebyl žádný problém, ale následný příkaz
gufy$ screen -raAd
který by mi zpřístupnil Vojtovu session nějak nešel spustit. Neustále to na mě ječelo Cannot open your terminal ‘/dev/pts/0′ – please check. Zvláštní, jsem pod jeho userem, jsem připojený puttynou na /dev/pts/0, kde je problém? Schválně, zkuste se zamyslet, kde byl problém?
…
Kdo si tipl, že uživatel gufy nemá co psát na terminál, který jsem si pustil já, tedy /dev/pts/0 má bod. Vyřešil to chmod, já tedy prasácky povolil vše všem, tedy chmod a+rwx /dev/pts/0 a screen se rozjel. Vše tedy dobře dopadlo a ty miliardové společnosti Vojty a Martina byly zachráněny v uložené hře… A já můžu jít spát aniž by mi tu králík bzučel, dost že mi bzučí hlava po pár pivech
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ý.

Name: Michal Tuláček