Ubuntu 10.04 being released today
My Favorite Tools
Kathy Brown today asked “What’s Your Favorite Tool“, so I thought I wanted to share the tools I use.
My favorite tool is probably NoteMan from MartinScott. If I have to pick one tool from the suite, it would be either NoteMan.Editor or NoteMan.DocDelta. It is very hard to decide between the two of them. Editor is great for editing documents, see the contents of different fields and even change data types. I use it to get the UniversalID of documents and much more. DocDelta help me solve replication conflicts quickly and easy. I can higly recommend the NoteMan suite of tools to any Notes/Docmino developer, and for the price ($395 for the whole suite), you get a lot of functionality.
I also use several tools from TeamStudio and Ytria. Yes, I am lucky enough to have a boss who believe in getting me the tools I need.
From TeamStudio I use Undo (previously called Snapper) to make snapshots of the design while developing for easy roll-back, Profiler to find performance issues in my code and Configurator for search-and-replace through-out a database (design and/or documents). Those tools run around $500 each, if I recall correctly. I also use their free class browser, a tool I highly recommend to everyone doing object oriented Lotusscript development.
From Ytria I use a number of tools.The two I use the most are scanEZ and actionBarEZ. The latter is great when I want to apply a specific design of action bars to many forms and/or views. I design the action bar in one view, with colors, fonts, backgrounds, etc. When I am satisfied I can update all views and forms the the database with the new design. I don’t use scanEZ as much, but still on a regular basis. It also have functions to identify replication conflicts, like NoteMan.DocDelta, but the two tools complement each other. Using scanEZ, I can locate and delete documents of a particular type, including profile documents, and much more. I also sometimes use designPropEZ to check the design of a database and make sure it does not inherit element from the wrong templates/databases.
Here is a screenshot of my currect toolbar with all my development tools:

In addition I use Photoshop CS2 for graphics editing, TechSmith Jing to create screencam demos for managers/users, and Notepad++ for some HTML/Javascript/jQuery editing.
Object Oriented Lotusscript for beginners – Part 1
Object Oriented Lotusscript for beginners – Part 2
When payments are made, the reserve amounts are reduced, until reaching zero. No more payments can be done then until the reserve is increased. Each adjuster have a limit to how large reserve he or she can set, higher reserve must be approved by a manager.
Class AmountData
Public lr As Currency ' Loss Reserve
Public er As Currency ' Expense Reserve
Public lp As Currency ' Loss Payments
Public ep As Currency ' Expense Payments
Public slp As Currency ' Supplemental Loss Payments
Public sep As Currency ' Supplemental Expense Payments
Public rec As Currency ' Recovery amount
Public lossavail As Currency
Public expavail As Currency
Public Sub New()
rec = 0
slp = 0
sep = 0
lr = 0
er = 0
lp = 0
ep = 0
lossavail = -1
expavail = -1
End Sub
Public Sub Load(claimnumber As String, claimant As Integer)
Dim success As Integer
Dim servaddress As String
Dim xmldata As String
Dim claimlink As ClaimLink ' Object to connect to backend
Set ClaimLink = New ClaimLink() ' Create object/class
If claimant = 0 Then ' Get total amounts for all claimants
success = claimlink.GetClaimStatus(claimnumber, Today())
Else ' Get amounts for selected claimant
success = claimlink.GetAmountsByClaimant(claimnumber, claimant, Today())
End If
If success = True Then ' Data returned successfully
xmldata = claimlink.GetDataXML()
rec = Cstr(Ccur(XMLGetValue(xmldata,"recovery")))
slp = Cstr(0-Ccur(XMLGetValue(xmldata,"losssup")))
sep = Cstr(0-Ccur(XMLGetValue(xmldata,"expsup")))
If claimant = 0 Then ' All claimants
lr = Cstr(Ccur(XMLGetValue(xmldata,"lossorig")) + Ccur(XMLGetValue(xmldata,"losschg")))
er = Cstr(Ccur(XMLGetValue(xmldata,"exporig")) + Ccur(XMLGetValue(xmldata,"expchg")))
Else ' Specified claimant
lr = Cstr(Ccur(XMLGetValue(xmldata,"lossres")) - Ccur(slp) + Ccur(rec))
er = Cstr(Ccur(XMLGetValue(xmldata,"expres")) - Ccur(sep))
End If
lp = Cstr(0-Ccur(XMLGetValue(xmldata,"losspaid")) - Ccur(slp))
ep = Cstr(0-Ccur(XMLGetValue(xmldata,"exppaid")) - Ccur(sep))
lossavail = Ccur(lr) - Ccur(lp)
expavail = Ccur(er) - Ccur(ep)
End If
End Sub
End Class
Class ClaimantStatusData
Public loss As String
Public expense As String
Public claimant As String
Public Sub new(doc As NotesDocument)
If Lcase(doc.LossClosed(0)) = "yes" Then
Me.loss = "closed"
Else
Me.loss = "open"
End If
If Lcase(doc.ExpensesClosed(0)) = "yes" Then
Me.expense = "closed"
Else
Me.expense = "open"
End If
If Me.expense = "closed" Then
If Me.loss = "closed" Then
Me.claimant = "closed"
Else
Me.claimant = "open"
End If
Else
Me.claimant = "open"
End If
End Sub
End Class
Class ClaimantData
Public claimantdoc As NotesDocument
Public unid As String ' Store UniversalID of claimant document
Public parentunid As String
Public amounts As AmountData
Public claimcare As ClaimCareData
Public status As ClaimantStatusData
Public Parallel As Integer
Public Sub New(doc As NotesDocument)
Dim claimnumber As String
Dim claimant As Integer
Set claimantdoc = doc
unid = doc.UniversalID
parentunid = doc.GetItemValue("ParentUNID")(0)
claimnumber = doc.GetItemValue("ClaimNumber")(0)
claimant = Cint(doc.GetItemValue("Claimant_Number")(0))
If Lcase(doc.GetItemValue("TransferredToParallel")(0)) = "yes" Then
Parallel = True
Else
Parallel = False
End If
Set amounts = New Amounts(claimnumber, claimant)
Set status = New ClaimantStatusData(doc)
End Sub
Public Function GetValue(fieldname) As Variant
GetValue = claimantdoc.GetItemValue(fieldname)(0)
End Function
Public Function SetValue(fieldname, Byval value As Variant) As Variant
Call claimantdoc.ReplaceItemValue(fieldname, value)
End Function
Public Function GetVariant(fieldname) As Variant
GetVariant = claimantdoc.GetItemValue(fieldname)
End Function
Public Sub Save()
Call claimantdoc.Save(True,True)
End Sub
Public Function DisplayName() As String
If Fulltrim(GetValue("Claimant_Name")) = "" Then
DisplayName = GetValue("Claimant_Company")
Else
DisplayName = GetValue("Claimant_Name")
End If
End Function
Public Function GetXML()
Dim tempxml As String
If claimantdoc Is Nothing Then
Msgbox "Claimant document is not loaded, no data returned.",,"ClaimantData.GetXML()"
GetXML = ""
Exit Function
End If
tempxml = "<claimntno>" & claimantdoc.GetValue("Claimant_Number") & "</claimntno>" & CRLF
tempxml = tempxml + "<extclmntno>" & claimantdoc.getValue("ClaimantNumberExternal") & "</extclmntno>" & CRLF
tempxml = tempxml + "<classcode>" & claimantdoc.pClassCode(0) & "</classcode>" & CRLF
tempxml = tempxml + "<cvgcode>" & claimantdoc.Claimant_LossType(0) & "</cvgcode>" & CRLF
tempxml = tempxml + "<table>" & claimantdoc.pTable(0) & "</table>" & CRLF
If claimantdoc.Unknown(0)="Yes" Then
tempxml = tempxml + "<claimntnam>* unknown *</claimntnam>" & CRLF
Elseif claimantdoc.Claimant_Name(0)="" Then
tempxml = tempxml + "<claimntnam>" & dsClaimLink.EncodeXML(claimantdoc.Claimant_Company(0)) & "</claimntnam>" & CRLF
Else
tempxml = tempxml + "<claimntnam>" & dsClaimLink.EncodeXML(claimantdoc.Claimant_Name(0)) & "</claimntnam>" & CRLF
End If
' Check if we have amounts loaded
If Not amounts Is Nothing Then
tempxml = tempxml + "<lossamt>" & Format$(amounts.lp,"###0.00") & "</lossamt>" & CRLF
tempxml = tempxml + "<expamt>" & Format$(amounts.ep,"###0.00") & "</expamt>" & CRLF
End If
GetXML = tempxml
End Function
End Class
Project Vulcan – my thoughts
Ubuntu 10.04
Vanity domains and personal website

