Foonsearch

Hoi RGJ,

Ik laadde een hooking dll, echter kom er nu achter dat het programma erg traag daardoor is geworden. Sommige functionaliteiten van SQLyog werkten ook niet meer. M.i. kan hooking wel goed werken, echter moet je wel goed weten wat je doet. Ik ga mij nu eerst concentreren op het afmaken. In later instantie naar hooking kijken.

De hartelijke groet Jan Marco

Hoi RGJ,

Dit weekend ga ik de telefoonboeken maken uit de cdfoon. De ene met alle 06-nummers. De andere met alle white en pink gecombineerd. Ik wilde eerst stoppen bij postcode, echter denk nu weer aan om alles toch op te nemen. Wel een confrontatie met postcode tabel gaan uitvoeren.

Ik heb wel even weer naar hooking programma’s gekeken. Een mooi programma vond ik: WinAPIOverride : Free Advanced API Monitor, spy or override API or exe internal functions Dit programma gebruikt: InjLib - A library that implements remote code injection for all Windows versions - CodeProject
In het volgende project ( http://www.codeproject.com/system/mini_hook_engine.asp ) zie je al dat ze met 64 bits hooking aan de praat hebben. Ik heb niet zo goed bestudeerd, maar ze gaan m.i. met de disassember de machine code veranderen om de hooking goed te zetten. In dit project wordt naar een opensource disassembler ( diStorm disassembler library ) verwezen.

Vanmorgen ook naar schedulers gekeken, namelijk http://www.freertos.org/ en http://mtechit.com/dlsoftware/opensched/ Laatste project heeft wel wat structuur wat ik zou kunnen gebruiken. Ik heb al een timer routine en deze de scheduler laten aanroepen. Moet nog goed kijken naar de databasekoppeling.

Ik heb ook een source van filemon van sysinternals gevonden en daarbij ook nog goed compileert. Wat mij opviel is dat “google desktop proces” vaak files op je systeem opent.

Even de relevantie met SQLyog aangeven. Je hebt straks een applicatie tabel waarin de executable van een applicatie zit. Je kan dan met rechter muisknop deze executable de-assembleren en het resultaat weer in database opslaan. De code van filemon kan je natuurlijk ook in demon gaan hangen en dan automatisch alle geopende files laten monitoren in database. Hieruit ook iets maken dat je processen (automatisch) kan killen, dus bijvoorbeeld voorkomen dat het “google desktop proces” opstart.

De hartelijke groet Jan Marco

P.S. Je zou eigenlijk een (Vmware) pc in je netwerk moeten configuren die naar google gaat. Als je op de andere pc’s naar google gaat dan naar deze pc routeren en resultaten doorsluisen. Je voorkomt dan dat google op je pc ‘zit mee te kijken’.

Hoi RGJ,

Het lukte mij om met de 32 bit installer code (nullsoft) op een 64 bit vista OS een programma te installeren.

De hartelijke groet Jan Marco

Hoi RGJ,

Afgelopen dagen met wget en htmlviewer bezig geweest. Mijn bedoeling is om informatie van mijnpostbank, Pricewatch - Vergelijk elektronicaprijzen www.kvk.nl zo te parsen dat het automatisch in MySQL wordt opgenomen. Ik begin het parsen van html wel een beetje te begrijpen…

De hartelijke groet Jan Marco

Hoi RGJ,
Ik ben bezig om http://www.codeproject.com/KB/recipes/krhtmlviewer.aspx en mijn wget rip samen te voegen.

  1. Met wget haal je pagina op en pars je de sequence (o.a. cookies) in mysql.
  2. Krhtmlviewer gaat de pagina-opbouw in mysql parsen.
  3. Mysql-pagina-opbouw op scherm (GUI) zetten. (schermopbouw zit in Krhtmlviewer).
  4. Invoeren van account/wachtwoord in Mysql d.m.v. de GUI.
  5. Versturen van de Post-commando uit Mysql-pagina-opbouw en invoer in Mysql (stap 4).

Als bovenstaande werkt dan stap3/4 er tussen weghalen, door mysql automatisch te vullen.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik vind het erg leuk om er mee aan de gang te zijn. Kost me altijd wel wat tijd om in onderwerpen in te leven. Bijvoorbeeld nu bezig om deel van cookie info in mysql op te staan. Als je er mee verder prutst dan volgt structuur vanzelf goed na een paar iteratieslagen.

Vandaag verder met volgende onderwerpen.

  1. Wget (nu bezig om cookies in mysql op te slaan. (Cookies heb je nodig om in te loggen in sommige sites).
  2. http://www.codeproject.com/KB/recipes/krhtmlviewer.aspx
  3. http://mtechit.com/dlsoftware/opensched/
  4. Updater

Waar ik de volgende weken naar wil kijken:

  1. sTunnel STUN protocol - VoIP-Info inbouwen. Ik zie dat stun twee ip-adressen nodig heeft. Zie ook appendix voor de details. Ik heb nog geen duidelijk beeld hoe het werkt. Achtergrond info hierbij zie http://www.tech-invite.com/SIPWGs/15-WG-BEHAVE/PDF/draft-jennings-behave-test-results-04.pdf en STUN - Wikipedia In de tekst staat heel stroomschema met verschillende varianten. Je gaat m.i. connectie opzetten naar derde public peer als je beiden achter firewall zit. Ik denk dat als je vanachter firewall een connectie opbouwt een deur open is gezet om te gaan switchen. Je wilt niet hebben dat je geluid via derde partij (=STUN server = publieke peer) gaat doorrouteren. In bepaalde variant lees je dat ook “If the NATs are full cone then either side can initiate communication. If they are restricted cone or restricted port cone both sides must start transmitting together.” Dit betekent m.i. dat de tijdvolgorde belangrijk is.

[quote]STUN is a client-server protocol. A VoIP phone or software package may include a STUN client, which will send a request to a STUN server. The server then reports back to the STUN client what the public IP address of the NAT router is, and what port was opened by the NAT to allow incoming traffic back in to the network.
.
.
Once a client has discovered its external addresses, it can relate it to its peers. If the NATs are full cone then either side can initiate communication. If they are restricted cone or restricted port cone both sides must start transmitting together.[/quote]

  1. Database synchronisatie. Code heb ik al wel, alleen aansturen vanuit scheduler.
  2. Wengo (voice over ip) inbouwen. Ik wel ee rip van Wengo. Mogelijk ga ik ook officiele versie compileren met het recept dat ze voorschrijven. Ik ga wel de gui van SQLyog gebruiken, dus alleen de onderliggende code van Wengo gebruiken.
  3. Voorbrengingstraat maken d.m.v. database sychronisatie en de al ingebouwde installer van nullsoft.

De hartelijke groet Jan Marco

[quote]Appendix Stun server info:
./server [-v] [-h] [-h IP_Address] [-a IP_Address] [-p port] [-o port] [-m mediaport]

If the IP addresses of your NIC are 10.0.1.150 and 10.0.1.151, run this program with:
./server -v -h 10.0.1.150 -a 10.0.1.151

STUN servers need two IP addresses and two ports, these can be specified with:
-h sets the primary IP
-a sets the secondary IP
-p sets the primary port and defaults to 3478
-o sets the secondary port and defaults to 3479
-b makes the program run in the backgroud
-m sets up a STERN server starting at port m
-v runs in verbose mode[/quote]

Hoi RGJ,

Van weekend ook kijken naar http://www.ah.nl/previouslybought/PreviouslyBought.do
Ik ga beetje uitzoeken of je het met wget/htmlviewer kan parsen.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik heb een netwerkplanning voorbeeld in MySQL gedaan. Zie ook de appendix voor de details. Ik zie een task als een integratie van een todolist en het automatisch uitvoeren van een handeling. Ik heb drie lagen bedacht, namelijk project, job en task. Een project bestaat uit 1 of meedere jobs en een job kan uit 1 of meerdere tasks bestaan.

Het is mij vanmorgen gelukt om de eindpunten te bepalen. Nu ben ik bezig om via recursiviteit het proberen door te rekenen. Eerst voorwaarts doorrekenen en hierna in omgekeerde volgorde vanuit het eindpunt.

Mijn techniek: Als je in een knooppunt (de maximale duur van) alle binnen komende pijlen hebt bepaald kan je het knooppunt weer als een beginpunt gaan zien.

De scheduler ga ik gebruiken om o.a. de database synchronisatie aan te laten roepen. De velden van task kunnen nog wel veranderen. Ik ga gewoon iets bouwen en later kijken of het beter kan.

De hartelijke groet Jan Marco

[quote]create table task (
ts timestamp,
id bigint(16) unsigned not null,
importance bigint(15) not null default 0, # The current rating of this content.
priority bigint(15) not null default 0, # How important is this content for the end-user
peerId varchar(255) not null default’’,
guid varchar(255) not null default’’,
jobNr bigint(16) unsigned not null default 0,
stepNr bigint(16) unsigned not null default 0,
type varchar(16) not null default’manual’, # manual, auto, workdone, invalid
idParent varchar(36) not null default’’, # unique ID
idChild varchar(36) not null default’’, # unique ID
name varchar(255) not null default’C:\Program Files\PIN\app\folderSize\XFolderSizeTest.exe’, # printed name
start timestamp, # when the assigned resource starts doing this
finish timestamp, # the last day of work
duration bigint(16) unsigned not null default 10, # number of seconds of work
nSeconds bigint(16) unsigned not null default 0, # number of seconds worked so far
recurrence varchar(64) not null default’once’,
assignedToGuid varchar(255) not null default’’,
allocatedByGuid varchar(255) not null default’’,
risk bigint(16) unsigned not null default 0,
description blob, # longer name
CmdLine blob,
DomainName varchar(255) not null default’WORKGROUP’,
UserName varchar(255) not null default’test01’,
Password varchar(255) not null default’test01’,
Desktop varchar(255) not null default’WinSta0\Default’,
CreateTokenDirectly varchar( 8 ) not null default’no’,
dwSession bigint(16) unsigned not null default 0,
LoadProfile varchar( 8 ) not null default’no’,
CopyTokenPropFromCaller varchar( 8 ) not null default’no’,
KeepPriv varchar( 8 ) not null default’yes’,
dwLogonType bigint(16) unsigned not null default 2,
dwLogonProvider bigint(16) unsigned not null default 0,
fullduration bigint(16) unsigned not null default 0, # adjusted for efficiency of the resource and slippage
origfullduration bigint(16) unsigned not null default 0, # fullduration before slippage adjustment
remaining bigint(16) unsigned not null default 0, # used during schedule
rremaining bigint(16) unsigned not null default 0, # used during schedule
lstart timestamp, # last day assigned resource can start doing this
lfinish timestamp, # last day assigned resource can finish this
slack bigint(16) unsigned not null default 0, # float in seconds
astart timestamp, # Actual Start
afinish timestamp, # Actual Finish
bstart timestamp, # Baseline Start
bfinish timestamp, # Baseline Finish
parents bigint(16) unsigned not null default 0, # number of dependencies – increases scheduling priority
children bigint(16) unsigned not null default 0, # number of number of follows – increases scheduling priority
x1 bigint(16) unsigned not null default 0, # gannt chart drawing coordinates
y1 bigint(16) unsigned not null default 0, # gannt chart drawing coordinates
x2 bigint(16) unsigned not null default 0, # gannt chart drawing coordinates
y2 bigint(16) unsigned not null default 0, # gannt chart drawing coordinates
Nresources bigint(16) unsigned not null default 1, # number of people who can do this.
block varchar( 8 ) not null default’yes’, # if yes, must be scheduled as a consecutive block of time
scheduled varchar( 8 ) not null default’no’, # if yes, has been scheduled
rscheduled varchar( 8 ) not null default’no’, # if yes, has been scheduled on reverse run
percent_complete double unsigned not null default 0, # fraction of this task already finished
nx bigint(16) unsigned not null default 0, # network diagram drawing coordinates
ny bigint(16) unsigned not null default 0, # network diagram drawing coordinates
notes blob, # notes about this task.
hashSincFields varchar(255) not null default’’,
fsSinc varchar(255) not null default’’,
hash varchar(255) not null default’’,
hashUpdate varchar(255) not null default’’,
updateEntry timestamp,
beginEntry timestamp,
endEntry timestamp,
owner varchar(255) not null default’’,
recordCheck bigint(10) not null default 0,
status varchar(255) not null default’’,
action varchar(255) not null default’’,
index (importance),
index (priority),
index (peerId(16)),
index (guid(16)),
index (jobNr),
index (stepNr),
index (type(4)),
index (idParent(16)),
index (idChild(16)),
index (name(32)),
index (start),
index (finish),
index (duration),
index (nSeconds),
index (recurrence(16)),
index (assignedToGuid(16)),
index (allocatedByGuid(16)),
index (risk),
index (description(32)),
index (CmdLine(32)),
index (DomainName(32)),
index (UserName(16)),
index (Password(16)),
index (Desktop(32)),
index (CreateTokenDirectly(3)),
index (dwSession),
index (LoadProfile(3)),
index (CopyTokenPropFromCaller(3)),
index (KeepPriv(3)),
index (dwLogonType),
index (dwLogonProvider),
index (fullduration),
index (origfullduration),
index (remaining),
index (rremaining),
index (lstart),
index (lfinish),
index (slack),
index (astart),
index (afinish),
index (bstart),
index (bfinish),
index (parents),
index (children),
index (Nresources),
index (block(3)),
index (scheduled(3)),
index (rscheduled(3)),
index (percent_complete),
index (nx),
index (ny),
index (notes(32)),
index (hashSincFields(16)),
index (fsSinc(16)),
index (hash(16)),
index (hashUpdate(16)),
index (updateEntry),
index (owner(16)),
index (recordCheck),
index (ts),
primary key (id)
);

insert into task(ts,id,importance,priority,peerId,guid,jobNr,stepNr,type,idParent,idChild,name,start,finish,duration,nSeconds,recurrence,assignedToGuid,allocatedByGuid,risk,description,CmdLine,DomainName,UserName,Password,Desktop,CreateTokenDirectly,dwSession,LoadProfile,CopyTokenPropFromCaller,KeepPriv,dwLogonType,dwLogonProvider,fullduration,origfullduration,remaining,rremaining,lstart,lfinish,slack,astart,afinish,bstart,bfinish,parents,children,x1,y1,x2,y2,Nresources,block,scheduled,rscheduled,percent_complete,nx,ny,notes,hashSincFields,fsSinc,hash,hashUpdate,updateEntry,beginEntry,endEntry,owner,recordCheck,status,action) values (‘2008-02-11 15:39:13’,0,0,0,’’,’’,0,0,‘manual’,‘57aa758b-ba4c-4f15-973cbdd1d90f2221’,‘f5b7b084-fc69-4eec-bcd4004e2d7aa75b’,‘C:\Program Files\PIN\app\folderSize\XFolderSizeTest.exe’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,4,0,‘once’,’’,’’,0,NULL,NULL,‘WORKGROUP’,‘test01’,‘test01’,‘WinSta0\Default’,‘no’,0,‘no’,‘no’,‘yes’,2,0,0,0,0,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,0,0,0,0,0,1,‘yes’,‘no’,‘no’,0,0,0,NULL,’’,’’,’’,’’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,’’,0,’’,’’),(‘2008-02-11 15:43:53’,1,0,0,’’,’’,0,0,‘manual’,‘f5b7b084-fc69-4eec-bcd4004e2d7aa75b’,‘71d24d4a-ee24-4593-875a368cb00f5d35’,‘C:\Program Files\PIN\app\folderSize\XFolderSizeTest.exe’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,7,0,‘once’,’’,’’,0,NULL,NULL,‘WORKGROUP’,‘test01’,‘test01’,‘WinSta0\Default’,‘no’,0,‘no’,‘no’,‘yes’,2,0,0,0,0,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,0,0,0,0,0,1,‘yes’,‘no’,‘no’,0,0,0,NULL,’’,’’,’’,’’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,’’,0,’’,’’),(‘2008-02-11 15:44:25’,2,0,0,’’,’’,0,0,‘manual’,‘f5b7b084-fc69-4eec-bcd4004e2d7aa75b’,‘be15bbac-67fe-41b4-b0d62bb66523a0b9’,‘C:\Program Files\PIN\app\folderSize\XFolderSizeTest.exe’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,8,0,‘once’,’’,’’,0,NULL,NULL,‘WORKGROUP’,‘test01’,‘test01’,‘WinSta0\Default’,‘no’,0,‘no’,‘no’,‘yes’,2,0,0,0,0,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,0,0,0,0,0,1,‘yes’,‘no’,‘no’,0,0,0,NULL,’’,’’,’’,’’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,’’,0,’’,’’),(‘2008-02-11 15:48:04’,3,0,0,’’,’’,0,0,‘manual’,‘f5b7b084-fc69-4eec-bcd4004e2d7aa75b’,‘cb82ca33-0464-48a9-a547a621d350f480’,‘C:\Program Files\PIN\app\folderSize\XFolderSizeTest.exe’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,6,0,‘once’,’’,’’,0,NULL,NULL,‘WORKGROUP’,‘test01’,‘test01’,‘WinSta0\Default’,‘no’,0,‘no’,‘no’,‘yes’,2,0,0,0,0,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,0,0,0,0,0,1,‘yes’,‘no’,‘no’,0,0,0,NULL,’’,’’,’’,’’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,’’,0,’’,’’),(‘2008-02-11 15:49:06’,4,0,0,’’,’’,0,0,‘manual’,‘71d24d4a-ee24-4593-875a368cb00f5d35’,‘114a89da-d14e-4e6d-9a9f16838cde62f1’,‘C:\Program Files\PIN\app\folderSize\XFolderSizeTest.exe’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,15,0,‘once’,’’,’’,0,NULL,NULL,‘WORKGROUP’,‘test01’,‘test01’,‘WinSta0\Default’,‘no’,0,‘no’,‘no’,‘yes’,2,0,0,0,0,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,0,0,0,0,0,1,‘yes’,‘no’,‘no’,0,0,0,NULL,’’,’’,’’,’’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,’’,0,’’,’’),(‘2008-02-11 15:50:38’,5,0,0,’’,’’,0,0,‘manual’,‘be15bbac-67fe-41b4-b0d62bb66523a0b9’,‘cb82ca33-0464-48a9-a547a621d350f480’,‘C:\Program Files\PIN\app\folderSize\XFolderSizeTest.exe’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,9,0,‘once’,’’,’’,0,NULL,NULL,‘WORKGROUP’,‘test01’,‘test01’,‘WinSta0\Default’,‘no’,0,‘no’,‘no’,‘yes’,2,0,0,0,0,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,0,0,0,0,0,1,‘yes’,‘no’,‘no’,0,0,0,NULL,’’,’’,’’,’’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,’’,0,’’,’’),(‘2008-02-11 15:51:24’,6,0,0,’’,’’,0,0,‘manual’,‘cb82ca33-0464-48a9-a547a621d350f480’,‘114a89da-d14e-4e6d-9a9f16838cde62f1’,‘C:\Program Files\PIN\app\folderSize\XFolderSizeTest.exe’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,12,0,‘once’,’’,’’,0,NULL,NULL,‘WORKGROUP’,‘test01’,‘test01’,‘WinSta0\Default’,‘no’,0,‘no’,‘no’,‘yes’,2,0,0,0,0,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,0,0,0,0,0,1,‘yes’,‘no’,‘no’,0,0,0,NULL,’’,’’,’’,’’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,’’,0,’’,’’),(‘2008-02-11 15:52:47’,7,0,0,’’,’’,0,0,‘manual’,‘114a89da-d14e-4e6d-9a9f16838cde62f1’,‘7021040f-6835-4510-a222bd6eb0d37267’,‘C:\Program Files\PIN\app\folderSize\XFolderSizeTest.exe’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,8,0,‘once’,’’,’’,0,NULL,NULL,‘WORKGROUP’,‘test01’,‘test01’,‘WinSta0\Default’,‘no’,0,‘no’,‘no’,‘yes’,2,0,0,0,0,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,0,0,0,0,0,1,‘yes’,‘no’,‘no’,0,0,0,NULL,’’,’’,’’,’’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,’’,0,’’,’’),(‘2008-02-11 15:54:39’,8,0,0,’’,’’,0,0,‘manual’,‘be15bbac-67fe-41b4-b0d62bb66523a0b9’,‘71d24d4a-ee24-4593-875a368cb00f5d35’,‘C:\Program Files\PIN\app\folderSize\XFolderSizeTest.exe’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,0,‘once’,’’,’’,0,NULL,NULL,‘WORKGROUP’,‘test01’,‘test01’,‘WinSta0\Default’,‘no’,0,‘no’,‘no’,‘yes’,2,0,0,0,0,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,0,0,0,0,0,0,1,‘yes’,‘no’,‘no’,0,0,0,NULL,’’,’’,’’,’’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,‘0000-00-00 00:00:00’,’’,0,’’,’’);

[/quote]

Hoi RGJ,

Het is mij gelukt om netwerkplanning forward en backward door te rekenen in MySQL. Ik heb vooralsnog alleen voor de tabeldefinitie http://mtechit.com/dlsoftware/opensched/ gebruikt. De routines heb ik niet zo kunnen toepassen. Moet het eerst beter begrijpen om het toe te kunnen passen. Op zich zitten er wel leuke dingen in. Nu heb ik boek “Inleiding tot de Operationele Research” van Ir F Huisman gebruikt en eigen MySQL routines. Wat ik wel raar vind dat je niet ergens MySQL routines zou kunnen copieren die hetzelfde doen. Beetje gevoel dat ik het wiel aan het uit vinden ben.

Komend weekend ga ik de routines uit MySQL halen die timestamp na integer en visa versa kan converteren. Intern in planningroutines reken je dus met een integer en in MySQL sla je het in een TIMESTAMP formaat op. Timestamp heeft in MySQL het voordeel dat je gemakkelijk kan sorteren en met groter en kleiner dan vergelijkingen in MySQL kan werken. In het verleden gebruikte ik ‘date’ en ‘time’ veld, echter dat is niet handig als je records onderling wilt gaan vergelijken.

De hartelijke groet Jan Marco

Hoi RGJ,

Je moet een task als een “klusje” zien die je ook kan schedulen, elke jaar, maand, dag, uur, etc laten uitvoeren. Bijvoorbeeld het downloaden van een file elke dag. Als je klusjes aan elkaar wilt koppelen maak je een job-record aan. Aan jobnummer zitten de tasks (“klusjes”) gekoppeld. Dit kan sequentieel of parrallel worden uitgevoerd. Denk hierbij aan downloaden van mijnpostbank.nl gegevens en hierna een klusje definieren die het rippen van de gegevens uit html file gaat uitvoeren.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik heb nu in een seperate scheduler project de code gedaan om:

  1. forward en backward een task te schedulen;
  2. timestamp naar integer en visa versa te berekenen;
  3. de timer routines die elke 20 seconden een routine kunnen aanroepen;
  4. de pthreads routines te kunnen gebruiken.

Bovenstaande code zit ook wel in mijn programma, echter het is makkelijker om 1 thema in een apart programma te zetten, want compileert snelller en het is overzichtelijker. Het zijn maar 16000 regels. Als het straks werkt dan weer in het normaal programma kopieren.

De hartelijke groet Jan Marco

Hoi RGJ,

Afgelopen weekend naar de testprogramma-tjes van POSIX Threads (pthreads) for Win32 gekeken. Met de volgende code kan je een thread starten:

[quote] for (i = 1; i <= NUMTHREADS; i++)
{
threadbag[i].started = 0;
threadbag[i].threadnum = i;
assert (pthread_create (&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);
}[/quote]

Met de volgende code zou je deze thread voordat ze ge-eindigd zijn kunnen stoppen, echter m.i. werkt dit niet. Ik zie alleen dat hij met return code 0 terugkomt, dus niet gecancelled voortijdig.

[quote] for (i = 1; i <= NUMTHREADS; i++)
{
assert (pthread_cancel (t[i]) == 0);
}[/quote]

Moet nog even uitzoeken, waarom dit niet goed gaat. Stel je hebt een workerthread een ftp klusje van half uur gegeven, als je computer eerder uitzet dan moet je dit klusje m.i. gewoon kunnen afbreken. Bij stoppen van programma even alle workerthreads doorlopen of ze wel gestopt zijn, zoniet dan pthread_cancel() aanroepen.

De hartelijke groet Jan Marco

Hoi RGJ,

Afgelopen Pasen met workerthreads en scheduling bezig gehouden. Ik had code van POSIX Threads (pthreads) for Win32 uitgezet, daarom stopte pthread_cancel() niet goed.

Je hebt drie methoden om workerthreads af te sluiten.

  1. De conditie van de hoofd-lus van workerthread onwaar maken;
  2. Indien in workerthread niet regelmatig naar hoofdlus terugkeert, dan in de onderliggende routines een testconditie pthread_testcancel() toevoegen;
  3. Als 1 en 2 niet werkt dan workerthread met pthread_cancelKill() stoppen.

Het beëindigen van de workerthread met pthread_testcancel() en pthread_cancelKill() wordt gedaan door thread te stoppen hierna een andere routine als exit aangeven, waarna de thread weer wordt geresumed. Ik heb wat in de pthreads-win32 routines zitten knutselen om bij beëindigen ook de openstaande variabelen van de workerthread te laten afsluiten. Als je een GUI-programma/demon afsluit begin je met 1) na paar seconden met 2) en enige seconden later met 3).

