Čím větší problém, tím větší kladivo!
Jakožto závěrečnou semestrální práci v předmětu Programování v jazyce C jsem se rozhodl vypracovat aplikaci pracující s GUI (grafické uživatelské rozhraní). Do té chvíle jsem s GUI pracoval pouze v Javě, a proto jsem se musel porozhlédnou po nějaké knihovně kterou bych mohl použít v Céčku. Po chvilce strávené na všemohoucím Google bylo rozhodnuto pro GTK+ ostatní knihovny jsem vyloučil, buď kvůli nesplnění multiplatformnosti, nebo nemožnosti je používat v čistém Céčku. Multiplatformnost hrála důležitou roli při výběru, poněvadž se považuji za spokojeného uživatele Linuxu, bohužel má škola není zrovna moc „Linux friendly”. Rozhodl jsem se tedy, že aplikaci napíšu pod Linuxem, a potom se ji pokusím portovat pro Windows. Při tomto úkonu může spousta lidí zabloudit, jelikož česky o tomto problému moc informací nenaleznete, proto jsem se rozhodl celou věc sepsat a usnadnit portaci pro mé následovníky.
Jako první je třeba nainstalovat libgtk2.0-dev, glade-3 (v Ubuntu příkazem: $ sudo apt-get install libgtk2.0-dev glade-3). Dále jsem přemluvil mé oblíbené NetBeans IDE, aby pracovalo s GTK+ podle tohoto návodu. Pokud píšete pouze v textovém editoru a kompilujete pomocí GCC, vystačíte s příkazem $ gcc -Wall aplikace.c -o aplikace -export-dynamic `pkg-config --cflags --libs gtk+-2.0`
Pod Windows si instalování užijeme trošku víc
.
Stáhněte si instalační soubor pro MinGW (umožňuje pracovat s GCC pod Windows)
V instalace zatrhněte balíky: gcc-core a gnu-make
Poté přidejte do systémové proměnné (Ovládací Panely -> Systém -> Upřesnit -> Systémové Proměnné) Path cestu C:\mingw\bin; (dle instalační cesty)
Do příkazového řádku(cmd.exe) napište příkaz: gcc Pokud se na výstupu objeví: "no input files" instalace se povedla v opačném případě je zřejmě špatně nastavena proměnná Path.
Stáhněte si instalační soubor GTK+ a nainstalujte jej do C:\GTK\. (Pozn.: POZOR! S některými instalátory se mi nepovedlo GTK+ rozběhat, proto použijte odkazovaný!)
Spusťte příkazovou řádku (cmd.exe) a napište do ní: pkg-config --libs --cflags gtk+-2.0 Na výstupu by se měl objevit výpis knihoven GTK+. Pokud se objeví hlášení ze pkg-config není vnitřním příkazem… přidejte do Systémové proměnné Path cestu%GTK_BASEPATH%\bin; Pokud pkg-config nemůze najít knihovnu GTK+ nastavte Sys. proměnnou PKG_CONFIG_PATH na %GTK_BASEPATH%\lib\pkgconfig;
pkg-config --libs --cflags gtk+-2.0 > libs.txtlibs.txtlibs.txtgcc -Wall -mwindows -g application.c -o application.exe <libs*> Místo <libs*> vložte text ze souboru libs.txt (klikněte pravým tlačítkem na cmd a dejte vložit) Pokud chcete spouštět program i s příkazovou řádkou vynechte argument -mwindowsUž víme jak zkompilovat stejný program na různých platformách. Příště se zaměřím, na to jak jej psát aby šel na obou platformách zkompilovat a vypadal zhruba stejně.
Při používání Pidginu jako IM klienta pro ICQ každý určitě narazil na problém s kódováním příchozích zpráv od uživatelů používajících ruského klienta QIP. Namísto českých znaků s diakritikou se zobrazuje mix češtiny a azbuky. Tato chyba, i když není na straně Pidginu, neumožňuje tento klient používat, protože zhruba polovina uživatelů ICQ (bráno dle mého seznamu kontaktů) používá právě QIP.
Naštěstí existuje řešení v podobě rozšíření pro Pidgin pojmenovaném QIP decoder.
Pozn. Testováno na Pidginu v. 2.5.2.
Vývojáři před připravily zkompilované rozšíření pro Ubuntu 8.04, x86, Ubuntu 8.10, x86-64. Stažené archivy stačí rozbalit do složky /usr/lib/pidgin (nutné superuživatelské heslo).
Pokud používáte jinou distribuci jste bohužel nuceni kompilovat.
qip-decoder.c do /usr/src/pidgin-2.5.2/libpurple/pluginsmake qip-decoder.soqip-decoder.so zkopírujte do /usr/lib/pidginplugins v instalačním adresáři PidginuSpusťte Pidgin, a v rozhraní Nástroje -> Zásuvné moduly zaškrtněte QIP Decoder v 1.0.
Pokud jej nenaleznete v seznamu udělali jste zřejmě chybu při instalaci. V opačném případě vesele do chatování!
Po dopsání docela robustní aplikace v PHP, jsem zatoužil vědět, do kolika řádků jsem tuto aplikaci vlastně vměstnal. Po krátké úvaze jsem navrhl a napsal malou třídu která tuto čínnost umožňuje.
Pro tuto akci lze použít funkci file(), která načte doubor do pole, kde každý prvek je jeden řádek souboru. Stačí tedy potom zjistit velikost pole pomocí fukce count() a počet řádků souboru je na světě.
Jistě by bylo od věci nehledat soubory jen v základním adresáři ale i v jeho podadresářích. Pro takový případ je nejlepším řešením použít rekurzivní funkci.
Z uvedených informací již není složité naprogramovat script který bude tyto akce zvládat.
** Pozn.: třída object již byla představena v mém předchozím čánku Zlepšujeme PHP vlastnostmi Javy, díl 1.
Pro start aplikace spusťte line_counter.php
A jákých je Vašich top 10? Pochlubte se!
Donedávna jsem jako ICQ klient v Linuxu používal QIP běžící pod WINE. To se změnilo po nalezení qutIM. Hlavní jeho výhodou je, že jako jediný mně známý Linuxový klient pro ICQ zvládá dokonale x-statusy. Klient je sice stále ve vývoji, ale po týdnu používání jsem nenarazil na vážnější problémy. Doporučuju vyzkoušet, jsou dostupné i verze pro Windows a OSX.
Poslední dobou jsem se věnoval hlavně Javě, kdo ji zakusil už u ní obvykle zůstal. Proto když jsem před časem dělal web na objednávku v PHP přenesl jsem jsi pár „manýrů” k ulehčení práce z Javy do PHP.
Kdo alespoň o Javu někde zakopl, ví, že je to jazyk založený na OOP, kde každá třída dědí třídu Object, která má ve svém kódu uloženy základní metody (JavaDoc).
Když jsem programoval datové třídy pro přístup databázi. Byl jsem znechucen neustálým psaním, přístupu k proměnným stylem getProměnná(), setProměnná(value), který zbytečně zvětšoval objem kódu u jednoduchých tříd. Jako řešení s může nabídnout změnit přístup k proměnným na public a přistupovat k nim jednoduše $class->value. Toto řešení je ovšem z pohledu OOP trochu zvrácené, proto jsem naprogramoval následující rozhraní(interface), které poskytuje 2 metody pro manipulaci s proměnnýma třídy.
Dalším krokem bylo vytvoření třídy Object, která bude rozhraní implementovat a budou ji dědit všechny ostatní třídy. Na první pohled se zdá ObjectInterface jako zbytečné, stačilo by přece jen třída Object, ne? Samozřejmě, ale představte si situaci kdy potřebujete implementaci pozměnit, v potomku můžete sice překrýt metody, ale není to tak precizní a přehledné řešení jako implementace ObjectInterface. Druhým důvodem je třída, která už dědí z jiné a proto nemůže dědit z Object. (V PHP může každá třída dědit jen z 1 jiné třídy, ale implementovat libovolný počet rozhraní.)
Pozn. Třída ignoruje chyby (nedefinovaná proměnná), doporučuji však použít vyjímek k oznamování chyb.
Jak jsem psal výše, nápad jsem dostal při programování datových tříd databáze, proto uvedu příklad právě s ní. Vezměme tedy tabulku Osoba, která by mohla vypadat zhruba nápodobně:
Datová třída vypadá následovně:
Práce se třídou:
Ukázali jsme jsi jak jednoduše přistupovat k vnitřním proměnným třídy. Příště implementujeme Javovskou třídu Properties.
Na webu který spravuji se začala v MySQL databázi kupit data, výpis všech začal být zbytečný, tak jsem ztvořil za pár minut jednoduchý skriptík na jejich stránkování. Článek je určen začátečníkům, kteří si s tímto problémem neví rady.
Skript jsem patřičně okomentoval aby byl přehledný. Výstupní HTML neobsahuje řádnou strukturu HTML dokumentu, protože můj skript byl určen pro vložení do jiné stránky opatřené hlavičkami. Aktuální strana je předávána pomocí parametru src v URL.
Doufám, že článek někomu pomůže.
Je to již docela dlouho co jsem se snažil vytvořit nějaký web, který by sděloval světu, že někdo jako má maličkost vůbec existuje. První pokus o vytvoření blogu byl docela kostrbatý. O většině webových technologií jsem neměl ani páru, a přesto jsem se snažil radit, těm ještě méně schopným než jsem byl já, v jejich tvorbě. Před zhruba třemi lety vznikl první LOLO Blog (existuje dodnes: http://www.lolo-blog.wz.cz/) tehdy ještě ve statické podobě. Euforie trvala asi 2 měsíce, poté jsem blog "opustil" a nezajímal jsem se o něj, a proto se jeho obsah za poslední 3 roky nezměnil a jeho kvalita odpovídá mím nicotným znalostem kolem IT technologií před třemi lety.
Po dlouhé odmlce (asi 2 roky) jsem začal toužit po blogu. Tehdy ještě plný elánu při programování v PHP jsem začal psát redakční systém. Po 2 měsících proseděných u počítače jsem ztratil trpělivost a rozepsatý systém jsem dlouhodobě uskladnil na HDD mého počítače, kde čeká na dokončení, kterého se asi nikdy nedočká. Na čas zálusk na vlastní blog opět utichl.
Zhruba před týdnem jsem opět zatoužil po blogu, nevybral jsem si cestu zdlouhavého programování vlatního blogu, namísto toho jsem stáhl WordPress, pěkné téma a začal psát. Časem se možná naučím i tvořit témata pro WordPress a pokusím se nakreslit nějaký vzhledný design, ale prozatím se budu snažit psát alespoň nějaké ty příspěvky.
Tak tolik k historii mého blogování a založení tohoto blogu, snad se Vám bude můj nový blog líbit a časem si jej oblíbíte.
Zdravím všechny človíčky, které trochu baví informatika jako mně. Stránky jsou prozatím ve výstavbě, proto omluvte jejich práznost. Postupem času by se zde měli nacházem typy a triky v programovaní, Linuxu a mé osobní poznatky. Přeji příjemný pobyt!