Foonsearch

RGJ,

Momenteel heb ik drie workerthread gedefineerd, namelijk:

  • workerThreadCron: thread die periodiek (elke 20 seconden) workerthreads gaat klaarzetten.
  • RunAsUsertask: Workerthread die een programma opstart.
  • testtask: test workerthread, die net zolang wacht als de duration in seconden aangeven.

RGJ, Ik nog meer workerthread definieren, denk aan het scannen en hashen van files op het filesysteem. Ik ga ook meerdere testtask1, testtask2, … definieren. Denk hierbij aan cpu bound workerthread. Dan kan je m.i. pas testen of threadprioriteit goed werkt.

De hartelijke groet Jan Marco

Hoi RGJ,

Het is mij gelukt om automatisch een user aan te maken als hij niet bestaat. Ik heb o.a. de code van Discover COM: Connection Points versus Mailslots in Replication Directory. - CodeProject gebruikt. Ik ga nu de prioriteit van de thread zo instellen als in MySQL in tabel ‘task’ is gedefineerd.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik ben stevig bezig geweest om de workerthreads goed te krijgen. Het programma werkt nu dat je workerthread klaar zet. De workerthread roept 1 of meerdere database connections aan in routine database_action(). Onder deze routine zit bijvoorbeeld het dumpen van alle processen van je pc in MySQL. De huidige logische volgorde:

[quote]mysql tabel ‘task’ -> workerthread -> database_action() -> processList() -> insert_in_to_mysql().
[/quote]
De code van workerthread ga ik hetzelfde maken, echter bij andere taskName ga ik andere database_action() aanroepen.

Ik ga nog iets maken dat je een workerthread met SuspendThread() stil kan zetten en hierna met ResumeThread() weer kan laten werken. Mechanisme wordt al gebruikt om thread te killen, dus lijkt mij niet moeilijk om te maken. Je hebt dan meer variatie. Je kan workerthread killen, op andere prioriteit laten werken en ‘stil’ zetten.

Hierna ga ik het periodiek schedulen van task er in programmeren.

De hartelijke groet Jan Marco

Hoi RGJ,

Mijn scheduler werkt al een paar dagen redelijk goed. Zaten in het begin wat bugs in, die ik er heb uitgehaald. Omdat ik toch vanaf de basis (=workerthreads) weer ga opbouwen ga ik de tabelstructuur weer verbeteren.

De hartelijke groet Jan Marco

Hoi RGJ,

Om packets binnen te halen ga ik de code van Multi-threaded Client/Server Socket Class - CodeProject gebruiken. Ik ga het mergen met de code die ik al heb. Net als andere projecten zit er ook threads in. Mijn doel is om 1 type workerthread te hebben, die erg goed werken. Als je programma afsluit dan ook alle onderliggende threads afsluiten. Het is m.i. een soort threadpool functionaliteit. Bijvoorbeeld: On the fly de prioriteit van het binnenhalen van de packets kunnen veranderen. Dit doe je door de prioriteit van de workerthread te veranderen. Ook de prioriteitclasse van het process (=programma) on the fly kunnen aanpassen.

De hartelijke groet Jan Marco

Hoi RGJ,

Momenteel bezig om alle database/tabellen weer te updaten. Hierna de routines in het workerthread concept gaan hangen.

De hartelijke groet Jan Marco

Hoi RGJ,

De workerthreads draaien nu redelijk stabiel. Ik had een fout in het programma dat hij bepaalde databaseconnecties niet vrij gaf. MySQL-demon gaat dan fout geven als je boven 114 threads komt. N.B. Aantal is denk ik instelbaar bij installatie van MySQL.

Ik ben ook bezig geweest om de database/tabellen weer te her-ijken. Kost me wel meer tijd dan mij lief is. Zal ik toch moeten doen om het totaal concept er van te maken.

Afgelopen dagen de database synchronisatie routines proberen aan te koppelen op de nieuwe database structuur. Werkt nog niet want moet nog een dag goed geconcentreerd ‘stapje voor stapje’ de huidige (niet)werking nalopen.

De hartelijke groet Jan Marco

Hoi RGJ,