AddItem("Menu","Item Label", "/mylink.html");
I also plan to start learning Xpages soon, when I get the time. But for now I work in "classic" Notes/Domino, as that is what we use at work.
I'm back.
$190 Netbook for the US market? Why not?
I wrote a comment, but I want to expand slightly on ithere.
I wonder aboutother markets? I can see some big opportunities in the US and Europe for IBM/Lotus. If I could buy an inexpensive Netbook like that for Erik, my nine year old son, I would get him one tomorrow. He could then bring it between his moms place and my place, just connect to our respectively WiFi networks. He could even use it at school, if his school allows him to use it there.
Erik’s computer at my place is already running Ubuntu 9.10, he have been using Ubuntu on his home computer for almost a year now. He could care less what operating system it has. He play some online games at Nick.com (even ifthere are a handful ofgames not working in Ubuntu/Firefox as they use ActiveX), go on Facebook to play Farmville and watch videos on Youtube.
He also check his webmail accounts (he had one through his old school). Typical Netbook useage.
So, what wouldbringing this to the USand European markets do for IBM and Lotus?
Well, you would get Ubuntu-based laptops with Symphony and LotusLive out among kids and teenagers. They would get used to theLotus products. What do you think will happen when they hit the job market and workplaces in a few years? I think they will be proponents of Ubuntu and Symphony/OpenOffice (and OpenSoftware in general).
A few well-spoken and enthusiastic people, who know the product and what you can do with it, can change the software a workplace is using. I think a lot of the migrations from Notes/Domino to Exchange/Sharepoint/Outlook is driven exactly by that, one or two people coming from the outside and showing a handful of cool applications and talking about the benefits of the MS stack. The CEO’s will listen to them (just like they listen to a consultant but not an internal IT worker saying the same thing). Who will the CEO listen to, the old-timer in the IT department that likes Notes, or the new young go-getter with a fresh MBA talking about all the new things like Enterprise 2.0, cloud computing and other buzzwords he learned in class, at a university or college where every student must use Microsoft Office…
I told the story before, how I came in as a 23 year old fresh employee to a workplace where everyone used WordPerfect. With a background at Microsoft, andseveral years of using Word for Windows, it took me just 6 monthsto exterminate WordPerfect and get everyone to switch to Word, just by showing the advantages (as I saw them) and write a clever macro or two that save the users a lot of time each day.
Ithink getting the products out there ("show the product") is much more important than abstract advertising for Smart Planet or Lotus Knows. Yes, those are ways to get the name/brand out there, but how many car commercials do you see where no vehicle is shown?

