01 november 2006

Herfswandeling langs het havezatenpad

01 augustus 2006

Beurs_Koersen programma herschreven in Visual Basic

Jarenlang heb ik al mijn programma’s geschreven met Delphi Pascal programmeer systeem van Borland, wat mij prima beviel.

Echter met de komst van de nieuwe Windows Vista versie zal het Microsoft .NET Framework een belangrijke rol gaan spelen als fundament van alle software die voor de nieuwe Windows systeem geschreven zal worden. Ik gebruik momenteel Delphi versie 7, maar ik heb Delphi 2006 nodig als ik gebruik wil maken van het .NET Framework.

Het kost meer dan 1200 Euro om het eenvoudigste Delphi 2006 systeem aan te schaffen, hetgeen ik te veel vind voor een hobbyist.

Bovendien zal de programmeer afdeling van Borland verkocht worden en zijn er in de loop der jaren al veel goed ontwikkelaars van Borland naar Microsoft verhuisd, bijvoorbeeld Anders Hejlsberg, die Delphi ontwikkelde voor Borland, heeft daarna C# ontwikkeld bij Microsoft en was daar ook sterk betrokken bij hegt .NET platform, wat in feite de gemeenschappelijke bibliotheek van functies is voor alle nieuwe Microsoft programmeertalen. Het is dus maar de vraag of Delphi nog een lang bestaan zal hebben.

Via de HCC werd ik er op geattendeerd dat er gratis een Visual Basic 2005 Express Edition voor hobby programmeurs gedownload kon worden vanaf
http://msdn.microsoft.com/vstudio/express/vb/download/
evenals een bijpassend database systeem, SQL Server Express 2005 edition, dat via een link op deze site op te halen is.

Soortgelijke gratis pakketten zijn beschikbaar voor Visual C#, Visual C++, Visual J# en er is een pakket voor het ontwikkelen van web applicaties met de Visual Basic programmeertaal.

Omdat ik tot 6 jaar gelden met Visual Basic versie 6 moest programmeren om brood op te plank te krijgen en ik toen zeer ontevreden was over die taal, had ik natuurlijk mijn bedenkingen.

Visual Basic versie 6 had een enorme last van 20 jaar historie mee te slepen. Constructies van de begin tijd van de Basic programmeer taal moesten nog steeds in versie 6 uitgevoerd kunnen worden, waardoor de taal omviel van de kromme taalconstructies.

Echter de nieuwe Visual Basic .NET versie heeft al die historie achter zich gelaten, de taal is geheel opnieuw opgebouwd, wat een zeer elegante en gemakkelijk te leren programmeer taal heeft opgeleverd.

Een van de nadelen van Delphi vond ik altijd, dat b.v. na een if then constructie altijd maar één statement gebruikt mocht worden, waardoor je gedwongen werd veel vaak geneste begin end blokken, al of niet afgesloten met een puntkomma, te gebruiken.

In Visual Basic .NET is dat op de zelfde elegante wijze als in de programmeer taal Modula-2, mijn favoriete taal van de jaren tachtig, opgelost: if then end if, waarbij je tussen then en end if meerdere statements mag zetten.

In Visual Basic .NET zijn objecten zeer consequent toegepast. Een integer en een string zijn bijvoorbeeld beide een object en string functies zijn dus methoden van een object, die achter de naam van het object komen, gescheiden door een punt. Dit, samen met de IntelliSense voorstellen van de Visual Basic programmeer omgeving om de code af te maken, zorgt ervoor dat je betrekkelijk weinig zelf hoeft in te typen.

Als vergelijking geeft ik hieronder een stukje code in beide talen: Het is een functie die woorden uit een zin ophaalt. Er zijn wat verschillen in implementatie omdat in Delphi de index van het eerste character in een string de waarde 1 heeft, terwijl dat in Visual Basic .NET 0 is

De Delphi code:


function NextWordInString(const Source: string; var Start: Integer; var SpaceAtEnd: boolean): string;
var
 i: integer; n: integer;
 Ch: char;
 NonSpaceCharFound: boolean
begin
 n:= Length(Source);
 if (Start = 0) or (Start > n) then
 begin
  Start:= 0;
  NextWordInString:= '';
  exit;
 end;
 NonSpaceCharFound:= False;
 SpaceAtEnd:= True;
 for i:= Start to n do
 begin
  Ch:= Source[i];
  if NonSpaceCharFound then
  begin
   if Ch <= ' ' then
    break;
  end
  else if Ch > ' ' then
   NonSpaceCharFound:= True
  else if Ch < ' ' then
   break;
 end;
 NextWordInString := MidStr(Source, Start, i - Start);
 Start:= i;
 i:= 0;
 while (Start <= n) and (MidStr(Source, Start,1) < ' ')and (i < 2) do
 begin
  Start:= Start + 1; // Skip one LF/CR combination
  SpaceAtEnd:= False;
  i:= i + 1;
 end;
end;


De overeenkomstige Visual Basic .NET code:


Function NextWordInString(ByVal Source
As String, ByRef Start As Integer,ByRef SpaceAtEnd As Boolean) As String
  Dim i As Integer, n As Integer, Ch As Char
  Dim NonSpaceCharFound As Boolean = False
  n = Source.Length
  If (Start < 0) Or (Start > n) Then
    Start = -1
    NextWordInString = ""
    Exit Function
  End If

  SpaceAtEnd = True
  For i = Start To n - 1
    Ch = Source.Chars(i)
    If NonSpaceCharFound Then
      If Ch <= " " Then
        Exit For
      End If

    ElseIf Ch > " " Then
      NonSpaceCharFound = True
    ElseIf Ch < " " Then
      Exit For
    End If
  Next

  NextWordInString = Source.Substring(Start, i - Start)
  Start = i
  i = 0
  While (Start < n-1) AndAlso (Source.Substring(Start,1)<" ") AndAlso (i < 2)
    Start = Start + 1 ' Skip one LF/CR combination
    SpaceAtEnd = False
    i = i + 1
  End While
End Function
 


Als oefen object heb ik mijn programma Beurs_Koersen dat in Delphi versie 7 geschreven was, opnieuw geprogrammeerd in Visual Basic 2005 Express Edition. Die klus was in betrekkelijk korte tijd geklaard, mede omdat ik door de geweldige hoeveelheid kant en klare functies die beschikbaar waren in het .NET Framework, zelf minder hoefde te programmeren dan in de Delphi versie nodig was. Qua mogelijkheden komt de gratis Visual Basic 2005 Express Edition minstens overeen met de zeer prijzige Delphi software!

Het enige dat mij wat tegenviel was de Publish functie waarmee je een setup file van het programma maakt. Je kunt eigenlijk niets wijzigen aan het installatie proces en de executable wordt niet zoals gebruikelijk in een Program File map geïnstalleerd. Daarom heb ik voor het maken van de setup file nog maar gebruik gemaakt van de vertrouwde InstallShield Express versie die bij Delphi geleverd werd.

Het resultaat van die conversie is een BeursKoersen programma dat eenvoudiger te onderhouden en met meer functionaliteit:



  • Er kunnen nu koersen van de Morningstar website opgehaald worden, waardoor de koersen van vrijwel elk beleggingsfond opgehaald kan worden. De ABN-AMRO site die daar al gebruik van maakte is komen te vervallen.

  • Als er op de MSN site meerdere portefeuilles gebruikt worden, dan kunt U nu door 'Alle rekeningen' te selecteren, al de koersen voor alle portefeuilles ophalen.

  • Via de Yahoo finance site kunnen nu alle velden in de CSV file gevuld worden.

  • U kunt het programma nu ook gebruiken als een webbrowser. U kunt gebruik maken van Uw zoekmachine en U kunt Uw standaard homepage selecteren.

  • Via een nieuw Opties scherm kunt U opties voor de conversie selecteren, de werkmap wijzigen en verkennen, het tijdsinterval voor het vernieuwen van webpagina's instellen en de logfile bekijken en verwijderen.

  • De file Effecten.txt kan nu in een tabel bekeken, gesorteerd en gewijzigd worden.

  • De laatste 11 websites, die alleen informatie geven, kunt U nu op een eenvoudige wijze vervangen door Uw eigen keuzes.


