Author Archives: Karl-Henry Martinsson
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?