Eind 2019

Het einde van 2019 nadert weer in een rap tempo.

Afgelopen jaar is dankzij het vertrouwen van diverse klanten een bijzonder druk jaar geweest met veel leuke technische uitdagingen.

Heel veel van de werkzaamheden zijn bij een grote Nederlandse zorgverzekeraar uitgevoerd. Het ene uitdagende project volgde het andere op.
Naast het applicatie onderhoud van de IBM Notes omgeving was ontwikkeling in C# een deel van de werkzaamheden. Er zijn koppelingen tussen Notes gemaakt naar diverse ESB services, Microsoft Azure, cognitieve software om Workflows te sturen en noem maar op.
Nieuw voor ons was de transitie naar een DevOps team, waarbij ook het beheer officieel deel ging uitmaken van de hele keten.
Domino beheer doen wij al ruim 23 jaar naast ontwikkeling, maar DevOps was wel erg populair in 2019.

Ook populair was dit jaar de term SDL (Microsoft Security Development Lifecycle) een nadrukkelijk aanwezig onderdeel bij onze werkzaamheden.
Best lastig om IBM Notes ontwikkeling daar in te laten passen, ook al werk je al jaren op een soortgelijke veilige manier.

Door migraties van Domino naar andere systemen hebben wij helaas afscheid moeten nemen van een aantal klanten, en ook zijn een aantal klanten nog bezig met een transitie.
Wij merken dat bedrijven nog steeds onterecht denken dat IBM Domino/Notes geen toekomst heeft.
Sinds dit jaar zijn IBM Notes en Domino samen met een aantal andere IBM applicaties overgenomen door HCL.
HCL heeft hard gewerkt om het business partner netwerk in Nederland op te zetten, en nog harder om HCL Notes/Domino weer helemaal toekomst bestendig te maken.
Wij zijn hier natuurlijk blij mee, maar merken dit nog niet in een toename van werk op dit gebied. Wel zijn wij in 2019 ook HCL partner geworden.
Misschien dat 2020 het jaar voor HCL Domino/Notes in Nederland wordt, we gaan het zien….

 

 


Wederom is er dit jaar geen besluit genomen door de regering inzake de VAR / Wet DBA.
Al jaren blijft het een zeer onduidelijke en onwenselijke situatie, waar de echte ondernemer met een eenmanszaak, of dat nu een BV is, of als ZZP’er, de dupe van is.
Bedrijven zijn bang om in te huren, en de voorstellen die er liggen als modelovereenkomsten e.d. zijn vaak onwerkbaar.
Wij hopen dat het kabinet in 2020 nu eindelijk eens met een goede en duidelijke oplossing komt!!

 

Tot slot rest ons te melden dat wij tot 6 januari alleen bereikbaar zijn voor dringende zaken.

Bedankt voor de samenwerking in het afgelopen jaar en wij wensen u fijne kerstdagen en een gezond en voorspoedig 2020!

 

 

Exam 483: Programming in C#

Examen 70-483: Programming in C# behaald

Na twee korte LOI opleidingen, C# Essentials en HBO Programmeren in C#, heb ik ook het Microsoft examen 70-483 behaald.

Examen 70-483: Programming in C#

Examen 70-483

De opleidingen van de LOI kunnen handig zijn om je op weg te helpen in C# maar bestaan veelal uit een verzameling van referenties naar gratis te vinden instructiefilmpjes op internet, o.a. van de Microsoft Learn website en andere gratis leermiddelen.
Persoonlijk vond ik het niet heel erg aansluiten op het 70-483 examen.

Inmiddels ben ik ook gestart met de voorbereiding op een volgend C# gerelateerde examen. Deze keer probeer ik de stof direct via de door Microsoft aanbevolen lesstof eigen te maken.

Apache of IIS als Reverse Proxy voor Domino

Gisteren bij een klant een Domino server voorzien van een wildcard SSL certificaat.
Klant heeft meerdere (sub)domeinen maar slechts 1 publiek IP-adres.
Voor sites draaiend op HTTP geen enkel probleem, maar zelfs in versie 9 van Domino is het nog steeds niet mogelijk om meerdere SSL sites op 1 IP-adres te configureren.
Ik ben echt een groot liefhebber van IBM en Domino/Notes in het bijzonder, maar dat simpele dingen zoals dit nog steeds niet kan vind ik echt een misser!
http://www-01.ibm.com/support/docview.wss?uid=swg21173919

Meestal plaats ik er dan maar een Apache HTTP of Microsoft Internet Information Services (IIS) server als Reverse Proxy voor (vaak op de zelfde machine), configureer de SSL sites en stuur ze intern door naar Domino via http op een andere poort, bijvoorbeeld poort 1080, zodat IIS of Apache op poort 80 een 443 kan draaien.
In zowel Apache HTTP als IIS servers is het geen probleem om meerdere SSL/HTTPS sites aan 1 IP-adres te koppelen.

