Foonsearch

Hoi RGJ,

Als je er mee aan de gang gaat kom je er achter wat je moet gaan oplossen. Dus gewoon weer verder gegaan met ‘boetseren’. Ik zit nu al op 25 tabellen.

Eerst een ‘resendqueryblock’ tabel gemaakt om aan te geven dat een blok van een query(result) nog een keer verzonden moet worden. N.B. Bij UDP kunnen netwerkpakketjes niet aankomen. De applicatie moet hier iets voor maken.

Het vervolg probleem is dat je niet gemakkelijk in ‘send’ tabel kan zoeken waar het “nog een keer te verzenden blok” staat (QueryNumber, SequenceNumber). De send tabel bestaat de message(pack) uit 1 of meerdere PING, PONG, HELO, Query, QueryResult, ResendQueryBlock, PingPeer en/of PongPeer berichtjes. Je zou het eerst moeten gaan parsen om de blok terug te vinden.

Ik heb het “probleem” opgelost door een nieuwe tabel te maken namelijk ‘queryblockout’. Alle blokken die je uitstuurt (door een query uit te voeren) naar een andere peer worden gelijktijdig een kopietje van de blokken gemaakt en worden in ‘queryblockout’ gezet. Komt er een resendqueryblock verzoek van de andere peer binnen dan haal je de bijbehorende {QueryNumber, SequenceNumber} blok uit tabel ‘queryblockout’ en zet hem weer in de ‘send’ tabel.

Je gaat om de 5 minuten kijken, dus is de afgelopen 5 minuten 20 keer een resendqueryblock verzoek van een bepaalde blok geweest stuur je maar 1 keer het blok naar de andere peer terug.

Ik ga nu verder met het beter testen en proberen om een (binary) file in de blob veld te zetten.

Volgende week ga ik met encrypty, pingpeer, pongpeer aan de gang.

De vriendelijke groet Jan Marco

P.S. (QueryNumber, SequenceNumber)= Je hakt een file of mysql output records in blokken. De volgorde van de blokken is de SequenceNumber. De QueryNumber is een getal (id) wat uniek is op de peer waarop de query betrekking heeft. Een volgende query die je wilt uitvoeren heeft een QueryNumber = Max(id) + 1.