De puntjes waar aan ik nu werk. Sommige punten ga ik in aparte programma’s bouwen/testen om in punt 7 weer te gaan integreren.

  1. subscriber tabel aanpassen en gaan vullen vanuit pink en white en de bijbehorende info records.

  2. database synchronisatie op 1 peer werkend maken.

  3. het hashen van records veranderen. Wil het laten werken op ‘flexibele’ database structuren.

  4. upd packets routine aankoppelen. Ik ga goed kijken naar de oplossingen van Multi-threaded Client/Server Socket Class - CodeProject en gnunet.

  5. database synchronisatie over meerdere peers maken.

  6. gui programma aanpassen om met de rechter muistoets relevante specifieke acties op tabellen kunnen uitvoeren.

  7. 1 distributie (foonsearchd.exe en voipe.exe) er weer van maken en dan gaan testen op Vmware (win2000, XP, Vista en Vista-64 bit).

8 ) tunnel routines bestuderen en in het programma invoegen.

De hartelijke groet Jan Marco

P.S. Ik heb een eerste ‘netstat’ programma-tje gemaakt in het concept. Elke 5 minuten dump ik de open-connectie in mysql. Programma werkt nu redelijk in de workload scheduler. Wel moet ik nog kijken naar de dns resolving. Ik sla dns-naam van ip-nummer in dns-tabel op. Nog over nadenken wanneer reallife dns-opzoeken en wanneer uit mysql gaan halen.

Hoi RGJ,

Afgelopen twee dagen best wel zitten programmeren op inputbestand-laadprogramma’s. Ik wil naar iets generieks toewerken. Lijkt wel op mysqlimport, echter ik wil graag meer checks inbouwen.

Eerst het inputbestand doorlopen en dan het aantal records tellen. Hierna vanaf begin de records 1 voor 1 gaan inserten. Als je insert programma onderbreekt dan op het laatste commitpunt weer beginnen met laden/updaten in de mysql-tabellen. In een tabel “updater” heb ik een veld “complete” gedefineerd, hierin staat het percentage dat de records verwerkt zijn. Best wel gemakkelijk nu te zien hoe ver je bent.

Ik moet het laadprogramma nog op een lagere prioriteit instellen. Ook kan je met een delay tussen de record-inserts zetten om minder cpu te laten gebruiken. Met http://www.codeproject.com/system/cpuusage.asp kan je cpu gebruik bepalen.

De hartelijke groet Jan Marco

Hoi RGJ,

Afgelopen periode veel tijd in dataverrijking gestoken. Telefoonboek heeft namelijk relaties met postcodes-, plaats-, straat-tabellen, etc. Ik probeer volgende week weer ‘databasesynchronisatie’ op te pakken. Eerst twee tabellen op dezelfde peer werkend maken, hierna over meerdere peers gaan realiseren.

De hartelijke groet Jan Marco

Hoi RGJ,

Het is mij gisteravond gelukt om Google’s Chrome (web browser) te compileren met vs2005. Werkt wel erg mooi. Ik ga de code van Firefox en/of Mozilla niet meer gebruiken. Was wel een leuke exercitie, echter heeft mij niet veel resulaat opgebracht. Sommige paden die je probeert om de berg te beklimmen lopen soms dood en dan moet je iets nieuws verzinnen of wachten op iemand anders die het probleem voor je heeft opgelost, zoals Google nu voor mij heeft gedaan. Zie http://dev.chromium.org/developers/how-tos/getting-started voor de de specifieke stappen die je doorlopen moet om het te compileren.

Ik denk om sqlyog en chrome nu in 1 pakket (genaamd ‘Voipe’) ga integeren. Wel ben ik aan het nadenken hoe de grafisch vector (GIS) data (bijvoorbeeld gdal project, wegen van Nederland) ook meegenomen zou kunnen worden in de viewer. In het Voipe project ga ik voor de database synchronisatie de demon foonsearchd.exe inbouwen. Databasesynchronisatie is ook nog een grote uitdaging voor mij --)

