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í”.

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++ :D

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? :D

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.

Z tisku:

Praha, 14.6.2008 večer. V prostorách policejního muzea byl při rutinní silniční kontrole pobodán policista psychopatem a jeho kolegyně byla vzata jako rukojmí. Na místo činu dorazily tři policejní vozy a v nich po zuby ozbrojení policisté z útvaru rychlého nasazení. Policejní vyjednavač začal s psychopatem vyjednávat. Poté co se mu podařilo vyjednat odvoz raněného kolegy psychopat opustil vůz a pokusil se o ústup. Venku začal vyjednávat o svých podmínkách, ale při tom ho zezadu napadli policisté, zadrženou policistku osvobodili a psychopata zatkli. -mt-

Kdybych z akce měl videozáznam, napsal bych TO MUSÍTE VIDĚT, bohužel takhle musím říct MĚLI JSTE PŘIJÍT NA MUZEJNÍ NOC, tato show tam byla každou hodinu.

Není nad to zůstat doma

June 13, 2008    Category: Všehochuť   No Comments »

Sice je krásné cestovat po světě do různých destinací nedotčených člověkem, ale víte jak to končí, nakonec je nejlepší zůstat doma, ostatně jak je ukázáno v tomto videu.

Jak napovídá nadpis, tuto hru bych se asi nestyděl ukrást. A i kdyby se pak autoři ozvali, bylo by to dle přísloví “zloděj chytá zloděje”, protože převážná část grafiky hry byla prostě dzre ukradena z jiných her. Nu posuďte sami podle screenshotů v článku na Tiscali Games.

Docela mě ale pobavila délka vývoje hry, 12 let. Jak zaznělo v komentářích, holt to nějakou dobu trvá, než dohrajete tolik her abyste měli takový výběr lokací na screenshoty :D

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 :D

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();

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ý.

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.



Search


About me

Name: Michal Tuláček
Work: Programátor, student, IT specialista
Location: Praha, Česká Republika
Můj profil na Fotogalerie.cz


Research

Library management

Categories


Photos

Archives


Links


Meta


RSS feeds


Nízkonákladové bydlení