U kunt het programma dowloaden vanaf mijn download pagina.

20 april 2006

Effecten_Beheer krijgt hulp van het Delphi form

In de nieuwe versie 2.6 van mijn programma Effecten_Beheer zijn wat meer gereedschappen voor Technische Analyse toegevoegd:

Het is nu mogelijk om twee verschillende lopende gemiddelden in de grafiek te tonen. Dit wordt wel gebruikt om koop en verkoop punten aan te geven: koop aandelen als het korte termijn gemiddelde het lange termijn gemiddelde naar boven kruist en verkoop de aandelen als het de lange termijn lijn naar beneden kruist.

In een koersgrafiek kon al het resultaat van een relevante index of ander referentie aandeel zichtbaar gemaakt worden. Nieuw is nu dat het resultaat ook als 'Relatieve Sterkte' geplot kan worden. Dan worden de koersen van het gekozen effect gedeeld door de overeenkomstige referentie koersen. Het geheel wordt vermenigvuldigd met een factor zo dat de twee grafieken in hetzelfde punt beginnen. Alleen de hellingshoek van de referentie lijn is van belang: loopt die lijn omhoog dan presteert het gekozen aandeel beter dan de referentie en loopt de lijn omlaag dan doet het gekozen aandeel het slechter.

Voor meer details kijk in een cursus technische analyse.

Het programma kan gratis opgehaald worden vanaf mijn software download pagina.

Bij de implementatie van deze nieuwe versie bleek weer hoe productief het Internet is. Voor het berekenen van de Relatieve Sterkte met de koersen die in een database zitten wordt gebruik gemaakt van SQL, een taal die speciaal is ontworpen om te kunnen communiceren met een database. Het lukte me niet zo gauw om de juiste syntax te vinden van de SQL uitdrukking die nodig was om het resultaat klaar te zetten om te plotten.

Ik legde mijn probleem voor aan Delphi forum van de Pascal GG, zie Self-JOINT probleem. Binnen 12 uur werd mij al een oplossing aangeboden. Ik kwam er nog niet helemaal uit, dus ik stelde een tweede vraag: Kan ik TADODataset resultaten in een nieuwe SQL query gebruiken? Daar kreeg ik niet direct het goede antwoord maar wel voldoende hints om het zelf verder uit te zoeken.

Gratis hulp binnen 24 uur mooi toch?

28 februari 2006

Toon de locaties waar foto's genomen zijn in Google Earth!

Als je wat met landkaarten hebt, zoals dat bij mij het geval is, dan moet je zeker Google Earth op je PC installeren. Ik vind het fascinerend om via de aan elkaar geplakte satelliet foto's in te zoomen op locaties die je kent of waar je juist naar toe wil.

Klik op de volgende knop om Google Earth the installeren:


Een mooie toepassing van dit programma is de mogelijkheid om locaties in
kmz files op te slaan, zodat je via die file weer snel dezelfde locatie kan laten zien.
Selecteer eerst in het venster 'Places' een map waarin de kmz file moet worden bewaard, maak daar desgewenst via de rechtermuis knop een nieuwe map. Als je in Google Earth ingezoomd ben op een stuk van de aarde waar je een locatie wil vastleggen, dan maak je een kmz file via het menu onderdeel 'Add / Placemark'. Er verschijnt een nieuw venster waarin de naam en andere details van de locatie vastgelegd kan worden en in de kaart zie je een een symbool, meestal een soort punaise, waarmee de exacte positie vastgelegd kan worden. Wijzig het type symbool desgewenst in de rechterbovenkant van het venster en sleep het symbool naar de juiste positie in de kaart. Type de naam van de kmz file in het placemark venster en geef desgewenst een beschrijving mee die getoond zal worden als je later op het placemark symbool klikt. Door 'Advanced' aan te vinken, kun je nog meer vastleggen, o.a. de hoogte van de locatie. Doe dat echter niet want dan lijkt het placemark symbool later weg te lopen van de plek die je aangegeven hebt.


