TexasSwede
texasswede@gmail.com
  • About this blog
  • My Website
  • My Resume
  • XML Export Tool
  • Photos

VMware overload?

Posted on March 20, 2008 by Karl-Henry Martinsson Posted in Old Blog Post Leave a comment

A couple of weeks ago I installed VMware Workstation on my computer at home, so i could have a clean XP install to clone and use for program testing and to run multiple environments at the same time. I also installed Ubuntu 7.10 the weekend before last. This weekend I had some spare time. So I installed Windows 98 Second Edition, Windows 2000 Professional, Kubuntu 7.10, OpenSUSE 10.3 and even Mac OS X 10.4.7(!). It is a strange feeling to run OS X on a PC…

I also got a new computer at work, doing similar there, but just XP and Ubuntu/Kubuntu so I can show people the environment. Might install OS X just for fun (and to test webpages with)…

A (non-geek) friend asked me this weekend: "Why are you doing that?", and my answer was "Because I can"… I guess it is the same reason I collect water bottles from Lotusphere: they are there and I can… :-)

 

Arthur C. Clarke (1917-2008)

Posted on March 19, 2008 by Karl-Henry Martinsson Posted in Old Blog Post Leave a comment

One of the great writers of the 20th century has left us. Arthur C Clarke, best known for his books 2001: A Space Odyssey Rendezvous with Rama, Earthlight and The Sands of Mars.

But Arthur C. Clarke was not only a science fiction writer. He was an avid scuba diver (which is why he moved to Sri Lanka), and he came up with the concept of using geo-stationary satellites for communicatiions. The geostationary orbit is sometimes called the Clarke Orbit in his honor. He was even involved in some satellite programs, including Telstar.

He will be missed.

 

Lotusphere water bottle collection

Posted on March 19, 2008 by Karl-Henry Martinsson Posted in Old Blog Post Leave a comment

Over the years I got a small collection of Lotusphere water bottles. It started in 2003 when I ended up with a couple of extra bottles in my backpack on the last day, and I brought them home with me. The next year I picked up a couple again to drink at the airport while waiting for my flight, and I got one leftover as well. Since then I made sure I bring home at least one bottle per year for my little collection.

This year I noticed that the older bottles were squished, like there were vacum inside. The older they were the more squished. I let some air in and noticed that it seems like water is evaporating despite the bottles being closed. Quite interesting, since there was a vacum inside. It seems like the water evaporates and get out, while air is not able to get in. The bottles have been stored above the washer, with the dryer a few feet away. Might be the temperature that did it.

 

Top 15 Google Street View Pictures

Posted on March 11, 2008 by Karl-Henry Martinsson Posted in Old Blog Post Leave a comment

http://mashable.com/2007/05/31/top-15-google-street-view-sightings/

Some funny ones, some silly ones. Personally I think #14 is the best one. Followed by #4.

 

Birthday Cake

Posted on March 11, 2008 by Karl-Henry Martinsson Posted in Old Blog Post Leave a comment

A couple of days ago (well, March 3) it was my birthday, and I decided to bake a cake, as I usually do. I enjoy baking and cooking, and that way I also get to have a cake the way I am used to from Sweden. I will post the directions when I get home, but it is really easy.

The main difference between the cakes made the traditionally way in the US and in Sweden/Europe are listed below, but there are of course exceptions:

United StatesEurope/Sweden
LayersSolid cake, or 2 layers3 or more layers
FillingSugar/butter mix, sometimes chocolate flavoredWhipped cream, fruit/berries, jam, vanilla custard, or chocolate
Cake covering"Icing" (butter/sugar mix) Whipped cream
DecorationColored icingFresh fruit

 

SNTT – XML importer class

Posted on March 11, 2008 by Karl-Henry Martinsson Posted in Old Blog Post Leave a comment

Yes, I know it is Tuesday, but I was too busy last week for the SNTT entry…

 

At my workplace, we are in the process of purchasing and implementing a new billing system. It relies heavily on XML files, stored in the file system, for inport/export. The idea is that we export XML from our policy system to be processed by this software. The results are returned as XML files, and we are currently looking at how we can consume them and present them to the accounting department.

We are mainly looking at tools like Crystal Reports 2008.

Just for fun, I decided to write an XML importer in Lotusscript. The XML is very simple so I did not have to do any advanced parsing.
I decided to write it as a class. The class just have a few methods. One is of course New(), the only thing it does is clear the xmldata string and also clear the list of XML tags from memory.