IIS

Voor IIS 8 ziet het er dan als volgt uit:
iis_rewrite01

iis_rewrite02

iis_rewrite03

iis_rewrite04

Apache

Voor Apache zijn er ook wel mooie interfaces, maar een tekstverwerker is snel en werkt ook prima:

<VirtualHost *:80>
ServerName demobedrijf.nl
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
ServerName demobedrijf.nl
SSLEngine on
SSLProtocol ALL -SSLv2 -SSLv3
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:!RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile “C:/Program Files/Apache/conf/ssl/star_ demobedrijf_nl.crt”
SSLCertificateKeyFile “C:/Program Files/Apache/conf/ssl/star_ demobedrijf_nl.key”
SSLCertificateChainFile “C:/Program Files/Apache/conf/ssl/Comodo_PositiveSSL_bundle.crt”
ProxyPass / http://demobedrijf.nl:1080/
ProxyPassReverse / http://demobedrijf.nl:1080/
</VirtualHost>

De webserver die als Proxy fungeert  luistert dan naar poort 80 en 443.
iis_bindings

En Domino staat ingesteld op  bijvoorbeeld poort 1080.

domino_bindings

Doordat de reverse proxy server intern via het gewone HTTP protocol verstuurd zal Domino geen probleem hebben om het juiste website document te koppelen aan het verzoek.

 

LotusScript en Excel import van tekst bestand

Om 12000 documenten te exporteren naar Excel was een LotusScript agent te lang bezig met het vullen van de cellen.
Daarom is er gekozen om het bestand naar een comma gescheiden bestand weg te schrijven.
De klant vond het echter lastig om dit weer te openen in Excel, vandaar dat er een stukje code moest komen om dit te automatiseren.
Een stukje van de code:

Sub Initialize

Dim OfficeApplication As Variant
Dim workbook As Variant
Dim xlsheet As Variant
Dim ar() As Integer
Const xlNone = -4142
Const xlAutomatic = -4105
Const xlUnderlineStyleNone = -4142
Const xlThemeFontNone = -4142
Const xlInsertDeleteCells = 1
Const xlDelimited = 1
Const xlTextQualifierDoubleQuote = 1
Const xlTextFormat = 2

….. declareer dingen …

fList(“Form”) = “Form”
…. etc…

Set ws = New NotesUIWorkspace
filenames = ws.SaveFileDialog(False,”File name”,, “c:\”, “export” & Format(Today,”ddmmyyyy”) & “.txt”)
If (Isempty(filenames)) Then
Exit Sub
End If

Set curDB = Session.CurrentDatabase
Set View = curDB.GetView(“myView”)
View.AutoUpdate = False

fileNum% = Freefile()
Open filenames(0) For Output As fileNum%

Forall i In fList
mString$ = mString$ & “,” & i
End Forall
Print #fileNum%, Strright(mString$,”,”)

Set Doc = View.GetFirstDocument
Do Until Doc Is Nothing
mString$ = “”

Forall i In fList
If Doc.HasItem(Listtag(i)) Then
Set item = Doc.GetFirstItem(Listtag(i))
Select Case item.Type
Case 768
mString$ = mString$ & “,” & Replace(Doc.GetFirstItem(Listtag(i)).Text,”,”,”.”)
Case 1024
mString$ = mString$ & “,” & Replace(Format(item.Values(0),”dd-mm-yyyy”),”-“,”/”)
Case Else
mString$ = mString$ & “,” & Replace(Doc.GetFirstItem(Listtag(i)).Text,”,”,”;”)
End Select
Else
mString$ = mString$ & “,”
End If
End Forall
Print #fileNum%, Strright(mString$,”,”)

Set Doc = View.GetNextDocument(Doc)

Loop

Close fileNum%

con = “TEXT;” & filenames(0)
If Not (setOfficeApplication(“Excel.application”)) Then Exit Sub ‘ start Excel met een functie

rgbColor& = xlNone

x = 0
Forall i In fList
Redim Preserve ar(x) As Integer
ar(x) = xlTextFormat
x = x + 1
End Forall

Set workbook = OfficeApplication.Workbooks.Add ()
Set xlsheet = OfficeApplication.Workbooks(1).Worksheets(1)
With xlsheet.QueryTables.Add(con,xlsheet.Range(“A1″) )
.Name = Strright( filenames(0),”\”)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = ar
.TextFileTrailingMinusNumbers = True
.Refresh
End With

ExcelClose:

On Error Resume Next
OfficeApplication.Cells.EntireColumn.Autofit
OfficeApplication.Rows(“1:1″).Select
OfficeApplication.Selection.AutoFilter
OfficeApplication.Visible = True

Exit Sub
ErrorHandler:
Msgbox Lsi_info(2) & ” ” & Error & ” (” & Err & “) on line ” & Erl
Resume ExcelClose

End Sub