RGJ, Ik ga een plannetje maken in welke volgorde ik het nu ga aanpakken.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik denk dat ik weer een andere aanpak doe. Ik ga hoofdprogramma Win32++: A Simple Alternative to MFC - CodeProject gebruiken. Hierin zit goed het Frame window geprogrammeerd. In één programma kan je meerdere Frames aanroepen. Onder een frame window hang je de andere (MDI)-windows. De windows zal je m.i. wel een structuur moeten bijhouden.

In Docking Toolbars in Plain C - CodeProject doen ze dat. Om de MDI-windows actief te houden hebben ze constructie bedacht. Beide code projecten probeer ik te integreren.

Ik ben momenteel bezig om Wengo (Wengo - Wikipedia ) wat nu http://www.qutecom.org/ heet te compileren, dus gewoon compileren met ‘boost’, ‘QT’ en Cmake. Best wel vreselijk zitten prutsen om het werkend te gaan krijgen.

Hierna in de GUI proberen SQLyog, Chrome en Wengo proberen te integreren. Bij Wengo zijn ze ook bezig om een andere architectuur te gaan bouwen. Ze verwijzen hiervoor naar de volgende video http://news.zdnet.com/2422-13569_22-153763.html

De hartelijke groet Jan Marco

Hoi RGJ,