LoadXMLData() open the specified XML file and read the text into the xmldata string, adding a linebreak after each line.

XML2List take the xmlstring, parse it and build a list of all the tags and values. Because the XML is so simple, with no multiple values or deeply nested data, I can very easily parse it using normal string operations in a Do-While loop.

The final method is called CreateNotesDocument(), it creates a new Notes document in the specified database, using the specified form. To process the sample XML file with 66 XMl entries took 0.148 seconds (according to TeamStudio Profiler).

Here is the code:

Class XMLClass
Private xmldata As String
Private xml List As String

Public Sub New()
  xmldata=""
  Erase xml
End Sub

Public Sub LoadXMLData(filename As String)
  Dim xmlline As String
  Open filename For Input As #1
  xmldata = ""
  While Not Eof(1)
   Line Input #1, xmlline
   xmldata = xmldata & xmlline & Chr$(13)
  Wend
  Close #1
End Sub

Public Sub XML2List()
  Dim tag As String
  Dim value As String
  Dim startpos As Long
  Dim endpos As Long
  Dim nextpos As Long
  Dim endtagpos As Long
 
  endpos = 1
  Do 
   startpos = Instr(endpos,xmldata,"<")
   If startpos > 0 Then
    endpos = Instr(startpos,xmldata,">")
   End If
   If endpos > 0 Then
    tag = Mid$(xmldata,startpos+1,endpos–startpos–1)
    If Instr(tag,"/")=1 Then
     startpos = Instr(endpos+1,xmldata,"<")
    Else
     nextpos = Instr(endpos,xmldata,"<")
     endtagpos = Instr(endpos,xmldata,"</" & tag & ">")
     If endtagpos = ne
xtpos Then
      value = Mid$(xmldata,endpos+1,nextpos–endpos–1)
      If Iselement(xml(tag)) = False Then
       xml(tag) = value
      End If
      endpos = Instr(nextpos,xmldata,">")
     End If
    End If   
   End If
  Loop While startpos > 0
End Sub

Public Sub CreateNotesDocument(db As NotesDatabase, form As String)
  Dim doc As NotesDocument
  Set doc = New NotesDocument(db)
  doc.Form = form
  Forall x In xml
   Call doc.ReplaceItemValue(Listtag(x),x)
  End Forall
  Call doc.Save(True,True)
End Sub
 
End Class

Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim noic As XMLclass

Set db = session.CurrentDatabase
Set noic = New XMLclass()
Call noic.LoadXMLData("c:XSLTNOIC-1450-01 0-2007Nov09.xml")
Call noic.XML2List()
Call noic.CreateNotesDocument(db,"NOIC")
End Sub

 

This LotusScript was converted to HTML using the ls2html routine,
provided by Julian Robichaux at nsftools.com.

 

Prince Harry in Afganistan – outed

Posted on February 29, 2008 by Karl-Henry Martinsson Posted in Old Blog Post Leave a comment

I am reading that Prince Harry of England was pulled out of Afghanistan, where he have been serving with his regiment since December, after an Australian newspaper and then The Drudge Report outed him. Major news organisations, like AP, CNN and many English newspapers, knew about it for months and even got exclusive information, interviews and photos with the understanding that they were not going to be published until after the story eventually leaked.

There is some discussion about if it is ethical for news organisations to censor information like this. As a techical writer, I have often been given information after agreeing to a non-disclosure agreement. So to me it is not a big deal.

As being in the military for 13 years, I understand that anyone that train hard and long want to be able to "test themselves" and do "the real thing", especially if your comrades are sent off to war. You are a unit, you train as a unit, and you fight as a unit. If I had been Prince Harry, I would been furious to have trained for years and then not been allowed to go.

I think the media instead should think about Harry. He did not ask to be born who he is. Sure, he get all kinds of perks, but he also have paparazzis and media around him whatever he does. Give the guy some freedom, let him have a life for a while. There is no need to knwo what he does every hour of the day, every day of the week. If he want to go party or pick up girls, let him do that. If he want to be a good soldier/officer and lead his men into battle, let him do that.

I respect Prince Harry much more than I respect someone like Britney Spears…

 

SNTT: Lists – the forgotten gem in Lotusscript

Posted on February 29, 2008 by Karl-Henry Martinsson Posted in Old Blog Post Leave a comment

OK, I know it is Friday already, but here is my Show-n-Tell-Thursday entry…

Lists are a data type that I don’t think is used enough. Many Notes developers, even some that been programming in the environment for years, don’t use this very powerful feature. In previous years, Bill Buchan have been talking about lists in some of his Lotussphere sessions, and when asking how many in the audience that used lists, less than 10% raised their hands.

