abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 13:00 | IT novinky

    Byl aktualizován seznam 500 nejvýkonnějších superpočítačů na světě TOP500. Nejvýkonnějším superpočítačem nadále zůstává Frontier od HPE (Cray) s výkonem 1,206 exaFLOPS. Druhá Aurora má oproti loňsku přibližně dvojnásobný počet jader a dvojnásobný výkon: 1,012 exaFLOPS. Novým počítačem v první desítce je na 6. místě Alps. Novým českým počítačem v TOP500 je na 112. místě C24 ve Škoda Auto v Mladé Boleslavi. Ostravská Karolina, GPU

    … více »
    Ladislav Hagara | Komentářů: 0
    dnes 10:11 | Nová verze

    GHC (Glasgow Haskell Compiler, Wikipedie), tj. překladač funkcionálního programovacího jazyka Haskell (Wikipedie), byl vydán ve verzi 9.10.1. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    dnes 09:22 | Nová verze

    Po 9 týdnech vývoje od vydání Linuxu 6.8 oznámil Linus Torvalds vydání Linuxu 6.9. Přehled novinek a vylepšení na LWN.net: první a druhá polovina začleňovacího okna. Později také na Linux Kernel Newbies.

    Ladislav Hagara | Komentářů: 0
    11.5. 18:22 | Nová verze

    Byla vydána verze 0.2.0 v Rustu napsaného frameworku Pingora pro vytváření rychlých, spolehlivých a programovatelných síťových systémů. Společnost Cloudflare jej letos v únoru uvolnila pod licencí Apache 2.0.

    Ladislav Hagara | Komentářů: 0
    10.5. 19:11 | Nová verze

    Open source RDP (Remote Desktop Protocol) server xrdp (Wikipedie) byl vydán ve verzi 0.10.0. Z novinek je vypíchnuta podpora GFX (Graphic Pipeline Extension). Nová větev řeší také několik bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 14
    10.5. 04:11 | Nová verze

    Rocky Linux byl vydán v nové stabilní verzi 9.4. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    9.5. 22:22 | Bezpečnostní upozornění

    Dellu byla odcizena databáze zákazníků (jméno, adresa, seznam zakoupených produktů) [Customer Care, Bleeping Computer].

    Ladislav Hagara | Komentářů: 22
    9.5. 21:11 | Zajímavý článek

    V lednu byl otevřen editor kódů Zed od autorů editoru Atom a Tree-sitter. Tenkrát běžel pouze na macOS. Byl napevno svázán s Metalem. Situace se ale postupně mění. V aktuálním příspěvku Kdy Zed na Linuxu? na blogu Zedu vývojáři popisují aktuální stav. Blíží se alfa verze.

    Ladislav Hagara | Komentářů: 61
    9.5. 14:33 | Pozvánky

    O víkendu 11. a 12. května lze navštívit Maker Faire Prague, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    8.5. 21:55 | Nová verze

    Byl vydán Fedora Asahi Remix 40, tj. linuxová distribuce pro Apple Silicon vycházející z Fedora Linuxu 40.

    Ladislav Hagara | Komentářů: 20
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (69%)
     (7%)
     (11%)
     (12%)
    Celkem 203 hlasů
     Komentářů: 12, poslední dnes 14:01
    Rozcestník

    Jak se dělá Plasmoid – 4 (Runnery)

    29. 1. 2010 | Dan Vrátil | Programování | 2842×

    Runner je knihovna, kterou využívá KRunner (dialog (nejen) pro spouštění programů). Když píšete název nějaké aplikace, KRunner postupně volá hlavní funkce všech dostupných runnerů a předává jim zadaný řetězec.

    Co je to Runner

    Plasmoidy, to nejsou jen applety na plochu, ale zahrnují i tzv. runnery. Runner je knihovna, kterou využívá KRunner. Když píšete název nějaké aplikace, KRunner postupně volá hlavní funkce všech dostupných runnerů a předává jim zadaný řetězec (tzv. Context). Každý runner vrací seznam relativních položek (Plasma::QueryMatch). Při kliknutí na vybraný QueryMatch KRunner zavolá funkci run příslušného Runneru, který zařídí, aby se vykonala příslušná událost.

    Jako příklad pro dnešní článek použijeme jeden můj starší runner, který umožňuje prohledávat kontakty z Kopete. Kliknutím na kontakt se rovnou otevře chatovací okno Kopete. Celá komunikace probíha přes rozhraní DBus. Podobný, ale ještě o něco propracovanější runner najdete v KDE SC 4.4.

    plasmoid runner view

    Trocha teorie

    Runner je třída odvozená od Plasma::AbstractRunner a musí implementovat tři metody:

    • Konstruktor, ve kterém se nastavují výchozí vlastnosti Runneru.

    • match(Plasma::RunnerContext &context), která se volá vždy, když se změní text v KRunneru. Ten získáme pomocí metody Plasma::RunnerContext.query(). Plasma::RunnerContext má ještě jednu další šikovnou vlastnost, kterou zjistíme pomocí metody isValid(). Ta vrací true, pokud je RunnerContext stále platný, a false, pokud se RunnerContext mezitím změnil (např. uživatel napsal další znak) – v takovém případě runner zpravidla skončí, protože už běží jeho nová instance s novým kontextem a ten stavající je zneplatněn (jeho výstup nebude zobrazen).

    • Třetí metodou, kterou musí runnery implementovat, je run(Plasma::RunnerContext &context, Plasma::QueryMatch &match), která se volá, když uživatel klikne na položku v seznamu výsledků. Jako parametr přijímá ukazatel na příslušný QueryMatch. V QueryMatch lze, kromě zobrazovaných hodnot, uložit ještě hodnotu skrytou, která obsahuje například URL, která se má otevřít a podobně. Context obsahuje aktuální kontext, pro který je daný QueryMatch platný.

    Kód

    A teď od teorie k praxi.

    kopetecontacts.h

    #ifndef KOPETECONTACTS_H
    #define KOPETECONTACTS_H
    
    #include <Plasma/AbstractRunner>
    
    #include <KIcon>
    
    class KopeteContactsRunner : public Plasma::AbstractRunner
    {
        Q_OBJECT
    
        public:
            KopeteContactsRunner(QObject *parent, const QVariantList& args );
            ~KopeteContactsRunner() { }
    
            void match(Plasma::RunnerContext &context);
            void run(const Plasma::RunnerContext &context, const Plasma::QueryMatch &match);
    
        private:
            KIcon m_icon;
    };
    
    // Makro pro registraci runneru
    K_EXPORT_PLASMA_RUNNER(kopetecontacts, KopeteContactsRunner)
    
    #endif // KOPETECONTACTS_H
    
    
    #endif
    

    Důležité je nezapomenout na makro pro registraci runneru do KDE. První parametr je název pluginu, pod kterým ho systém bude znát. Musí odpovídat hodnotě X-KDE-PluginInfo-Name v souboru .desktop. Druhým parametrem je název třídy runneru.

    kopetecontacts.cpp

    #include "kopetecontactsrunner.h"
    
    // Vloží podporu QtDbus
    #include <QtDBus/QDBusInterface>
    #include <QtDBus/QDBusReply>
    
    #include <KIcon>
    
    KopeteContactsRunner::KopeteContactsRunner(QObject *parent, const QVariantList& args)
        : Plasma::AbstractRunner(parent, args)
    {
        // Umlčí překladač
        Q_UNUSED(args);
        // Název runneru
        setObjectName("KopeteContacts");
    
        // Použije ikonku Kopete
        m_icon = KIcon("kopete");
        // Bude ignorovat všechny generické typy kontextu
        setIgnoredTypes(Plasma::RunnerContext::Directory | 
    		    Plasma::RunnerContext::File |
                        Plasma::RunnerContext::NetworkLocation |
    		    Plasma::RunnerContext::Executable |
    		    Plasma::RunnerContext::ShellCommand);
        // Přiklad syntaxe
        addSyntax(Plasma::RunnerSyntax(":q:", "Zahaji chat s :q:")); 
        // DBus protocol je pomalý…
        setSpeed(AbstractRunner::SlowSpeed);
    }
    
    void KopeteContactsRunner::match(Plasma::RunnerContext &context)
    {
         // Vyhledávání nebude case-sensitive
        QString searchedName = context.query().toLower();
        
        // Nebude se vyhledávat pro kontexty kratší než 3 znaky
        if (searchedName.length() < 3) {
    	    return;
        }
    	
        // Pokusí se navázat DBus spojení s Kopete
        QDBusInterface kopeteDBusTest("org.kde.kopete", "/Kopete", "org.freedesktop.DBus.Introspectable");
        QDBusReply<QString>kopeteReply = kopeteDBusTest.call("Introspect"); 
        if (!kopeteReply.isValid()) {
                return;
        }
    
        // Vytvoří seznam výsledků
        QList<Plasma::QueryMatch> matches;
    
        // Načte seznam všech kontaktu
        QDBusInterface kopeteDBus("org.kde.kopete","/Kopete","org.kde.Kopete");
        QDBusReply<QStringList> kopeteContacts = kopeteDBus.call("contacts");
    
        QString contactName;
    
        // Projde všechny kontakty
        for (int i = 0; i < kopeteContacts.value().size(); i++) {
    	// Nemá smysl pokračovat, pokud aktuální kontext už neni platný
    	if (!context.isValid()) {
    		return;
    	}
    	// Načte informace o kontaktu
            QDBusReply<QVariantMap>contactData = kopeteDBus.call("contactProperties",kopeteContacts.value().at(i));
    	// Uloží jméno kontaktu
    	contactName = contactData.value().value("display_name").toString();
    	// Zjistí, jestli kontext odpovídá kontaktu
    	bool matched = contactName.contains(searchedName, Qt::CaseInsensitive);
    
    	// Pokud ano, tak přidáme výsledek do QueryMatch
    	if (matched) {
    		// Vytvoří nový QueryMatch
    		Plasma::QueryMatch matchItem(this);
    		// Nastaví mu ikonu
    		matchItem.setIcon(m_icon);
    		// Jako hlavní název QueryMatch nastaví název kontaktu
    		matchItem.setText(contactName);
    		// Načte status kontaktu
    		QString statusMessage = contactData.value().value("status_message").toString();
    		if (not statusMessage.isEmpty()) {
    		    statusMessage.prepend(": ");
    		}
    		// Jako popis QueryMatch nastaví název a popis statusu
    		matchItem.setSubtext(contactData.value().value("status").toString().append(statusMessage));
    		// Jako data (skrytá, nezobrazují se) nastaví UID
    		matchItem.setData(kopeteContacts.value().at(i));
    	
    		// Pokud kontakt přesně odpovídá kontextu, nastavíme ExactMatch
    		if (contactName == searchedName) {
    		    matchItem.setType(Plasma::QueryMatch::ExactMatch);
    		} else {
    		    matchItem.setType(Plasma::QueryMatch::PossibleMatch);
    		}
    		// Přidá tento QueryMatch do seznamu
    		matches.append(matchItem);
    	}
        }
    
        // Uloží do kontextu seznam QueryMatchů
        context.addMatches(searchedName,matches);
    }
    
    void KopeteContactsRunner::run(const Plasma::RunnerContext &context, const Plasma::QueryMatch &match)
    {
        // Umlčí překladač
        Q_UNUSED(context);
        
        QString uid = match.data().toString();
        
        //  Pokusí se navázat DBus spojení s Kopete
        QDBusInterface kopeteDBusTest("org.kde.kopete", "/Kopete", "org.freedesktop.DBus.Introspectable");
        QDBusReply<QString>kopeteReply = kopeteDBusTest.call("Introspect");
        if (!kopeteReply.isValid()) {
              return;
        }
        QDBusInterface kopeteDBus("org.kde.kopete","/Kopete","org.kde.Kopete");
        
        kopeteDBus.call("openChat",uid);
    
    }
    
    #include "kopetecontactsrunner.moc"
    

    V konstruktoru se podíváme podrobněji na metody setSpeedaddSyntax. Metoda setSpeed nastavuje rychlost Plasmoidů. Výchozí hodnota je rychlá, ale pokud runner pužívá internetové připojení nebo DBus, měla by se rychlost nastavit na AbstractRunner::Slow – KRunner pak počítá s tím, že na takový runner musí čekat o něco déle. Metoda addSyntax přijímá objekt Plasma::RunnerSyntax. Plasma::RunnerSyntax v konstruktoru přijímá dva parametry – syntaxi vstupu, kde :q: je symbol pro vyhledávaný výraz a popis vstupu. Pokud například chcete, aby vstup vypadal „kontakt jméno_kontaktu“, vložili byste do addSyntax objekt Plasma::RunnerSyntax("kontakt :q:","Vyhledá kontakt :q:")).

    V metodě match je na konci volána metoda context.addMatches, která jako parametr přijímá seznam všech nalezených položek, které se mají zobrazit.

    Stejně jako applet, i runner musí mít svůj soubor .desktop, podle kterého ho KDE může najít.

    plasma-runner-idossearchrunner.desktop

    [Desktop Entry]
    Name=Kopete Contacts
    Comment=Start chat with your Kopete contacts
    
    ServiceTypes=Plasma/Runner
    Type=Service
    Icon=kopete
    X-KDE-Library=krunner_kopetecontacts
    X-KDE-PluginInfo-Author=Dan Vratil
    X-KDE-PluginInfo-Email=vratil@progdansoft.com
    X-KDE-PluginInfo-Name=kopetecontacts
    X-KDE-PluginInfo-Version=0.1
    X-KDE-PluginInfo-License=GPL
    X-KDE-PluginInfo-EnabledByDefault=true
    

    Důležité je, aby X-KDE-PluginInfo-Name odpovídalo hodnotě v makru v hlavičkovém souboru.

    CMakeLists.txt

    # Název projektu
    project(kopetecontactsrunner)
    
    set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
    
    # Najde požadované komponenty
    find_package(KDE4 REQUIRED)
    find_package(Qt4 REQUIRED)
    find_package(KDE4Workspace REQUIRED)
    find_package(Kopete REQUIRED)
    include (KDE4Defaults)
    
    # Nastaví definice
    add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS})
    
    # Nastaví adresáře s hlavičkovými soubory
    include_directories (${KDE4_INCLUDES}
                         ${KDE4WORKSPACE_INCLUDE_DIR}
                         ${QT_INCLUDE_DIR}
                         ${QT_QTDBUS_INCLUDE_DIR}
                         ${CMAKE_CURRENT_SOURCE_DIR}/libs)
    set(krunner_kopetecontacts_SRCS
        kopetecontactsrunner.cpp
    )
    
    # Přidá plugin do KDE
    kde4_add_plugin(krunner_kopetecontacts ${krunner_kopetecontacts_SRCS})
    
    # Slinkuje knihovnu
    target_link_libraries(krunner_kopetecontacts ${KDE4_PLASMA_LIBS})
    
    # Nainstaluje soubory
    install(TARGETS krunner_kopetecontacts DESTINATION ${PLUGIN_INSTALL_DIR} )
    install(FILES plasma-runner-kopetecontacts.desktop DESTINATION ${SERVICES_INSTALL_DIR})
    

    Nyní je potřeba restartovat KRunner:

    kquitap krunner
    kstart krunner
    

    Nyní můžete runner otestovat – když začnete psát název některého ze svých kontaktů v Kopete, budou se relevantní kontakty zobrazovat v KRunneru.

    Závěrem

    Možností, jak rozšířit KRunner, je mnoho. Runnery mohou, stejně jako applety, také používat DataEnginy a mít dialog pro konfiguraci. Jedinou nevýhodou je, že není možná interakce s uživatelem (kromě úvodního vstupu). Nakonec ještě přikládám tarball se zdrojovými kódy.

    Nejčtenější články posledního měsíce

    Jarní výprodej s až 91% slevou: originální a permanentně aktivovaný OS Windows 10 jen za €14, Office za €24!
    Týden na ITBiz: Vysokoteplotní supravodivá dioda
    Týden na ScienceMag.cz: Model Lambda CDM celkem sedí, ale kosmologická konstanta se může měnit

    Nejkomentovanější články posledního měsíce

    Týden na ScienceMag.cz: Kosmologové se opět zkouší vypořádat se s problémem Hubbleovy konstanty
    Týden na ITBiz: Platby výkupného za ransomware vzrostly za poslední rok na pětinásobek
    Týden na ScienceMag.cz: Upřesnili limity pro klidovou hmotnost neutrin
      všechny statistiky »

    Seriál Plasmoid – jak se píše (dílů: 5)

    Jak se dělá Plasmoid – 1 (úvod, první plasmoid) (první díl)
    <—« Jak se dělá Plasmoid – 3 (DataEngine)
    »—> Jak se dělá Plasmoid – 5 (drag&drop, konfigurační dialog)
    Jak se dělá Plasmoid – 5 (drag&drop, konfigurační dialog) (poslední díl)

    Související články

    KDE 4.0: Plasma
    Seriál: Qt 4 - psaní grafických programů
    Seriál: Qt 4 – Konzolové programy
    Cmake: zjednoduš si život
    Seriál: Kommander
    Co přináší KDE 4 - (alfaverze, porty a D-BUS)
    Co přináší KDE 4 - (technologie)
    Novinky v KDE 4

    Další články z této rubriky

    LLVM a Clang – více než dobrá náhrada za GCC
    Ze 4 s na 0,9 s – programovací jazyk Vala v praxi
    Reverzujeme ovladače pro USB HID zařízení
    Linux: systémové volání splice()
    Programování v jazyce Vala - základní prvky jazyka
           

    Hodnocení: 88 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Marián Kyral avatar 29.1.2010 02:44 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
    Rozbalit Rozbalit vše Re: Jak se dělá Plasmoid 4: Runnery
    Díky, jsem netušil, že je to až tak primitivní ;-)

    Hodilo by se udělat něco podobného pro psi, jenže tam by se nejdříve musely doimplementovat potřebné DBUS metody.
    $qdbus org.psi-im.Psi /Main
    method void org.psi_im.Psi.Main.openURI(QString uri)
    method void org.psi_im.Psi.Main.raise()
    method void org.psi_im.Psi.Main.setStatus(QString status, QString message)
    method void org.psi_im.Psi.Main.sleep()
    method void org.psi_im.Psi.Main.wake()
    method QDBusVariant org.freedesktop.DBus.Properties.Get(QString interface_name, QString property_name)
    method QVariantMap org.freedesktop.DBus.Properties.GetAll(QString interface_name)
    method void org.freedesktop.DBus.Properties.Set(QString interface_name, QString property_name, QDBusVariant value)
    method QString org.freedesktop.DBus.Introspectable.Introspect()
    
    progdan avatar 29.1.2010 03:55 progdan | skóre: 34 | blog: Archař | Teplice/Brno
    Rozbalit Rozbalit vše Re: Jak se dělá Plasmoid 4: Runnery
    Resil jsem jak podporu PSI tak i podporu Pidginu, u obou jsem ale narazil na spatne nebo nedostatecne DBus rozhrani
    Collecting data is only the first step toward wisdom, but sharing data is the first step toward the community.
    29.1.2010 08:48 Honz
    Rozbalit Rozbalit vše Re: Jak se dělá Plasmoid 4: Runnery
    Nedokázal by někdo udělat návod, jak si naprogramovat plasmoid pro sensory? Totiž hlavně tak, aby ukazoval čísla a ne nějaké pitomé otáčkoměry a stupnice? Byl bych neskonale šťastný, kdyby to nědko dokázal...
    1.2.2010 16:20 psi
    Rozbalit Rozbalit vše Re: Jak se dělá Plasmoid 4: Runnery
    29.1.2010 09:50 Heevy
    Rozbalit Rozbalit vše Re: Jak se dělá Plasmoid 4: Runnery
    Nejsem si úplně jistý, jestli tohle byl zrovna idealní příklad. Kvůli němu jsem totiž přestal KRunnner používat... Z mého pohledu je základní problém pluginu a potažmo i KRunneru v tom, že data tahá pokaždé on demand. Což v mém případě stovek kontaktů vyústilo v několik stovek dbus zpráv pro každé písmeno. Vlastně použití kopete pluginu znamenalo, že se to tak každé 3 hledání žačne tak "censored", že jediná možnost byla ten KRunner killnout. Někdo by mohl namítnout, že by nebylo složité do toho pluginu dopsat cache...ano nebylo. Ale pokud jedna plugina umožní bez problémů zablokovat celou aplikaci(a konkrétně v mém případě vyústit v nepoužívání celé aplikace), tak potom je asi na úrovni návrhu něco špatně. :( Bohužel. KDE mám sice rád (i když rychlost KDE4 je někdy naprosto tragická), ale třeba takové Gnome DO má architekturu výrazně lepší, protože cachování samo o sobě už vyžaduje. Resp. neuděláte to tak jak pro KRunner. Tam je pro změnu zase problém umět vyvolat invalaci cache. :( Nicméně pořád se jedná o čitější přístup než v případě KRunneru. Takže z mého pohledu buď by doplňky měly cachovat nebo by se mělo jednat o takovou kardinalitu dat, že tento přístup nebude problém.

    PS: Jinak díky za ten, doplněk, protože jsem si z něj vzal inspiraci pro Gnome DO plugin, který v KDE spokojeně používám.
    progdan avatar 29.1.2010 12:42 progdan | skóre: 34 | blog: Archař | Teplice/Brno
    Rozbalit Rozbalit vše Re: Jak se dělá Plasmoid 4: Runnery
    Zalezi samozrejme na mnozstvi kontaktu. Kdyz jsem ted koukal na DBus rozhrani Kopete tak sem zjistil, ze by to vsechno slo zajistit jedinou zpravou hned na zacatku (bez nutnosti zjistovat detaily pro kazdy kontakt zvlast novou zpravou)...inu, vzdy je prostor pro zlepseni :-)

    Co se rychlost tyce, ja sem si treba musel v KDE 4.4 vypnout Nepomuk Desktop Search runner protoze KRunner zabijelo cekani na odpoved z Virtuosa...kazdopadne mam moznost srovnat (sic jen subjektivne, ale preci) rychlost KRunneru v KDE 4.3 a v 4.4 a ten vyvoj je tam znatelny. Za hodne muze i optimalizace, kterou si prosla vetsina Runneru. Ale ne vzdy to plati (viz Virtuoso).

    Nejakou cache bych samozrejme uvital, otazkou je jak zajistovat jeji aktualizaci, zejmena u veci, ktere se casto meni (statusy kontaktu napriklad).

    Collecting data is only the first step toward wisdom, but sharing data is the first step toward the community.
    29.1.2010 13:00 jiřík | skóre: 9 | Hradec Králové
    Rozbalit Rozbalit vše Re: Jak se dělá Plasmoid 4: Runnery
    Já tedy programování na úrovni C++ nerozumím, ale to by byl problém si řekněme každých 5 minut šáhnout do Kopete pro statusy a dát je do cache? Něco jako automatický update dat v eshopu v PHP ...
    Zapomeňte na pumpičku a na rozhodčí, hrajte Ultimate Frisbee http://www.frisbee.cz
    thingie avatar 29.1.2010 13:43 thingie | skóre: 8
    Rozbalit Rozbalit vše Re: Jak se dělá Plasmoid 4: Runnery
    No, to by bylo dost nerozumné. To jedno dbusové volání je docela levné, a ty statusy po pěti minutách by nemusely mít valnou hodnotu a hlavně vztah k aktuální realitě…
    Růžové lži.
    29.1.2010 13:53 jiřík | skóre: 9 | Hradec Králové
    Rozbalit Rozbalit vše Re: Jak se dělá Plasmoid 4: Runnery
    Problém je v tom, že real-time hledání je náročné, jak jsem tak pochopil. A nemusí to být 5 minut, jestliže jeden dotaz na stažení všech dat do cache je fakt drobnost, tak to může být po minutě.
    Zapomeňte na pumpičku a na rozhodčí, hrajte Ultimate Frisbee http://www.frisbee.cz
    thingie avatar 29.1.2010 14:00 thingie | skóre: 8
    Rozbalit Rozbalit vše Re: Jak se dělá Plasmoid 4: Runnery
    Je náročné, protože je blbě udělané, jak se z toho popisu zdá. Cachovat něco, co máte snadno a ve vhodném formátu dostupné přes laciné IPC o jeden proces dál, to je cesta leda do pekel. A když se bavíme zrovna o Kopete, to je software kde bych fakt neměl nejmenší výčitky ukázat prstem, že vaše dbusové API saje, a to nemálo. :-)
    Růžové lži.
    29.1.2010 14:07 jiřík | skóre: 9 | Hradec Králové
    Rozbalit Rozbalit vše Re: Jak se dělá Plasmoid 4: Runnery
    No hádat se nebudu, tam kde tomu pramálo rozumím :) Asi máte pravdu.
    Zapomeňte na pumpičku a na rozhodčí, hrajte Ultimate Frisbee http://www.frisbee.cz
    thingie avatar 29.1.2010 14:14 thingie | skóre: 8
    Rozbalit Rozbalit vše Re: Jak se dělá Plasmoid 4: Runnery
    Ona by se tam asi spousta věcí zase určitě cachovat mohla. Ale tohle zrovna…

    Druhá věc je, že KRunner to podle mě přehání, a měl by tyhle věci zobrazovat poněkud konzervativněji. Napíšu tři písmena, jakákoliv, a ono to šrotí a po třech sekundách nabídne hory nesmyslů, které se vyznačují tím, že mě vůbec nezajímají. Bylo by možná lepší, kdyby se to snažilo počkat do chvíle, kdy může aspoň odhadnout co třeba chci (no, to je jasný nesmysl, ale prostě… pokud najde tisíc potenciálně relevantních výsledků, mělo by to poznat, že nemá cenu nějaké nabízet).
    Růžové lži.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.