Het lukt mij wel om wengo ( http://www.qutecom.org/ ) te compileren, echter niet te linken. Hij geeft al aan dat hij bepaalde library niet kan vinden. Heeft veel met cmake te maken, want die geeft aan wat er moet gebeuren. Moest eerst drie cmake regels uit zetten om visual studio project files te kunnen genereren. Mogelijk ligt het niet willen linken hieraan. Ga er geen tijd verder in steken. Compileren van de wengo source code is vooralsnog genoeg voor mij.

Ik ga de Wengo (qutecom) nu in twee aparte projecten stoppen, namelijk wengoLib en wengoGui. In laatste project doe ik de QT specifieke delen en in het eerste de overgebleven source. Op deze manier ben ik van cmake af en heb meer control over hoe het werkt. Bijkomende voordeel is dat het library gedeelte gemakkelijk is over te nemen,

De hartelijke groet Jan Marco

P.S. Ze zijn bij qutecom wel druk bezig om de source te veranderen. Laatste versie compileert niet, dus eerdere versie ga ik ‘poorten’. Ze zijn een variant van IM (‘libpurple’) aan het implementeren, zie ook Libpurple de site http://trac.adiumx.com/wiki/GettingLibpurpleSource

Hoi RGJ,

Ik heb vanmorgen naar Dynamic UI Creation: Extend R2build: Add New Tool Support, Create Plugin Config - CodeProject gekeken. Werkt ook op QT. Wat er mooi is dat er een grafisch symbolen op scherm gezet kunnen worden. Ik heb het geprobeerd te compileren. Kreeg foutmelding en eerst proberen uit te zetten, echter dan kom je van de regen in de drup, dus maar een post naar de site gedaan voor hulp. Ga nu beginnen om Wengo aan de praat te krijgen.

De groet Jan Marco

Hoi RGJ,

Ik ben bezig om de onderliggende source code van Wengo te gaan poorten. Eerst als testcase begonnen met Curl om te kijken of het goed werkt. Ik ging eerst alle Curl source (.c) programma’s separate in het project compileren, echter ik kreeg dan in het hoofdprogramma een foutmelding op de include header files. Gaat dan om een foutmelding op de bij visualstudio meegeleverde header files. Lijkt mij niet handig dat ik daar veranderingen in ga brengen. Dus weer een andere aanpak geprobeerd. In mijn hoofdprogramma laad ik alle header files die ik nodig heb. Dus in 1 file alle Curl source gedaan en alle include headerfiles er uitgehaald. In het hoofdprogramma dan {include “curl.cpp”} opgenomen. Dezelfde techniek had ik ook al gedaan bij de SQLyog code. In Wengo zitten 85 projecten en daarvan heb ik er nu 1 (Curl) al gedaan.

Ander punt waarnaar ik kijk is het hoofdprogramma. Als ik grafisch beter weet hoe het werkt dan zou ik ook de wegen van Nederland op scherm kunnen gaan ‘ toveren’. Ik ga ook naar Chrome kijken hoe hoofdprogramma in elkaar zit.

De hartelijke groet Jan Marco

Hoi RGJ,

Ben nu bezig met het omzetten van Wengo ( http://www.qutecom.org/ ). Ik heb 15 van de 85 onderliggende projecten al gedaan. Ik denk dat ik ze niet allemaal hoe om te zetten, want er zijn m.i. test projecten bij. Ze gebruiken drie maal de tunnel source routines. Een voor SIP en de andere voor ORTP. Later kom ik er er wel achter wat de derde doet.

Ik werk naar twee programma’s toe. Het ene is het library programma, waarin alle gewone source code zit. Het andere programma doe ik de QT (GUI) source code en link het andere programma als een library mee.

Als bovenstaande werkt dan kan ik gemakkelijk de library source in eigen programma onderbrengen, waarin natuurlijk geen QT zit.

De hartelijke groet Jan Marco

Hoi RGJ,

ALs je naar http://www.codeproject.com/KB/cpp/eBaygSOAP.aspx kijkt hebben ze een hoop variabelen (“ns1:UUID”,“ns1:QuantityAvailable”, etc.) vooraf gedefinieerd om in het protocol te kunnen werken. Op zich heb ik dezelfde puzzel die ik moet oplossen. Ik denk niet om in het protocol alles van te voren te definiëren. In mijn beeld definieer je het liefst free format database tabellen met velden en die synchroniseert je met andere peers. Geheel free format lukt mij nog niet, sommige velden heb je nodig voor database synchronisatie. Je zou deze velden er wel uit kunnen halen en dan in andere tabel onderbrengen die gerelateerd is aan de free format tabel.

Hoe ze precies in Soap doen nog niet uitgezocht. Mogelijk de variabelen na elkaar verwerken. In mijn concept gewoon tabel aanmaken met variabelen “ UUID” en “QuantityAvailable”. De waarden die in deze tabel invul, kan ik dan met de andere (“bevriende”) peers uitwisselen.

Van Wengo heb ik nu 26 van de 85 deelprojecten omgezet. Als ik de test deelprojecten niet meeneem dan moet ik nog 34 deelprojecten omzetten. Gaat opzich redelijk. Alleen wel langzamer als ik zou wilen,

De hartelijke groet Jan Marco

P.S. Ze gebruiken visual studio 2008 omdat ze grote files compileren. Ik ben van vs2002 naar vs2005 gegaan omdat de laatste langere source code regellengte aankan.

Kijk eens naar ‘protocolbuffers’ van Google.

Hoi RGJ,

Erg bedankt voor de tip.

Chrome gebruikt meerdere processen en ‘sandbox’, zie ook Chromium Blog: Multi-process Architecture
In a nutshell, a sandbox is security mechanism used to run an application in a restricted environment. Zie ook Chromium Blog: A new approach to browser security: the Google Chrome Sandbox

Als je meerdere processen gebruikt kan je deze processen ook in verschillende prioriteiten laten draaien. Datasynchronisatie in lagere prioriteit dan het (voip) bellen bijvoorbeeld.

De hartelijke groet Jan Marco

Hoi RGJ, Nog aan het prutsen om Wengo (QuteCom) in een apart project te compileren. De meeste code heb ik er nu al in zitten. Ik kan nog niet zo goed bepalen hoeveel video code ik nog moet gaan halen uit bijvoorbeeld ( http://ffmpeg.org/ ). Ik wil zo weinig mogelijk dll’s gebruiken.

Ben nu bezig om de unresolved variabelen weg te werken uit Wengo. Tellerstand staat nu op 629 nog te gaan. Deze variabelen nog voornamelijk gevolg van moc_?.cxx files, bijvoorbeeld moc_QtPhoneCall.cxx In orgineel programma werd ook moc.exe met deze files aangeroepen. Moc.exe is onderdeel van QT.
Ik ga nu gewoon code meecompileren en het werkt m.i. wel, want aantal unresolved variabelen loopt terug als je deze code meecompileert.

Doel is om het (Wengo) werkend te krijgen en dan zien hoe het werkt. Hierna “wengo” op onze telefoonboek database zetten.

De hartelijke groet Jan Marco