Tevens vreselijk zitten prutsten met timestamp formaat naar long formaat en visa versa. Ik haal uit MySQL de task die gestart moeten worden van nu tot over een tijdspanne van 15 minuten. Ik zet de workerthread klaar en ik bereken hoeveel tijd de workerthread moet slapen om op de juiste tijdstip te laten ontwaken. Met de test die ik net heb gedaan werkt dit principe erg goed. Ik heb een testtask routines gemaakt waarmee ik de workerthreads kan testen. De tijdsduur (duration) in seconden laat ik de thread duration maal een seconden slapen. Hij komt dus elke seconden bij de hoofdlus langs om te testen of hij moet stoppen.

Veel heb ik nog een probleem om de verschillende tijden te definiëren. Lstart = laatst mogelijk starttijd, astart = actual start time, bstart = baseline starttijd en start = werkelijke start tijd. Ik denk aan om astart de tijd te laten zijn waarbij je ooit begonnen bent met de task. Als je de task stopt en later weer opnieuw opstart dan ‘start’ time alleen de nieuwe tijdstip geven.

RGJ, Ik ben een stuk verder gekomen om een leuke scheduler te bouwen. Moet nog goed nadenken wat voor logica er allemaal in moet. Denk aan dat een task in werkelijkheid erg gaat uitlopen dan moet je m.i. de bijgehorende tasks automatisch weer forward- en backward- gaan schedulen.

