Nur für diejenigen die sich auch mit Metakit befassen ein weiteres schlechtes Beispiel Code, kein schöner Code aber vielleicht hilft es jemandem. Es hat zumindest meinen Zweck erfüllt eine Akregator Datenbank auszulesen. Geholfen hat mir auch die cplusplus.com Referenz geholfen.
#include <mk4.h> // http://www.equi4.com/metakit/api/mk4_8h.html
#include <mk4io.h> // http://www.equi4.com/metakit/api/mk4io_8h.html
#include <mk4str.h> // http://www.equi4.com/metakit/api/mk4str_8h.html
#include <string>
#include <vector>
#include <iostream>
#include <time.h>
using namespace std;
int main (int argc, char** argv) {
vector<string> toc;
string::iterator tocStringIt;
vector<string>::iterator tocIt;
int index = 0, stack = 0, lastStringIndex = 0;
c4_Storage storage (argv[1], true);
string tocString = string(storage.Description()); // get a Table of Content as String
c4_View db = storage.GetAs(tocString.c_str());
cout << "Read MetaKit Database with " << (long)db.GetSize() << " rows" << endl;
cout << "and the following table of content: " << endl;
cout << tocString << endl;
for (tocStringIt = tocString.begin(); tocStringIt <= tocString.end(); tocStringIt++) {
if(*tocStringIt == ',' || *tocStringIt == '') {
if(stack == 0) {
// split string at this position
// and add substring to the toc (Array)
// maybe http://www.cplusplus.com/reference/string/string/ helps
// It would be cooler to solve this completely with itarators and not with the lastStringIndex int.
cout << "Split Sting" << endl;
toc.push_back(tocString.substr(lastStringIndex,(int)(tocStringIt-tocString.begin())));
lastStringIndex = (int)(tocStringIt-tocString.begin())+1;
}
else if (*tocStringIt == '') {
cout << "Am Ende des Strings ";
if(stack > 1) cout << "liegen"; else cout << "liegt";
cout << "noch" << stack;
if(stack > 1) cout << "Klammern"; else cout << "Klammer";
cout << "auf dem Stack, das ist nicht gut." << endl;
}
}
else if(*tocStringIt == '[') stack++;
else if(*tocStringIt == ']') stack--;
}
vector<c4_View> views;
cout << "the splitted toc" << endl;
for (tocIt=toc.begin(); tocIt < toc.end(); tocIt++) {
cout << " " << *tocIt << endl;
c4_View view = storage.GetAs((*tocIt).c_str());
views.push_back(view);
}
vector<c4_View>::iterator viewIt;
c4_StringProp guid("guid"), title("title"), description("description"), link("link"), commentsLink("commentsLink"), enclosureUrl("enclosureUrl"), enclosureType("enclosureType"), author("author");
c4_IntProp hash("hash"), guidIsHash("guidIsHash"), guidIsPermaLink("guidIsPermaLink"), comments("comments"), status("status"), pubDate("pubDate"), hasEnclosure("hasEnclosure"), enclosureLength("enclosureLength");
for (int article = 0; article < views.at(0).GetSize(); article++) {
time_t time = (time_t)pubDate((views.at(0))[article]);
char* date = ctime(&time);
cout << "<h2>" << title((views.at(0))[article]) << "</h2>" << endl;
cout << "<em>" << date << "</em>" << endl;
cout << description((views.at(0))[article]) << endl;
cout << "<em>" << author((views.at(0))[article]) << "</em>" << endl;
cout << endl;
}
return 0;
}
Letztes Wochenende habe ich mal wieder begonnen mich etwas mit Fotografie zu beschäftigen. Nachdem ich auch einige Fotos aufgenommen hatte ist mir die Notwendigkeit einer vernünftigen Fotoverwaltungssoftware aufgegangen.
Ich habe mir also das KDE-Tool digiKam installiert und bin begeistert, wie übersichtlich ich dort meine Bilder präsentiert bekomme und was ich alles damit machen kann. Viele Funktionen verstehe ich aber noch nicht. Zwei Funktionen kamen mir aber sehr gelegen. Zum einen ein Flickr-Upload mit dem ich meine Bilder ohne Umwege auf auf mein Flickr-Konto laden kann. Zum anderen hatte ich Anfang des Jahres für Urlaubsbilder eine Gallery2 auf unserem Server eingerichtet, auf diese kann ich jetzt, nachdem ich dort das "Remote"-Plugin installiert habe, ebenfalls Bilder laden, so dass Flickr über kurz oder lang für mich überflüssig wird. Leider habe ich noch keine Funktion entdeckt um auch direkt Bilder aus den entsprechenden Galerien in meine lokale Sammlung zu importieren. (Wobei es bei Gallery2 die Möglichkeit einer WebDAV-Schnittstelle gibt, die aber nicht auf Anhierb funktioniert hat.)
Ab jetzt könnt ihr also meine Versuche im Bereich der digitalen Fotografie begutachten.
Wie ja fast jeder Weiß gibt es in der UNIX/Linux Welt zwei große Desktopumgebungen, KDE und Gnome. Zu jeder dieser Umgebungen gibt es auch je einen Instantmessaging-Client, Kopete und Pidgin (ehemals Gaim). Ein Kommilitone berichtete neulich, wie ihm bei einem Vortrag klar wurde, wie sehr sich die zwei Editor-Welten von vim und emacs bekriegen und wie viele Ressourcen dabei verschwendet werden. Dies ist ebenso sinnlos, wie die nie endenden Streitigkeiten zwischen den Benutzern verschiedener Distributionen. Doch befinden wir uns hier in der OpenSource Welt, warum bekommen es Menschen nicht hin gemeinsam an einer guten Sache zu arbeiten oder wenigstens andere Projekte mit dem gleichen Ziel neben sich existieren zu lassen, ohne sich gegenseitig anzugiften? Warum gibt es nicht einfach ein Team, das an der libpurple arbeitet und dann je an einem Userinterface für Gnome und an einem für KDE gearbeitet wird [1]?
Gerade eben wollte ich nachsehen, wie es so um mein Powermanagement steht da tut sich mir folgendes Bild auf:

Da ist wohl etwas durcheinander gekommen, meine Schwester hat sich nämlich heute einen neuen gekauft, weil ihrer kaputt ist. Klar ich weiß, meiner ist auch nicht mehr ganz, dass er sich jetzt aber schon geteilt hat hätte ich nicht gedacht oder hat mir heimlich jemand einen neuen Akku unter geschoben, das würde mich freuen. Ich konnte aber im Gerät selbst bisher nur einen finden.