Anders geformuleerd: Je krijgt bijvoorbeeld een query van een andere peer X binnen. Je zet hem als laatste record in de query tabel (met id = (max(id) + 1). Dit heeft tevens tot gevolg dat de Queryverwerkingthread the query gaat uitvoeren. Het veld querynummer geeft de id aan welke Peer X de query kent. De Queryverwerkingthread stuurt automatisch het resultaat (in blokken < MTU) met de key (‘querynummer’) terug naar de vragende peer.

Hoi RGJ,

Als je onderstaande (zie ook appendix) in de mysql client intoetst dan werkt het wel, echter bij de C-client werkt het niet. Je zal de regel moeten parsen tot ‘;’ en als je use ziet kan je met ‘use mysql;select db from db;’ zien of de database ook bestaat. Het vooraf parsen van de netwerkquery is wel een belangrijk item wat gaandeweg wel ontwikkeld zal worden.

Eigenlijk bestaat onderstaande query uit twee subqueries. Ik heb in queryresult toch een format gemaakt, dus meerdere queries kunnen toestaan in 1 query. Elke query afzonderlijk heeft zijn eigen outputrecords/resultaatgebied.

Je wilt niet hebben dat iemand anders ‘alles’ bij je weggooit. Als iemand anders records insert kan je die makkelijk weer verwijderen. Voordat je netwerk delete uitvoert eerst een select doen om alles te saven wat onder de delete valt in een archief. Hierna de te verwijderen records weggooien. Daarbij een soort rollback strategie ontwikkelen.

Met de nulde database connectie wil ik de netwerk (My)SQL query gaan uitvoeren. De eerste database connectie gaan prikken in interne mysql tabel en de nog te ontwikkelen tussentabel.

Vanmorgen alle query uit query tabel behalve de ene welke in onderstaande appendix staat gedaan. Ik moet nu eerst eenvoudige situaties gaan testen. N.B. Door “use database;” voor de SQL query te zetten kan je straks naar al je databases springen.

De vriendelijke groet Jan Marco

Appendix A :MySQL client query:
‘use foondump2005;select id,lastname,streetname,postalcode,city,phone from white_subscriber where lastname=‘jansen’;’

Hoi RGJ,

Ik heb een separate programma gemaakt “networkquery”. Hierin ben ik begonnen om alle “netwerk (SQL) commando’s” uit MySQL te sprokkelen. Wel valt mij op dat overal commando’s staan. Als networkquery goed werkt dan relevante source in foonsearchd.c gaan kopieren.

Het is niet mijn bedoeling om de source van MySQL er in te gaan kopieren. Het wordt alleen een vertaal programma die de network SQL omzet in standaard MySQL commando’s. Daarbij kan je ook met dit programma gaan kijken wat de impact is van de query die de andere peer aan jouw MySQL server stelt. Mogelijk wel MySQLAdmin en MySQLDump programma’s gaan aanroepen.

De vriendelijke groet Jan Marco

static COMMANDS commands[] =
{
{ “?”, ‘?’, “Synonym for `help’.” },
{ “add locks”, 0, “Add locks around insert statements.”},
etc.

Hoi RGJ,

Het is mij net gelukt om het queryresult van de SQL-query van de bijlage te verzenden van de ene peer naar een andere peer. Ik pars de query niet, gewoon handmatig even op “foondump2005” gezet.

Het is 2171829 bytes {= 2121 blokken * 1024 bytes (per blok)} groot en de TotalSequenceNumber=2121. Het aantal bytes is groter dan je zou verwachten want ik zet pointers in het resultaat.

Als ik dosbox open laat staan raakt hij wel UDP packets kwijt. Hierna nog een keer verzenden en dan krijg je alle packets binnen. Het resenden op blokniveau moet ik volgende week er in gaan bouwen.

De vriendelijke groet Jan Marco

Appendix A :MySQL client query:
‘select id,lastname,streetname,postalcode,city,phone from white_subscriber where lastname=‘jansen’;’

Hoi RGJ,

Ik heb “Visual studio 2002” op mijn nieuwe Acer pc geïnstalleerd. Het installeren werkt dit keer in één keer gewoon goed. Komt m.i. dat ze de default windows instelling ‘goed’ hebben staan. Hierna een andere mysql geïnstalleerd namelijk 5.0.21. Hierna foonsearchd.exe geïnstalleerd. Ik kreeg foutmelding (=bad query) dat foondump er niet opstond, dus foondump geïnstalleerd. De nieuwe versie (5.0.21) MySQL gaf problemen met het peerid veld. Dataveld zou te klein zijn. Ik zag ook dat velden aan elkaar gepakt worden bij het inserten in MySQL. Dus tabel veld vergroot naast het peerid arrayveld in het programma. Ben er dus achter gekomen dat een andere versie MySQL er toch strakker in kan zitten.

Vandaag ga ik eerst testen query verzenden, uitvoeren op andere peer, waarna het resultaat weer terug wordt gestuurd testen. Als dit lukt ga ik ‘queryblockresend’ afmaken.

Even de aandachtpuntjes voor deze week:

  1. Encryptie: De keys in MySQL proberen weg te schrijven. Als Blowfish niet uit de Openssl dll’s komen dan een eigen blowfish variant gaan gebruiken. N.B. Als straks UDP klaar is ga ik TCP er in aanbrengen. Wget ga ik dan ook inporteren. Als ik ook eigen blowfish variant heb hoef ik maar 1 set van Openssl dll’s te gebruiken. Zal ook de structuur (interne records) van wget er meer in laten terugkomen. Denk aan dat public key ook in wget (https) zitten. Een andere richting waar ik naar toe wil werken is SAFMQ. MQ is ook belangrijk om te kunnen. Foonsearchd.exe werkt m.i. ook met queues. Je stopt als een pakket binnen komt in mysql. Hierna gaat een andere thread de binnenkomende pakketen verwerken, etc.

  2. PingPeer, PongPeer: Hierbij krijg je de koppeling tussen peer en (online)telefoonboek.

  3. Zippen: Om zo weinig mogelijk bytes over de lijn te zenden, eerst een query zippen voordat je hem verstuurt. M.i. moet je niet op block niveau zippen maar op het totaal.

  4. Networkquery: Is onderdeel om een netwerk query eerst te analyseren (parsen) voordat je hem gaat uitvoeren. Je kijkt ook wie het vraagt. Als PingPeer/PongpPeer klaar is weet je ook wie je vrienden zijn op het internet. Networkquery is nu nog een beetje concept. M.i. is de richting wel goed om dit te gaan ontwikkelen.

Hierbij 4 interessante projecten.

  1. This article describes the implementation of an image processing tool. Je kan de kleuren van een image aanpassen.: http://www.codeproject.com/bitmap/ImageProcessing.asp

  2. A flexible charting control to display 2D data. Stel je hebt de beurskoersen in een online tabel dan kan je met deze project een grafiek maken in de GUI gedeelte: High-speed Charting Control - CodeProject

  3. BasicExcel - A Class to Read and Write to Microsoft Excel. Een gedeelte van de data transporteren naar Excel: http://www.codeproject.com/useritems/BasicExcel.asp

  4. Misschien bruikbaar voor het parsen van HTML van de Dikke van Dalen. HTML/XML scanner/tokenizer, also known as a pull parser: http://www.codeproject.com/cpp/HTML_XML_Scanner.asp

RGJ, Ik ga eerst foonsearchd.exe op windows afmaken. Als het goed werkt dan het ook proberen terug te poorten op Linux. De GUI foonsearch.exe wil ik wel alleen op Windows gaan bouwen.

De vriendelijke groet Jan Marco

Hoi RGJ,

De afgelopen drie dagen stevig bezig geweest. Voor mij gevoel niet zo veel opgeschoten gezien mijn inspanning. Het is mij net gelukt om een query op peer-1 te maken en dan de query uit te voeren op peer-2 en het resultaat automatisch weer op peer-1 in het queryresultveld op te slaan. Het is super flexibel opgezet. Ik kan een peer een query sturen en het resultaat zal deze peer naar een peer sturen die ik heb aangeven. Mogelijk is het voor de peers onwenselijk om mijn query uit te voeren, echter dat doe je door het parsen van de query in de nog te ontwikkelen “networkquery module”.

Wat ik erg mooi vind is dat je in mysql kan zien wat er gebeurt. Het is m.i. erg transparant.

Het leermoment was dat je beter een routine kan maken om een query in database te zetten dan handmatig een query te maken. Deze routine kan je ook in de GUI programma gaan gebruiken.

Daarnaast heb ik de MySQL velden weer aangepast. Korter en ‘begrijpelijke” veldnamen is m.i. beter. Persoonlijk vind ik de veldnamen van Foondump erg mooi. Aanpassen (en reorganiseren) van de veldnamen is best veel werk gebleken.

RGJ, Eigenlijk bestaat het uit een logische volgorde van activiteiten. Om het te bouwen maak je een werkend deeltje. De afgelopen dagen meer naar de keten gekeken. Ik kwam er achter dat sommige velden niet gevuld werden. Ik moet nog verder testen. Dieper in de velden gaan kijken. Ik ga nu naar het mergen kijken als het queryresult uit meerdere pakketten bestaat. Hierna het resenden van queryblocks gaan maken/testen.

De vriendelijke groet Jan Marco

Hoi RGJ,

Gisteren heb ik Firefox (webbrowser) en Thunderbird (emailpakket) van http://www.mozilla.org/ gedownload. Beide pakketen zijn een beetje nabouw van bestaande windows pakketen (Explorer en Outlook). Ik zag wel dat Explorer nog meer functionaliteit bezit dan Firefox, want een bepaalde portal werkt niet met Firefox.
Persoonlijk zie ik Thunderbird niet als aparte applicatie. N.B. Met foonsearchd.exe haal je de mails op en zet deze in de queryresult blobveld. Daarnaast zal je adresboek steeds groter worden doordat je van andere peers subscriber entries gaat krijgen.

Voor het GUI gedeelte wil ik eerst naar Todolist, gridcontrol, Wengo, etc. kijken. Misschien het resultaat in Firefox gaan inbouwen. Moet nog beter naar de Firefox code kijken of je het gemakkelijk kan gebruiken.

De vriendelijke groet Jan Marco

Firefox (Mozilla) was er lang voor Internet Explorer, het is eerder andersom. Lees maar eens op Internet Explorer - Wikipedia

Hoi RGJ,

Firefox (Mozilla) was er lang voor Internet Explorer, het is eerder andersom.

RGJ, Je hebt gelijk. Het punt wat ik wilde maken is dat ze te veel naar elkaar zitten te kijken, zonder met eigen nieuwe dingen te komen. Je ziet dit fenomeen wel meer. Ik weet dat men bij gnunet erg naar (de grote broer) freenet zit te kijken.

De vriendelijke groet Jan Marco

Sterker nog, Internet Explorer is een regelrecht koekoeksjong (1. jong van een koekoek; 2. klaploper; 3. bastaard) van de originele NCSA Mosaic browser waaruit Nestcape en uiteindelijk Firefox ook voortgekomen zijn:

[quote]Prominent among these was the Mosaic browser, of which Spyglass licensed the technology and trademarks to develop their own Web browser. The source code of Spyglass Mosaic was licensed to Microsoft and became the basis for their Internet Explorer.

Wikipedia

[/quote]
Spyglass had het nakijken:

[quote]Yes, Microsoft royally screwed over Spyglass by licensing their code and then turning around and giving it away for free. This obviously made it a lot more difficult for Spyglass to sell other licenses since their potential customers could just embed Internet Explorer for free. Not only did Microsoft destroy Spyglass’ existing market, but Spyglass also accused Microsoft of not paying the required royalties on the code that they licensed. Spyglass has since been relegated to a niche market, and it is interesting to note that they don’t even mention Internet Explorer as one of their accomplishments in their showcase.

What’s So Bad About Microsoft?
http://www.kmfms.com/whatsbad.html
[/quote]
De truuk was: Microsoft, “making no direct revenues on IE”, hield vol dat het daarom contractueel nauwelijks iets hoefde te betalen. De MS browser werd gratis ter beschikking gesteld, net alsof Bill Gates - zoals al die anderen die al dan niet belangeloos bijgedragen hebben aan de ontwikkeling van het Internet zoals wij dat nu kennen - zich ook schaarde achter “een groot ideaal: het internet toegankelijk maken voor iedereen”

.

Al die oude browsers van vroeger zijn oa.
http://browsers.evolt.org/]hier
handzaam op één plek gearchiveerd. Nostalgie-tripje, die Mosaic van Spyglass daar nog es opgehaald, onder XP geinstalleerd in “WIN32APP\SPYGLASS\EMOSAIC” (E staat voor Evaluation) en uitgeprobeerd. Werkt nog steeds maar lang niet met alle URL’s waar je naar toe wil, bijvoorbeeld, deze URL doet het:


En deze URL laat Mosaic van Spyglass niet zien:De afgebeelde weergave van deze laatste pagina in die oude Mosaic is dus doorgestoken kaart maar laat goed zien hoeveel de betrokken ondernemers, respectievelijk Bill Gates en Jim Clark van het voormalige Netscape overhielden aan onder meer het gratis verspreiden van webbrowsers.

[size=9]Boven: “Superyacht ‘Ice’ pictured off Illetes. Her original name was ‘Air’- visible at the time of this picture.” Zou eigendom zijn van Gates. Onder: driemaster ‘Athena’ van Jim Clark, Antibes, 28/Aug/05. Dat zou tegenwoordig ‘gecharterd’ kunnen worden, wat volgens degene die dat wist te vertellen een teken is dat het nu niet meer zo goed met hem gaat als destijds.[/size]

Ja, en het staat nog steeds in de About… box van Internet Explorer:

Trouwens, Jan Marco,

Of was het zo dat de bouwer van de bepaalde portal de standaard niet gevolgd heeft, en Internet Explorer ook niet?

Hoi Weerman, RGJ,

Of was het zo dat de bouwer van de bepaalde portal de standaard niet gevolgd heeft, en Internet Explorer ook niet?

In februari 1993 lanceerde NCSA de eerste webbrowser.

M.i. veranderen standaards in de loop van de tijd. De omgeving verandert dus de standaard ook. Toen ik op de mts elektrotechniek zat had je de standaard, namelijk “NEN1010”. Ik moest wel eens een nieuwe boek kopen, hierdoor worden de huidige normen geupdate aan de huidige omgeving.

M.i. is het wel logisch dat als je op een oude standaard verder ontwikkelt (als bijvoorbeeld Explorer en Firefox doen) dat je met eigen aanvullingen gaat komen.

Opzich is het aan te bevelen om de standaard te volgen. Je gaat natuurlijk niet het wiel opnieuw uitvinden. Bij foonsearchd gebruik ik de oude protocol van gnunetd. Ik zie dat je geen urgentie en prioriteit bij binnenkomende pakketen meekrijgt. Voor de verwerking is het wel handig (*) om de volgorde anders dan sequentieel te laten verlopen, dus ga je m.i. het “protocol” aanpassen. N.B. Ik kan wel pre-processing gaan doen. Een andere peer zegt dat hij heel belangrijk is, maar mijn peer kan hierover wel een andere mening hebben.

De vriendelijke groet Jan Marco

(*) Het ontcijferen van blokken kost veel CPU cycli. Dus als je kan voorkomen dat je op dit moment een pakket moet ontcijferen is dat m.i. aan te bevelen. De-cryptie van minder belangrijke zaken kan je wel in de uren doen wanneer je niet achter je pc zit.

Hoi RGJ,

Ik krijg een (“DAMAGE: after Normal block (#372) at 0x14820C8”) fout melding als ik een udp packet groter dan 1444 bytes maak. Mogelijk relatie met http://lists.shmoo.com/pipermail/vpn/1999-July/000123.html

Vandaag ook weer naar ntpd gekeken. Ik heb soms een probleem dat hij wel packets naar de timeserver stuurt, echter hij ontvangt soms geen pakketen. Ik heb de tweede intern netwerkkabel er vandaag wel uit gehad. Zonder pc de rebooten deed hij later op de dag wel. Ik zie in het programma dat ntpd op de netwerkkaarten bind. Mogelijk heeft het ook iets met een opstart volgorde van de programma’s te maken.

De bedoeling is dat ik ntpd in de foonsearchd ga inbouwen. Als optie ‘NETWORK_TRANSPORTS’ = ‘udp ntp’ in database hebt staan dan start foonsearchd met een udp-pakkettenbinnenhaal-thead en een ntpd thread op. De timeserver ntp1.arizona.edu zal wel in subscriber opgenomen moeten worden.

Ik heb vandaag nagedacht hoe je de tijd naar de andere servers zou kunnen overbrengen. Ik denk aan een aparte time pakketen te gaan maken, gelijksoortig aan Ping/Pong. Je stuurt time-berichtje naar een andere server met tijd in het berichtje. Omdat foonsearchd het direct in database zet kan je zien hoe laat het in de database is gezet en hoe laat de andere peer het had. Het voordeel van een andere type berichtje is dat je het timeberichtje niet moet gaan “storen en forwarden”.

De vriendelijke groet Jan Marco

Hoi RGJ,

Een kleine query overhalen lukte al. Ik heb expres een paar queryresult-blokken niet in de send tabel gezet. Het resenden lukte. Momenteel met grote query’s bezig. Ik loop nu tegen time synchronisatieproblemen aan. Hij is nog bezig met het versturen en dan wil hij al proberen te gaan resenden van queryresultblocks. Je moet met het aanvragen van resenden wachten totdat je bijvoorbeeld 5 minuten geen queryresult blokken meer van de query hebt gezien.

Het ntpd probleem zit hem in het “binden” van de netwerkkaart. Als ik tweede netwerkkaart niet aanzet (door stekker er uit te halen) dan slaat hij deze over en dan is de eerste kaart die hij pakt de netwerkkaart naar internet en dan krijgt hij wel timeserver netwerkpackets binnen.

De vriendelijke groet Jan Marco

Hoi RGJ,

Vandaag begonnen met het testen en verbeteren van het mergen van de queryresultblokken. Vanmorgen al wat fatal errors eruit gehaald. Wat ik vandaag verder ga uitwerken is dat afhankelijk van grootte van de queryresult de query in memory of op een filesysteem gaan samenvoegen. Je kan de file die je op filesysteem aanmaakt gewoon automatisch in mysql blob veld gaan laden.

Waar ik naar toe wil werken is twee adres ruimtes:

query (blobveld):
select * from subscriber;hash e:;load c:\image\cdfoon.img

queryresult (blobveld):
resultaat 1 subquery;hash van drive e;image file geladen

Voor het formaat ga ik naar zip, filesystem achtige oplossingen kijken.

Misschien heb je wel 4 adres ruimtes. Namelijk naast bovende genoemde ook de gecomprimeerde query en queryresult adresspace.

De vriendelijke groet Jan Marco

Hoi RGJ,

Ik ben bezig om data > 65 kbyte in queryresult veld te krijgen. Ik zie dat hij de MySQL Update niet uitvoert als ik data > 65 kbyte aanbied. Kan natuurlijk ook aan een memory block liggen die niet over de 65 kbyte gaat.

  1. http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html :
    The maximum size of a row in a MyISAM table is 65,534 bytes. Each BLOB and TEXT column accounts for only five to nine bytes toward this size.

  2. Een LONGBLOB heeft een adres space van 32 bits = 4 gigabyte opslagruimte. Dit is even de maximale grootte van iets wat je in zijn geheel kan sharen. M.i. zal in de toekomst de maximale blobveldgrootte wel groter gaan worden. Indien je een grotere (> 4 gigabyte) databasetabel gaat sharen kan je wel in gedeelten het over gaan halen, want de eenheid waarin het is opgebouwd (records) is toch veel kleiner dan de maximale tabelgrootte.

Ad 1) De blob veld wordt buiten de MyISAM tabel opgeslagen, dus blobveld wordt niet begrensd door 65kbyte MyISAM tabelgrens. Zie ook http://archives.neohapsis.com/archives/mysql/2004-q4/2220.html : the BLOB or TEXT is stored separately from the row. What is stored is a pointer to where the BLOB/TEXT is located.

De vriendelijke groet Jan Marco

Hoi RGJ,

Het volgende SQL statement werkt al

Het geeft een queryresult van 654.202 bytes. Limit 8000 werkt nog niet. Ik zie dat het maken van resultresult dan niet werkt. Ga even uitzoeken hoe ik het aan de praat krijg.

Ik wil naar variabele UDP-packets toewerken. Momenteel gebruik ik een vaste lengte van 1072 bytes. Message lengte = 512 en Hashlengte = 256 bytes (*). Ik ga straks variabelen in het UDP-packet-message-packet gebruiken die aangeven hoe groot de message lengte en/of hashlengte van een specifieke UDP-packet is. N.B. Voor elke resend verzoek gebruik ik momenteel ook nog een packet van 1072 bytes. Als het straks goed werkt dan zet je de resendverzoeken in de message gedeelte van het UDP-packet.

De vriendelijke groet Jan Marco

P.S. Je stuurt een hash mee naar de andere peer. Je kan dan zien dat het goed is overgezonden. Je kan de hash ook gebruiken om een unieke filenaam te maken als je hem op filesystem gaat mergen. Mogelijk in eerste packet hash meesturen en met het laatste packet. Als het “bestand” erg groot is dan zou je de tussen hashes ook wel mee kunnen sturen. Je kan dan bij het binnen halen goed zien tot welke plek het goed is binnengekomen. Het aangeven welk deel je moet resenden kan je dan heel gemakkelijk specifiek aangeven.

Hoi RGJ,

Momenteel ben ik bezig met het “opschalen”. Limit 500.000 subscriber records (white, 32 Mb) is mij al gelukt. Ik heb wel een probleem kunnen “tackelen”. Ik heb een aparte MySQL database connectie gemaakt om de te verzenden queryresult records in de send tabel te zetten. Door het gebruik van aparte database connecties (momenteel 29 stuks) voorkom je het gebruik van mutexen, wat weer tot deadlocks kan leiden. Je kan het zien dat je met 29 gebruikers bent ingelogd op de database server.

Het overzenden gaat wel redelijk snel, echter het verwerken van de binnenkomende packets duurt m.i. nog iets te lang. Ik zie ook veel mysqld cpu cycli. Moet dus nog beter daar de indexen kijken.

Ik heb het nu zo gemaakt dat je een file met query-resultaat op een peer aanmaakt waarop je de query laat uitvoeren. De file is uniek door datum/tijd er in op te nemen. Hierna wordt de file door deze peer aan jou m.b.v. queryresult berichtjes opgestuurd. Je peer gaat op je filesysteem het resultaat mergen. Ik ben weer overgegaan naar een file met tussen de velden een “|”separator.

Een simpele vorm van telefoonboek (subscriber tabel) synchronisatie is dat je “select * from subscriber” query naar alle peers stuurt. Je krijgt dan in de queryresult longblob veld de telefoonboek van een peer waaraan je deze query hebt gestuurd. Hierna een programma maken dat alle telefoonboeken gaat vergelijken met je eigen subscriber informatie en dan heb je m.i. een gesynchoniseerde online-telefoonboek gekregen.

Ik heb ook code al in het programma om te kunnen zippen, dus ook gaan testen om alleen de gezipte file over te gaan halen. Na het zippen van de 32 Mb outputrecords houd ik 11,7 Mb (63% compressie) aan gezipte file over. Dit heb ik met Winzip getest. In de query record ga ik aangeven of je het via zip en/of encryptie laat lopen.

Ik zie dat er twee soorten varianten zijn namelijk:

  1. je bouwt een verbinding op met een andere peer. Als hebt dan vaak met timeouts te maken. Denk aan http/ftp verbinding. Voordeel is dat het veel sneller werkt dan 2).

  2. Je bouwt kortstondig (*) een verbinding op met een andere peer om een UDP-packet te “dumpen”. Je kan met deze methode m.i. met miljoenen peers gaan communiceren. Voordeel is dat je super kan checken van wie iets komt.

Ik wil beide varianten in foonsearchd.exe gaan programmeren. Opzich niet moeilijk, want ik ga wget source er in “poorten”.

RGJ, Het is erg leuk te zien dat het een beetje werkt na al mijn ‘geploeter’.

De vriendelijke groet Jan Marco

PS (*) Je kan natuurlijk ook wel meerdere packets voor een bepaalde peer gaan selecteren in MySQL en dan deze verschillende packets verzenden voordat je de verbinding verbreekt. Daarbij is nog een leuke uitdaging hoe je de verwerking gaat maken gebaseerd op urgentie en prioriteit. Je zou voor meerdere verwerkingstheads kunnen kiezen. Mogelijk ook dynamische selecties van de te verwerken packets gaan doen.

Hoi RGJ,

Zit nu in het Noorden. Ik heb net Visual studio geinstalleerd. Ik heb een ping naar Enschede geprobeerd te sturen, echter ik zie geen pong terugkomen. Het probleem is mogelijk dat ik public ipadres niet heb meegegeven van peer in het Noorden. Het programmaonderdeel om automatisch het goede public ip adres te verkrijgen moet ik nog maken.

Ik begrijp nu weer waarom het niet werkt. Het is namelijk een direct ADSL verbinding van KPN en bij zo’n verbinding worden binnen komende packets gefilterd. De oplossingsrichting om achter een firewall te kunnen werken is dat je een queue (*) aanmaakt op een peer (“proxy”) die wel in verbinding staat met internet. Indien iemand jou iets wil sturen stuurt hij het naar deze proxy-peer toe. Als je pc aanzet kijk je om de x seconden of er een packet is voor jou. Zo, ja dan haal je het packet op. Bij Skype zie je ook dat Skype (op je pc) bij een andere peer inlogt.

Eigenlijk lijkt de proxy op een mailserver. Iemand stuurt een bericht naar de mailserver en als je de pc opstart en de mail client opstart haalt hij de nieuwe berichten op. Het verschil is dat elke public te benaderen peer voor “mailserver” kan spelen. In de subscriber record zet je waar je de berichtjes heen moet sturen.

De vriendelijke groet Jan Marco

P.S. (*) Voor queue’s wil ik graag MQ gebruiken in samenwerking met MySQL. SAFMQ is een MQ variant op codeproject.

Hoi RGJ,

Het verwerken van de packets schoot niet op. Wel erg mooi van een database pakket is dat ik binnen een paar minuten wat indexen er op heb kunnen zetten en nu werkt het verwerken wel redelijk snel. Het verwerken loopt nu redelijk in pas met het verkrijgen van de packets.

Het komend weekend ga ik naar de peer tabel kijken. Ik zie dat subscriber white 417 Mb groot is. De gezipte versie is 158 Mb groot, compressie met winzip is dus 62%.

Elke morgen in de trein kijk ik sinds gisteren een uurtje naar de Wengo source. Volgend weekend ga ik beginnen om de Wengo (Skype achtige variant) aan te koppelen.

De vriendelijke groet Jan Marco