So what are lists? They are a data type, similar to an array, but instead of using a numeric index, it uses a string as index, or tag as it is called.

This makes it easy to address items in the list, check if they exists, etc.

Here is a simple example:

Dim age List as Integer

Dim name as String

age( "karl" ) = 38

age( "erik" ) = 7

name = InputBox$( "Enter name:" )

If IsElement(age(Lcase(name))) = True Then

MsgBox name & " is " & age(lcase(name)) & " years old."

Else

MsgBox name & " does not occur in the list."

End If

This code define a list of integers, containing the age of two people. When a name is entered in the input box, IsElement is used to check if an item with that name is found in the list. If it is, the age is displayed, if not another message is displayed, saying that the name was not found.

Note that the list tag (name in this case) is case sensitive! 

To loop through a list and display all the values, use ForAll. Here is an example where we loop thorugh all the entries and display their list tags as well as the values:

Dim age List As Integer
age( "Karl" ) = 38
age( "Erik" ) = 7
Forall a In age
Msgbox Listtag(a) & " is " & a & " years old."
End Forall

Some of the things I use lists for are web agents, where I parse the URL passed for parameters, and build a list of them. Then it is very easy to write code that check for parameters and get the value if they exist.

I wrote an article about lists for The View, published in November/December 2006. You can find more details and examples there.

 

Forum Friday

Posted on February 29, 2008 by Karl-Henry Martinsson Posted in Old Blog Post Leave a comment

Today’s Forum Friday posting is in response to this question about sending mail from a Lotusscript agent by H Falzone. 

He (she?) is having problems sending a mail to multiple users from an agent.

Here is the existing code:

Sub Initialize
Dim session As New Notessession
Dim db As Notesdatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim maildoc As NotesDocument
Dim rtitem As NotesRichTextItem

Set db = session.CurrentDatabase
Set view = db.GetView( "TESTER" )

Set Col = session.CurrentDatabase.UnprocessedDocuments
For x = 1 To Col.count
Set doc = col.getnthdocument(x)

Set maildoc = New NotesDocument( db )
Set rtitem = New NotesRichTextItem( mailDoc, "Body" )
Call rtitem.AddNewLine( 2 )
Call rtitem.AppendText( "You are responsible for a lease that expires in 30 days. Please contact Legal Services ( Gidget DiRienz and Responsible Attorney ) to indicate your intentions regarding this lease." )
Call rtitem.AddNewLine( 2 )
Call rtitem.AppendText( "You will also need to update FMV for this property." )
Call rtitem.AddNewLine( 2 )
Call rtitem.AppendDocLink( doc, db.Title )

Dim recipients( 1 To 3 ) As String
recipients( 1 ) = doc.contactname(0)
recipients( 2 ) = doc.RespAttorney(0)
recipients( 3 ) = doc.NoticesSentTo(0)

maildoc.Form = "Memo"
maildoc.principal="MHP Legal Department"
maildoc.From = maildoc.Principal(0)'<—- !!
maildoc.ReplyTo = "Gidget DiRienz and Responsible Attorney"
maildoc.CopyTo = doc.EnteredBy
maildoc.Subject = "* * * LEASE UP FOR RENEWAL IN 30 DAYS * * * " + doc.ViewDisplay(0) +" – "+ doc.Status(0)
maildoc.~_ViewIcon = 94
Call maildoc.send (False,recipients)

Next
Exit Sub

End Sub 

maildoc.Send is called with the argument recipients, which is declared as an array. That should work, but I would use a zero based array, perhaps that is what’s wrong.

Run the code through the debugger and make sure there really are values for all the array elements, and see what the array looks like.

But why not simply drop that argument to .Send() and store the values in the field SendTo in the document?

Simply assign the array to the field like this: maildoc.SendTo = recipients

That is IMHO the best way to make sure you get everything right.

 

I also spot another big no-no… Using GetNthDocuments(). This is VERY slow as soon as you have more than just a few entries in the document collection. Use GetFirstDocument() and GetNextDocument() instead.

Here is my version of the same code. Not tested, but something to start with. My additions are in red.:

Sub Initialize
Dim session As New Notessession
Dim db As Notesdatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim maildoc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim recipients(2) As String

Set db = session.CurrentDatabase
Set view = db.GetView( "TESTER" )

Set Col = session.CurrentDatabase.UnprocessedDocuments