De hartelijke groet Jan Marco

Hoi RGJ,

Vandaag bezig geweest om de wachtlus bij het begin van de workerthread zo te maken dat hij stopt met wachten als je het programma op 1 niveau van terminatie (hoofdconditie onwaar maken) brengt. De procedure pthread_delay_np() werkte niet goed, dus wat aangepast op een zodanige manier dat het wel goed werkt. Morgen ga ik de prioriteit van elke workerthead bij de creatie van de workerthead aanpassen. Je kan ook na de creatie van de workerthead de prio gaan veranderen. Zitten wel routines in de pthread distributie, alleen goed testen of het ook goed werkt.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik heb vandaag de heledag met het automatisch aanmaken van user accounts bezig geweest. Uit Discover COM: Connection Points versus Mailslots in Replication Directory. - CodeProject kan je code halen om users aan te maken en te verwijderen. Je geeft straks aan onder welke user je een programma wilt opstarten en als de user niet bestaat gaat hij hem automatisch aanmaken.

Ik ben nu aan het kijken naar het aanmaken van processen. Zie
http://msdn2.microsoft.com/en-us/library/ms682512(vs.85).aspx
om een subproces te maken. De threads werken onder een proces. Je kan bij een proces aangeven onder welke prioriteit-klasse hij moet werken. Denk hierbij aan “REALTIME_PRIORITY_CLASS” of “THREAD_PRIORITY_IDLE”. Als je onder 1 programma meerdere subprocessen zou kunnen hangen, zou je de workerthreads onder verschillende prioriteiten-klassen kunnen hangen. Met routine CreateRemoteThread() kan je een thread onder andere proces hangen. RGJ, Het is mij nog niet zo duidelijk hoe een subproces werkt. Hoe kan je subproces termineren zonder hem hard te gaan ‘killen’.

De hartelijke groet Jan Marco

Hoi RGJ,

Bij de test van de code van “msdn2.microsoft.com/en-us/library/ms682512(vs.85).aspx” crasht mijn programma en ik zie niet direct op korte termijn het voordeel, dus denk ik aan om eerst maar geen subprocessen te gaan gebruiken. Gewoon een prioriteitclass per applicatie kiezen, dus default voor de demon (foonsearchd.exe) in REALTIME_PRIORITY_CLASS en de GUI (voipe.exe) in NORMAL_PRIORITY_CLASS.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik ben nu bezig om de RunAsUser code in een workerthread op te starten. Op zich loopt het opstarten van een andere programma direct door. Ik zet het in een workerthread omdat het wel langer kan duren. Als bijvoorbeeld de user er niet is dan user aanmaken. Je kan wel wat retries inbouwen, etc.

Volgend weekend de wget code er in zetten en weer naar mijnpostbank.nl kijken of ik de bank gegevens kan binnenhalen en daarna parsen.

De hartelijke groet Jan Marco

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