Als je nu een webpagina gemaakt hebt waarin b.v. een foto staat en je wil laten zien waar die foto genomen is, dan zoek je in Google Earth de plaats op en maakt er een kmz file van. Die file moet naar webpagina server geupload worden, daarom moet je die file uit Google Earth exporteren door met de rechtermuis op de placemark naam te klikken en dan het commando 'Save As ...' te selecteren. Bewaar de file bijvoorbeeld in een map Placemarks in de mappen structuur van je
website. Maak met je html editor een hyperlink onder de foto en geef in die hyperlink als adres de opgeslagen kmz file aan. Sla alle wijzigingen op en bekijk je website met een browser. Als je daarmee op de hyperlink onder de foto klikt, dan zal je zien dat Google Earth opstart en inzoomt op de vastgelegde locatie.


Volg deze procedure voor alle locaties die je wil laten zien en upload de webpagina's en de placemarks map naar de server. Als je dat gedaan hebt en de webpagina nu vanaf Uw server bekijkt, dan zal je net als ik de eerste keer, teleurgesteld zijn, want Google Earth start niet op als je op een placemark hyperlink klikt. Ik heb een oplossing voor het probleem gevraagd in een forum van de Google earth Community en zij hebben mij goed geholpen. Er moet een file in de placemark map op de server gezet worden worden met de volgende inhoud:


AddType application/vnd.google-earth.kml+xml kml

AddType application/vnd.google-earth.kmz kmz



De naam van de file moet zijn ".htaccess" als U een Apache server heeft. Maak deze file in het kladblok programma en omdat er geen file extensie is moet er bij het opslaan als filenaam gegeven worden .htaccess en als type Alle bestanden. Daarna gedraagt de website zich zoals het was op de PC.


Het is ook mogelijk dat je vanuit een placemark in Google Earth de webpagina met de corresponderende foto opent. Dat kan omdat je in de beschrijving van een placemark html code mag gebruiken en zo je dus een link naar de webpagina met de foto kunt maken. Het adres van de link moet een internet adres zijn en niet de locatie van de webpagina op je PC. Daarom ging ik
als volgt te werk. Nadat ik de webpagina's met de placemarks op mijn server gezet had, startte ik mijn html editor, Frontpage, op en begon daar met een nieuwe pagina. Voor elke placemark, waar een link naar de webpagina met de foto moest komen, begon ik de beschrijving te geven in Frontpage. Het adres van de link kopieerde ik uit mijn browser, nadat ik de betreffende foto pagina uit mijn server geladen had. Ik opende in Google Earth het betreffende placemark voor een edit actie en kopieerde de html code naar de beschrijving via het klembord. Daarna werd de oude placemark file in de Placements map op mijn PC overschreven via een Save As commando.


Nadat ik alle Placemarks op deze wijze bewerkt had, klikte ik met mijn rechtermuis in Google Earth op de map waarin alle placemarks stonden en deed daarna ook een Save As actie naar mijn locale Placemarks map met als naam van de kmz file de naam van de map. Op mijn website maakte ik een link naar die kmz file, waardoor alle placemarks in een keer zichtbaar gemaakt kunnen worden in Google Earth en je zo dus vanuit Google Earth de webpagina's met de foto's kunt selecteren Tot slot werden de placemarks en de gewijzigde webpagina's weer geupload naar de server.


Het geheel kunt U zien door in mijn website op de link Wandelen op La Palma en vliegen via Google Earth te klikken.