Set doc = col.GetFirstDocument()

Do while Not doc is Nothing

Set maildoc = New NotesDocument( db )
Set rtitem = New NotesRichTextItem( mailDoc, "Body" )
Call rtitem.AddNewLine( 2 )
Call rtitem.AppendText( "You are responsible for a lease that expires in 30 days. Please contact Legal Services ( Gidget DiRienz and Responsible Attorney ) to indicate your intentions regarding this lease." )
Call rtitem.AddNewLine( 2 )
Call rtitem.AppendText( "You will also need to update FMV for this property." )
Call rtitem.AddNewLine( 2 )
Call rtitem.AppendDocLink( doc, db.Title )

recipients(0) = doc.contactname(0)
recipients(1) = doc.RespAttorney(0)
recipients(2) = doc.NoticesSentTo(0)

maildoc.Form = "Memo"
maildoc.principal="MHP Legal Department"

maildoc.SendTo = FullTrim(recipients)
maildoc.ReplyTo = "Gidget DiRienz and Responsible Attorney"
maildoc.CopyTo = doc.EnteredBy
maildoc.Subject = "* * * LEASE UP FOR RENEWAL IN 30 DAYS * * * " + doc.ViewDisplay(0) + " – " + doc.Status(0)
maildoc.~_ViewIcon = 94
Call maildoc.send (False)
Set doc = col.GetNextDocument(doc)
Loop

End Sub
 

I will assume that EnteredBy on the processed document is a multi value field, otherwise I would use doc.EnteredBy(0) instead.

If you want multiple addresses in the CopyTo field, just use the same technique as for the SendTo field.

Also, assigning maildoc.From a value will not work, the mail router will automatically put the name of the agent signer in there. Use the Principal field like you do, and sign the agent with a generic ID you create for mailings.

 

Kids say the darndest things…

Posted on February 28, 2008 by Karl-Henry Martinsson Posted in Old Blog Post Leave a comment

My seven year old son yesterday evening, after I changed into jeans and my BleedYellow t-shirt with claw marks:

"Nobody bleeds yellow"

I tried to explain it, but I am not sure if he understood… :-)

 

My son at my sister’s place in Sweden last Christmas Eve.

 

Stack Exchange

profile for Karl-Henry Martinsson on Stack Exchange, a network of free, community-driven Q&A sites

Recent Posts

  • Domino 14 is now available
  • Domino 14 Early Access Program
  • Announced: Engage 2024
  • Integrate Node-RED with Notes and Domino
  • Notes and Domino v12 is here!

Recent Comments

  • Theo Heselmans on Announced: Engage 2024
  • Lotus Script Multi-thread Message Box [SOLVED] – Wanted Solution on ProgressBar class for Lotusscript
  • Viet Nguyen on Keep up with COVID-19 though Domino!
  • Viet Nguyen on Keep up with COVID-19 though Domino!
  • Mark Sullivan on Looking for a HP calculator? Look no further!

My Pages

  • How to write better code in Notes

Archives

  • December 2023 (1)
  • October 2023 (2)
  • September 2023 (1)
  • June 2021 (1)
  • April 2021 (2)
  • March 2021 (1)
  • August 2020 (3)
  • July 2020 (2)
  • April 2020 (2)
  • March 2020 (1)
  • December 2019 (2)
  • September 2019 (1)
  • August 2019 (2)
  • July 2019 (2)
  • June 2019 (3)
  • April 2019 (2)
  • December 2018 (1)
  • November 2018 (1)
  • October 2018 (5)
  • August 2018 (2)
  • July 2018 (3)
  • June 2018 (2)
  • May 2018 (1)
  • April 2018 (2)
  • March 2018 (1)
  • February 2018 (2)
  • January 2018 (4)
  • December 2017 (3)
  • November 2017 (2)
  • October 2017 (2)
  • September 2017 (1)
  • August 2017 (2)
  • July 2017 (6)
  • May 2017 (4)
  • February 2017 (1)
  • January 2017 (2)
  • December 2016 (2)
  • October 2016 (3)
  • September 2016 (4)
  • August 2016 (1)
  • July 2016 (2)
  • June 2016 (2)
  • May 2016 (3)
  • April 2016 (1)
  • March 2016 (4)
  • February 2016 (2)
  • January 2016 (4)
  • December 2015 (3)
  • November 2015 (2)
  • October 2015 (1)
  • September 2015 (2)
  • August 2015 (1)
  • July 2015 (5)
  • June 2015 (2)
  • April 2015 (2)
  • March 2015 (3)
  • February 2015 (2)
  • January 2015 (10)
  • December 2014 (1)
  • November 2014 (3)
  • October 2014 (3)
  • September 2014 (13)
  • August 2014 (6)
  • July 2014 (5)
  • May 2014 (3)
  • March 2014 (2)
  • January 2014 (10)
  • December 2013 (5)
  • November 2013 (2)
  • October 2013 (5)
  • September 2013 (4)
  • August 2013 (7)
  • July 2013 (3)
  • June 2013 (1)
  • May 2013 (4)
  • April 2013 (7)
  • March 2013 (8)
  • February 2013 (9)
  • January 2013 (5)
  • December 2012 (7)
  • November 2012 (13)
  • October 2012 (10)
  • September 2012 (2)
  • August 2012 (1)
  • July 2012 (1)
  • June 2012 (3)
  • May 2012 (11)
  • April 2012 (3)
  • March 2012 (2)
  • February 2012 (5)
  • January 2012 (14)
  • December 2011 (4)
  • November 2011 (7)
  • October 2011 (8)
  • August 2011 (4)
  • July 2011 (1)
  • June 2011 (2)
  • May 2011 (4)
  • April 2011 (4)
  • March 2011 (7)
  • February 2011 (5)
  • January 2011 (17)
  • December 2010 (9)
  • November 2010 (21)
  • October 2010 (4)
  • September 2010 (2)
  • July 2010 (3)
  • June 2010 (2)
  • May 2010 (3)
  • April 2010 (8)
  • March 2010 (3)
  • January 2010 (5)
  • November 2009 (4)
  • October 2009 (7)
  • September 2009 (1)
  • August 2009 (7)
  • July 2009 (1)
  • June 2009 (4)
  • May 2009 (1)
  • April 2009 (1)
  • February 2009 (1)
  • January 2009 (3)
  • December 2008 (1)
  • November 2008 (1)
  • October 2008 (7)
  • September 2008 (7)
  • August 2008 (6)
  • July 2008 (5)
  • June 2008 (2)
  • May 2008 (5)
  • April 2008 (4)
  • March 2008 (11)
  • February 2008 (10)
  • January 2008 (8)

Categories

  • AppDev (10)
  • Blogging (11)
    • WordPress (5)
  • Design (5)
    • Graphics (1)
    • UI/UX (2)
  • Featured (5)
  • Financial (2)
  • Food (5)
    • Baking (3)
    • Cooking (3)
  • Generic (11)
  • History (5)
  • Hobbies (10)
    • LEGO (4)
    • Photography (4)
  • Humor (1)
  • IBM/Lotus (178)
    • #Domino2025 (14)
    • #DominoForever (8)
    • #IBMChampion (46)
    • Administration (7)
    • Cloud (7)
    • CollabSphere (9)
    • Community (49)
    • Connect (33)
    • ConnectED (12)
    • Connections (3)
    • HCL (15)
    • HCL Master (1)
    • IBM Think (1)
    • Lotusphere (46)
    • MWLUG (25)
    • Notes/Domino (99)
      • Domino 11 (7)
    • Sametime (8)
    • Verse (14)
    • Volt (3)
    • Watson (6)
  • Life (8)
  • Microsoft (7)
    • .NET (2)
    • C# (1)
    • Visual Studio (1)
  • Movies (3)
  • Old Blog Post (259)
  • Personal (23)
  • Programming (84)
    • App Modernization (11)
    • Formula (4)
    • Lotusscript (47)
    • NetSuite (4)
      • SuiteScript (3)
    • node.js (4)
    • XPages (4)
  • Reviews (9)
  • Sci-Fi (4)
  • Software (24)
    • Flight Simulator (2)
    • Games (4)
    • Open Source (2)
    • Utilities (6)
  • Technology (37)
    • Aviation (3)
    • Calculators (2)
    • Computers (6)
    • Gadgets (7)
    • Mobile Phones (7)
    • Science (3)
    • Tablets (2)
  • Travel (7)
    • Europe (1)
    • Texas (2)
    • United States (1)
  • Uncategorized (16)
  • Web Development (50)
    • Frameworks (23)
      • Bootstrap (14)
    • HTML/CSS (12)
    • Javascript (32)
      • jQuery (23)
  • Prev
  • 1
  • …
  • 50
  • 51
  • 52
  • 53
  • 54
  • Next

Administration

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Tracking

Creeper
MediaCreeper
  • Family Pictures
© TexasSwede 2008-2014