<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Falling Dominos &#187; lotus</title>
	<atom:link href="http://codepress.net/b/category/lotus/feed/" rel="self" type="application/rss+xml" />
	<link>http://codepress.net/b</link>
	<description>Let&#039;s keep Lotus Notes development relevant</description>
	<lastBuildDate>Fri, 19 Feb 2010 02:36:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Object Oriented Example &#8211; Document Locking</title>
		<link>http://codepress.net/b/2010/02/19/object-oriented-example-document-locking/</link>
		<comments>http://codepress.net/b/2010/02/19/object-oriented-example-document-locking/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 02:36:23 +0000</pubDate>
		<dc:creator>Tom ONeil</dc:creator>
				<category><![CDATA[lotus]]></category>

		<guid isPermaLink="false">http://codepress.net/b/?p=497</guid>
		<description><![CDATA[If Toohey is still posting LotusScript tips in his blog… I will too.
Today I am showing a very simple document locking class. If you don&#8217;t care about Object Orientated code in LotusScript or you&#8217;ve seen enough examples&#8230; feel free to move along.

What is the class?
This is a very simple class to assist with document locking. [...]]]></description>
			<content:encoded><![CDATA[<p>If Toohey is still posting <a href="http://www.dominoguru.com/pages/02162010122132.html#comments" target="_blank">LotusScript tips</a> in his blog… I will too.</p>
<p>Today I am showing a very simple document locking class. If you don&#8217;t care about Object Orientated code in LotusScript or you&#8217;ve seen enough examples&#8230; feel free to move along.<br />
<br/></p>
<h2>What is the class?</h2>
<p>This is a very simple class to assist with document locking. There are so many ways to do locking in Lotus Notes, but I use this one because it&#8217;s quick and easy.<br />
<br/></p>
<h2>What do I need besides the class?</h2>
<p>The only thing this class needs is a view. I&#8217;ve put all of the parameters of the view in the Constants section of my script library:</p>
<pre><code>Const LOCK_VIEW = "($$Lock)"
Const LOCK_FORM = "zzLock"
Const LOCK_USERFIELD = "username"
Const LOCK_UNIDFIELD = "unid"
Const LOCK_DELETEVAL = "~~DELETEME~~"
</code></pre>
<p>The selection formula of the view is &#8220;form = &#8220;zzLock&#8221;" and it has two columns: unid and username.<br />
<br/></p>
<h2>What&#8217;s the huge flaw in your code?</h2>
<p>I couldn&#8217;t figure out how to use this class with a group who has Author access but not create document rights. Luckily&#8230; I&#8217;ve never had to deal with that situation. Any ideas would be appreciated.<br />
<br/></p>
<h2>How do you use the class in a form or agent?</h2>
<p>Here&#8217;s an example of what I do in the QueryModeChange event of a form.</p>
<pre><code>
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
	Dim locktool As New LockTools
	Dim lockname As String
	Dim result As Integer
	Dim workspace As New NotesUIWorkspace
	Dim session As New notessession

	If source.EditMode = False Then
		LockName = LockTool.isDocLockedStr(source.document)
		If LockName &lt;&gt; "" And LockName &lt;&gt; session.CommonUserName Then
			Msgbox("This document is currently locked by " + LockName + ".")
			continue = False
			Exit Sub
		End If
		Call locktool.lockdoc(source.Document)
	End If
End Sub</code></pre>
<p>Here&#8217;s the corresponding QueryClose of the document:</p>
<pre><code>
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
		' if doc is in edit mode... try and delete the locks
	Dim locktool As New locktools
	If source.EditMode Then
		Call LockTool.unLockDoc(source.document)
	End If
End Sub</code></pre>
<p><span id="more-497"></span><br />
<br/></p>
<h2>Script Library Code</h2>
<pre><code>
'libLockTools: 

Option Public
Option Declare
%INCLUDE "lsconst.lss"
' The only scenario this can't handle is if the user has Author but not "Create Documents" role. 

Const LOCK_VIEW = "($$Lock)"
Const LOCK_FORM = "zzLock"
Const LOCK_USERFIELD = "username"
Const LOCK_UNIDFIELD = "unid"
Const LOCK_DELETEVAL = "~~DELETEME~~"

Class LockTools
	Private lockView As NotesView
	Private userCanCreate As Boolean
	Private userCanDelete As Boolean
	Private userAccessLevel As Long

	Sub New()
		Dim session As New NotesSession
		If (session.CurrentDatabase.QueryAccessPrivileges(session.UserName) And DBACL_CREATE_DOCUMENTS) &gt; 0 Then
			userCanCreate = True
		Else
			userCanCreate = False
		End If

		If (session.CurrentDatabase.QueryAccessPrivileges(session.UserName) And DBACL_DELETE_DOCUMENTS) &gt; 0 Then
			userCanDelete = True
		Else
			userCanDelete = False
		End If

		userAccessLevel = session.CurrentDatabase.CurrentAccessLevel

	End Sub

	Function isDocLockedStr(doc As NotesDocument) As String
		Call init()
		Dim entry As NotesViewEntry

		Set entry = lockView.GetEntryByKey(doc.UniversalID,True)

		If entry Is Nothing Then
			isDocLockedStr = ""
		Else
			isDocLockedStr = entry.ColumnValues(1) ' this code is up for debate. but this is fast and easy
		End If

	End Function

	Function lockDoc(doc As NotesDocument) As Boolean
		' debating this code. Do I return false if the user can't create docs?
		If userCanCreate = False Then
			LockDoc = True
			Exit Function
		End If

		lockdoc = False
		If isDocLockedStr(doc) = "" Then
			Dim session As New notessession
			Dim newLockDoc As NotesDocument
			Dim authorsItem As NotesItem
			Set newLockDoc = session.CurrentDatabase.CreateDocument
			Set authorsItem = New NotesItem( newLockDoc,"DocAuthors", session.UserName,AUTHORS)

			newLockDoc.form = LOCK_FORM
			Call newLockDoc.ReplaceItemValue(LOCK_UNIDFIELD,doc.UniversalID)
			Call newLockDoc.ReplaceItemValue(LOCK_USERFIELD,session.UserName)
			newLockDoc.Save True,False
			lockdoc = True
			Print "Document Successfully Locked"
		End If

	End Function

	Function unLockDoc(doc As NotesDocument) As Boolean
		unLockDoc = False
		Dim entries As NotesViewEntryCollection
		Call init()
		Set entries = lockView.GetAllEntriesByKey(doc.UniversalID)
		If userCanDelete = True Then
			entries.RemoveAll(True)
			unLockDoc = True
		Else
			Call entries.StampAll(LOCK_UNIDFIELD,LOCK_DELETEVAL)
		End If

		Print "Document Successfully Unlocked"
	End Function

	Function unLockAllDocs As Boolean
		unLockAllDocs = False
		Dim entries As NotesViewEntryCollection
		Call init()

		Set entries = lockView.AllEntries
		entries.RemoveAll(True)
		unLockAllDocs = True
	End Function

	Sub init()
		If lockView Is Nothing Then
			Dim session As New notessession
			Set lockView = session.CurrentDatabase.GetView(LOCK_VIEW)
			If lockView Is Nothing Then
				Error 9003, "Cannot find Lock View"
			End If
		End If
	End Sub

End Class
</code></pre>
<p><br/></p>
<h2>Why not just have functions in a Script Library?</h2>
<p>I could have put all of the functions you see in a Script Library. One thing I like about Classes is that they are distinct. I can take this Class and add it to any form without worrying if I&#8217;m overwriting the &#8220;unlockdoc&#8221; routine.</p>
<p>Also, what if we want to keep the locks in a different database? You could extend the class: Class AdvancedLockTools as LockTools and rewrite the init() function.<br />
<br/></p>
<h2>What&#8217;s next?</h2>
<p>What&#8217;s next for this code? I want to try and come up with a way to get Authors who cannot create documents to work.</p>
<p>This is such a simple example of a class. I have a reporting tool that uses classes to represent &#8220;columns&#8221; of data. Each column type (Number, text, date, name, etc&#8230; ) extends from a base class. The power of classes is evident when I put columns in a list and loop through the columns and calling a function (e.g. getData() or getFormatting()) that is different in each column.</p>
<p>I hope to provide some of these complex examples in the future. Object Oriented coding can be used in almost all of the languages we use as Notes developers (JavaScript, Java, and LotusScript).</p>
]]></content:encoded>
			<wfw:commentRss>http://codepress.net/b/2010/02/19/object-oriented-example-document-locking/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>jsCrypto</title>
		<link>http://codepress.net/b/2009/12/17/jscrypto/</link>
		<comments>http://codepress.net/b/2009/12/17/jscrypto/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 16:43:19 +0000</pubDate>
		<dc:creator>Tom ONeil</dc:creator>
				<category><![CDATA[lotus]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://codepress.net/b/?p=490</guid>
		<description><![CDATA[I&#8217;m a sucker for encryption tools and I found a new one through del.icio.us called jsCrypto. It&#8217;s a JavaScript encryption library that claims to be at least 4x faster than any other JavaScript encryption routine out there.
A description from the jsCrypto site:
We offer a fast, small symmetric encryption library written in Javascript. Though several such [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a sucker for encryption tools and I found a new one through del.icio.us called <a href="http://crypto.stanford.edu/sjcl/">jsCrypto</a>. It&#8217;s a JavaScript encryption library that claims to be at least 4x faster than any other JavaScript encryption routine out there.</p>
<p>A description from the jsCrypto site:</p>
<blockquote><p>We offer a fast, small symmetric encryption library written in Javascript. Though several such libraries exist, jsCrypto offers several advantages.<br/></p>
<ul>
<li>A clean, simple interface to basic AES encryption/decryption, as well as OCB and CCM modes for authenticated encryption</li>
<li>A cryptographic random number generator that collects randomness from user mouse movements, among other sources</li>
<li>jsCrypto is at least four times faster in all browsers and about 12% smaller than the best previously existing implementation</li>
<li>In Internet Explorer, jsCrypto is 11 times faster than the fastest previous existing implementation</li>
</ul>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://codepress.net/b/2009/12/17/jscrypto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A call for ideas from Notes Client developers</title>
		<link>http://codepress.net/b/2009/09/21/a-call-for-ideas-from-notes-client-developers/</link>
		<comments>http://codepress.net/b/2009/09/21/a-call-for-ideas-from-notes-client-developers/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 02:18:17 +0000</pubDate>
		<dc:creator>Tom ONeil</dc:creator>
				<category><![CDATA[lotus]]></category>

		<guid isPermaLink="false">http://codepress.net/b/?p=477</guid>
		<description><![CDATA[My friend and I have been philosophizing about what to do with a specific Lotus Notes application. The application is roughly eight years old and it&#8217;s bloated. It&#8217;s literally busting at the seams with code.
I&#8217;m going to say right now&#8230; that with unlimited resources (aka time and money) this application should be rewritten. I wouldn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>My friend and I have been philosophizing about what to do with a specific Lotus Notes application. The application is roughly eight years old and it&#8217;s bloated. It&#8217;s literally busting at the seams with code.</p>
<p>I&#8217;m going to say right now&#8230; that with unlimited resources (aka time and money) this application should be rewritten. I wouldn&#8217;t even promise that I would re-do it in Lotus Notes. But that&#8217;s another story.</p>
<p>The application now has a long list of enhancements. One enhancement (our favorite), is a requirement to create a relational reporting system of the data. All of the data (minus the rich-text fields). Many other requirements call for interfacing with other systems at the company. Some might be Web Services but a lot of the transactions (I think) are done in TIBCO. </p>
<p>My friend (bless his heart) is sold on an idea. His idea is to (somehow) create a <strong>LIVE</strong> SQL Server back-end to this data. Basically, on the open and save of the data&#8230; it will all be sync&#8217;ed to a Microsoft SQL Server (DB2 is not in the company and is not an option).</p>
<p>I&#8217;m trying to see it his way but I really have no experience with something like this. I&#8217;ve offloaded Notes data to reporting databases before but I&#8217;ve never loaded and saved ALL of the data to/from an external system. I have so many doubts running through my mind.</p>
<p>Have you guys done this? How feasible is it to take an existing (a big fat one&#8230; I mean like orca fat) application and move the data to SQL Server while keeping the Notes Client interface? Is this something for DECS? </p>
<p>I appreciate any suggestions. I&#8217;m at a loss for trying to convince him to try a different path.</p>
]]></content:encoded>
			<wfw:commentRss>http://codepress.net/b/2009/09/21/a-call-for-ideas-from-notes-client-developers/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>R8 &#8211; NotesDocumentCollection: New Methods</title>
		<link>http://codepress.net/b/2009/09/16/r8-notesdocumentcollection-new-methods/</link>
		<comments>http://codepress.net/b/2009/09/16/r8-notesdocumentcollection-new-methods/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 12:44:23 +0000</pubDate>
		<dc:creator>Tom ONeil</dc:creator>
				<category><![CDATA[lotus]]></category>

		<guid isPermaLink="false">http://codepress.net/b/?p=465</guid>
		<description><![CDATA[I missed the announcement on this one&#8230;
The NotesDocumentCollection in R8 now has four new fabulous methods: Merge, Contains, Intersect, Subtract.

Merge: Adds to a document collection any documents not already in the collection that are contained in a second collection.
Contains: Indicates whether or not a NotesDocumentCollection contains all of the given NotesDocuments or all of the [...]]]></description>
			<content:encoded><![CDATA[<p>I missed the announcement on this one&#8230;</p>
<p>The NotesDocumentCollection in R8 now has four new fabulous methods: Merge, Contains, Intersect, Subtract.</p>
<ul>
<li>Merge: Adds to a document collection any documents not already in the collection that are contained in a second collection.</li>
<li>Contains: Indicates whether or not a NotesDocumentCollection contains all of the given NotesDocuments or all of the NotesDocuments associated with the given ViewEntries.</li>
<li>Intersect: Removes from a document collection any documents not also contained in a second collection.</li>
<li>Subtract: Removes from a document collection any documents contained in a second collection.</li>
</ul>
<p>This is the best part&#8230; each method takes a variant called <em>inputNotes</em> as a parameter. The parameter can be a String, NotesDocument, NotesDocumentCollection, NotesViewEntry or NotesViewEntryCollection. Talk about versatility!</p>
<p>These new methods allow the NotesDocumentCollection object to be a &#8220;container&#8221; tool and not just a &#8220;document access&#8221; tool. Great job Lotus!</p>
]]></content:encoded>
			<wfw:commentRss>http://codepress.net/b/2009/09/16/r8-notesdocumentcollection-new-methods/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LotusScript Versions of DBLookup and DBColumn Using Evaluate</title>
		<link>http://codepress.net/b/2009/08/12/lotusscript-versions-of-dblookup-and-dbcolumn-using-evaluate/</link>
		<comments>http://codepress.net/b/2009/08/12/lotusscript-versions-of-dblookup-and-dbcolumn-using-evaluate/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 03:26:57 +0000</pubDate>
		<dc:creator>Tom ONeil</dc:creator>
				<category><![CDATA[lotus]]></category>

		<guid isPermaLink="false">http://codepress.net/b/?p=441</guid>
		<description><![CDATA[I was looking through Jamie Magee&#8217;s slides from a 2008 ILUG presentation to review the performance tips he showed us at IamLUG2009. When reading slide #6 I found an interesting tidbit: &#8220;When only reading data from documents &#8211; @DBLookup and @DBColumn is fastest.&#8221; I assumed he meant through an Evaluate statement.
Could this be true? I [...]]]></description>
			<content:encoded><![CDATA[<p>I was looking through Jamie Magee&#8217;s slides from a <a href="http://www.jamiemagee.com/jm/jamie.nsf/downloads/JMAE-7FBVFE" target="_blank">2008 ILUG presentation</a> to review the performance tips he showed us at IamLUG2009. When reading slide #6 I found an interesting tidbit: &#8220;When only reading data from documents &#8211; @DBLookup and @DBColumn is fastest.&#8221; I assumed he meant through an Evaluate statement.<br/><br />
Could this be true? I always considered it a best practice to avoid the Evaluate statement. Then I found an article on ibm.com from 1998 called &#8220;<a href="http://www.ibm.com/developerworks/lotus/library/ls-The_Evaluate_statement/index.html" target="_blank">Simplifying your LotusScript with the Evaluate statement.</a>&#8221; The article is a great synopsis of the Evaluate statement and it confirmed Jamie&#8217;s opinion.<br />
<br/>Here&#8217;s their view:</p>
<blockquote><p>The reason the Evaluate is faster is because the @DbLookup gets values from a view index, without having to loop through and access each document. In contrast, pulling values using GetAllDocumentsByKey requires you to loop through and access each document.</p></blockquote>
<p>That&#8217;s great but writing Evaluate strings for DBLookup and DBColumn calls isn&#8217;t exactly fun. So&#8230; I decided to wrap the calls in a handy class.
</p></blockquote>
<p><br/>To call the code is pretty easy:<br />
<br/></p>
<pre>
use "libLSViewTools"

Dim tools as New LSViewTools
dim result as variant

'** function call is DBlookup(server As String,database As String,
'** view As String,key As String,pickMe As Variant,exactMatch As Boolean) As Variant

result = tools.DBLookup("myserver","mydatabase.nsf","myview","myfield",true)
print result(0)

result = tools.DBColumn("myserver","mydatabase.nsf","myview",1)
print result(0)
</pre>
<p><br/><br />
The parameter &#8220;pickme&#8221; in the dblookup function is a variant because I allow a number (column) or string (field name) to be sent (just like @DBLookup).<br />
<br/>The lss file can be downloaded here: <a href="http://codepress.net/b/wp-content/uploads/2009/08/libLSViewTools.lss">libLSViewTools.lss</a><br/></p>
<p><span id="more-441"></span></p>
<p>The full code is here for your perusal: <br/></p>
<pre>
'libLSViewTools: 

'***** libLSViewTools
'* Library with on class LSViewTools.
'* Class LSViewTools currently has two functions: DBlookup and DBColumn. Refer to the the Notes help
'* for a description of the formula equivalents

Option Public
Option Declare
%INCLUDE "lsconst.lss"

Class LSViewTools
	Private boolPrintErrors As Boolean
	Private boolThrowErrors As Boolean

	Sub New()
		boolPrintErrors = True
		boolThrowErrors= False
	End Sub

	Property Set printErrors As Boolean
		boolPrintErrors = printErrors
	End Property

	Property Set throwErrors As Boolean
		boolThrowErrors = throwErrors
	End Property

	Function DBlookup(server As String,database As String,view As String,key As String,pickMe As Variant,exactMatch As Boolean) As Variant
		Dim session As New NotesSession
		Dim evalBuilder As String
		Dim exactMatchStr As String
		Dim result As Variant

		On Error Goto error_proc
' Start Validation
		If view = "" Then
			Error 7000, "View cannot be null"
		End If

		If Typename(pickme) <> "STRING" And Typename(pickme) <> "INTEGER" Then
			Error 7001, "5th Parameter must be type string or integer."
		End If

		If server <> "" And database = "" Then
			Error 7003, "Database cannot be null if the server is specified"
		End If

		If exactMatch = False Then
			exactMatchStr = ";[PARTIALMATCH]"
		Else
			exactMatchStr = ""
		End If

		If server = "" And database <> "" Then
			server = session.CurrentDatabase.Server
		End If

		If Typename(pickme) = "STRING" Then
			evalBuilder = {@DbLookup("";@Name([CN];"}+ server + {"):"} + database + {";"} + view + {";"} + key + {";"} + pickme + {"} + exactMatchStr + {);}
		Else
			evalBuilder = {@DbLookup("";@Name([CN];"}+ server + {"):"} + database + {";"} + view + {";"} + key + {";} + pickme + exactMatchStr + {);}
		End If

		result = Evaluate(evalBuilder)

		If Isarray(result) Then
			dblookup = result
		Else
			dblookup = Evaluate("NULL")
		End If

		Exit Function
error_proc:
		If boolPrintErrors Then
			Print "LSViewTools " + Cstr(Getthreadinfo(LSI_THREAD_PROC)) + " Error: " + Cstr(Err) + " " + Error + ""
		End If
		If boolThrowErrors Then
			Error 7554, "LSViewTools " + Cstr(Getthreadinfo(LSI_THREAD_PROC)) + " Error: " + Cstr(Err) + " " + Error + ""
		End If
		DBLookup = Evaluate("NULL")
		Exit Function
	End Function

	Function DBColumn(server As String,database As String,view As String,column As Integer) As Variant
		Dim session As New NotesSession
		Dim evalBuilder As String
		Dim exactMatchStr As String
		Dim result As Variant

		On Error Goto error_proc
' Start Validation
		If view = "" Then
			Error 7000, "View cannot be null"
		End If

		If server <> "" And database = "" Then
			Error 7003, "Database cannot be null if the server is specified"
		End If

		If server = "" And database <> "" Then
			server = session.CurrentDatabase.Server
		End If

		evalBuilder = {@DbColumn("";@Name([CN];"}+ server + {"):"} + database + {";"} + view + {";} + Cstr(column) + {);}

		result = Evaluate(evalBuilder)

		If Isarray(result) Then
			If Cstr(result(0)) = "1.#INF" Then
				Error 7010, "DBColumn returned too many values"
			End If

			dbColumn = result
		Else
			dbColumn = Evaluate("NULL")
		End If

		Exit Function
error_proc:
		If boolPrintErrors Then
			Print "LSViewTools " + Cstr(Getthreadinfo(LSI_THREAD_PROC)) + " Error: " + Cstr(Err) + " " + Error + ""
		End If
		If boolThrowErrors Then
			Error 7555, "LSViewTools " + Cstr(Getthreadinfo(LSI_THREAD_PROC)) + " Error: " + Cstr(Err) + " " + Error + ""
		End If
		DbColumn = Evaluate("NULL")
		Exit Function
	End Function

End Class
</pre>
<p><br/><br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://codepress.net/b/2009/08/12/lotusscript-versions-of-dblookup-and-dbcolumn-using-evaluate/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Pipe Dream: Custom Apps offered by LotusLive</title>
		<link>http://codepress.net/b/2009/08/06/pipe-dream-custom-apps-offered-by-lotuslive/</link>
		<comments>http://codepress.net/b/2009/08/06/pipe-dream-custom-apps-offered-by-lotuslive/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 02:50:57 +0000</pubDate>
		<dc:creator>Tom ONeil</dc:creator>
				<category><![CDATA[lotus]]></category>

		<guid isPermaLink="false">http://codepress.net/b/?p=424</guid>
		<description><![CDATA[I was daydreaming during Cavanaugh&#8217;s opening session at IamLUG. Nothing against his speech&#8230; I was just hoping for more of a William Wallace speech.
Ed: &#8220;My Yellow Sons and Daughters, I am Ed Brill&#8221;
Yellow person: &#8220;Ed Brill is seven feet tall&#8221;
Ed: &#8220;Yes, I&#8217;ve heard! And if he were here, he&#8217;d consume Microsoft with fireballs from his [...]]]></description>
			<content:encoded><![CDATA[<p>I was daydreaming during Cavanaugh&#8217;s opening session at IamLUG. Nothing against his speech&#8230; I was just hoping for more of a William Wallace speech.</p>
<blockquote><p>Ed: &#8220;My Yellow Sons and Daughters, I am Ed Brill&#8221;</p>
<p>Yellow person: &#8220;Ed Brill is seven feet tall&#8221;</p>
<p>Ed: &#8220;Yes, I&#8217;ve heard! And if he were here, he&#8217;d consume Microsoft with fireballs from his eyes…and bolts of lightning from his arse! I AM Ed Brill! And I see, a whole army of my people.&#8221;</p></blockquote>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/WLrrBs8JBQo" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/WLrrBs8JBQo"></embed></object></p>
<p>Sorry&#8230; that&#8217;s where my mind was at the moment. But then I saw a slide about LotusLive and I started dreaming about the &#8220;cloud.&#8221; The LotusLive product hosts collaboration applications like Lotus Sametime, Lotus Notes, and Connections. These applications are core Lotus products but what about the real &#8220;strength&#8221; behind Lotus (for the past 10+ years)? Custom applications.</p>
<p>I quickly popped into my old &#8220;<a href="http://codepress.net/b/2009/07/15/theres-an-app-for-that/">There&#8217;s an app for that</a>&#8221; mindset. I thought how great it would be if Lotus allowed for custom applications to be selected and added by customers into their LotusLive environment. Like the Apple App store. The applications would obviously have to go through a vetting process like Apple Iphone applications. I can&#8217;t imagine the process would be cheap or easy.</p>
<p>Wouldn&#8217;t it be great if IBM presented LotusLive to a company and said &#8220;We have this great online store full of custom applications. With one click of a button you can have this <a href="http://ideajam.net/">IdeaJam</a> application installed in your environment. Check out the HR tools section of the store&#8230; it has many applications to fit your needs.&#8221;</p>
<p>It&#8217;s a pipe dream&#8230; but that&#8217;s where my head during Kevin&#8217;s speech.</p>
<p>p.s. I loved IamLUG. I hope they do it again. I&#8217;ve attended one Lotusphere and it was overwhelming. IamLUG was perfect.</p>
<p>EDIT: Nathan Freeman posted something similar in his popular <a href="http://www.lotus911.com/nathan/escape.nsf/d6plinks/NTFN-7ZZ4T8">blog</a> and folks seemed to like it. </p>
]]></content:encoded>
			<wfw:commentRss>http://codepress.net/b/2009/08/06/pipe-dream-custom-apps-offered-by-lotuslive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Going Green with Lotus Notes</title>
		<link>http://codepress.net/b/2009/07/23/going-green-with-lotus-notes/</link>
		<comments>http://codepress.net/b/2009/07/23/going-green-with-lotus-notes/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 18:53:03 +0000</pubDate>
		<dc:creator>Tom ONeil</dc:creator>
				<category><![CDATA[lotus]]></category>

		<guid isPermaLink="false">http://codepress.net/b/?p=421</guid>
		<description><![CDATA[I am proud to admit that one of my applications won a corporate &#8220;Going Green&#8221; award.

We (the app) will save roughly $100,000 year (I say roughly because it is only calculated supply costs)
We&#8217;ve eliminated the need to print to 3,000,000+ sheets of paper a year (I&#8217;ve estimated that to be 40 trees a year)
They don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>I am proud to admit that one of my applications won a corporate &#8220;Going Green&#8221; award.</p>
<ul>
<li>We (the app) will save roughly $100,000 year (I say roughly because it is only calculated supply costs)</li>
<li>We&#8217;ve eliminated the need to print to 3,000,000+ sheets of paper a year (I&#8217;ve estimated that to be 40 trees a year)</li>
<li>They don&#8217;t give a dollar value but there is also significant monetary savings since we don&#8217;t have to transfer and store 3,000,000+ sheets of paper yearly.</li>
</ul>
<p>I wish I could give more detail but I would probably have to talk to the PR department.</p>
<p>Need to automate your processes and stop using printers and faxes? There&#8217;s an app for that!</p>
]]></content:encoded>
			<wfw:commentRss>http://codepress.net/b/2009/07/23/going-green-with-lotus-notes/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>There&#8217;s an app for that</title>
		<link>http://codepress.net/b/2009/07/15/theres-an-app-for-that/</link>
		<comments>http://codepress.net/b/2009/07/15/theres-an-app-for-that/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 10:40:25 +0000</pubDate>
		<dc:creator>Tom ONeil</dc:creator>
				<category><![CDATA[lotus]]></category>

		<guid isPermaLink="false">http://codepress.net/b/?p=405</guid>
		<description><![CDATA[I&#8217;ve said it before and Neil Wainwright said it again (comment #3) today. Small application development was Lotus&#8217; strength in the late 90s and early 2000&#8217;s.
After reading Neil&#8217;s comment and going back to work I stared at my workspace for a moment. With all of the tabs filled with icons&#8230; I said to myself &#8220;There&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve said it <a href="http://codepress.net/b/2009/07/13/developers-developers-developers/" target="_self">before</a> and Neil Wainwright <a href="http://www.edbrill.com/ebrill/edbrill.nsf/dx/google-and-microsoft-up-their-efforts-to-target-lotus-customers?opendocument&amp;comments#anc1" target="_blank">said it again</a> (comment #3) today. Small application development was Lotus&#8217; strength in the late 90s and early 2000&#8217;s.</p>
<p>After reading Neil&#8217;s comment and going back to work I stared at my workspace for a moment. With all of the tabs filled with icons&#8230; I said to myself &#8220;There&#8217;s an app for that.&#8221;</p>
<p>Why is the iPhone so successful? C&#8217;mon&#8230; It&#8217;s just a cell phone. The reason for the  iPhone&#8217;s success  is small, inexpensive, and easy-to-install applications that are driving iPhone sales exponentially. The iPhone&#8217;s current slogan says it all: &#8220;There&#8217;s an app for that!&#8221;</p>
<p>Compare that to Lotus Domino. It&#8217;s just an email system. Or&#8230; is it an environment where you can build small (you can argue size if you want), inexpensive, and easy-to-install applications?</p>
<p>I was looking at my workspace and thinking about all of the applications I have built over the years (at too many different jobs).</p>
<ul>
<li>Do you need an underwriting system for loans? There&#8217;s an app for that.</li>
<li>Do you need a workflow application to handle 100,000 faxes a quarter? There&#8217;s an app for that.</li>
<li>Do you need a HR timesheet system? There&#8217;s an app for that.</li>
<li>Do you need a Customer Relationship Management system? There&#8217;s an app for that.</li>
<li>Do you need a sales pipeline application? There&#8217;s an app for that.</li>
<li>Do you need a reference library for your sales team? There&#8217;s an app for that.</li>
<li>Do you need 101 different call tracking applications? There&#8217;s 101 apps for that.</li>
<li>Do you need a complete extranet with a content management system? There&#8217;s an app for that.</li>
</ul>
<p>I could go on for pages. All of these systems were built on Lotus Notes/Domino. Some of these applications were created by the departments and we&#8217;ve inherited and maintained them over the years. Some of these applications (like the underwriting apps) turned into large systems (which Lotus Notes is very capable of handling).</p>
<p>I&#8217;ve met countless developers who just do whatever their manager or project manager instructs them to do. Because of Domino environment, I&#8217;ve spent the last ten years in direct contact with customers automating their processes, destroying legacy paper systems, and saving money.</p>
<p>Can other programming environments do the same thing? Of course! It&#8217;s just that their environments are not as adept at building small, inexpensive, and easy-to-install applications as Lotus Domino.</p>
]]></content:encoded>
			<wfw:commentRss>http://codepress.net/b/2009/07/15/theres-an-app-for-that/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Developers! Developers! Developers!</title>
		<link>http://codepress.net/b/2009/07/13/developers-developers-developers/</link>
		<comments>http://codepress.net/b/2009/07/13/developers-developers-developers/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 13:43:53 +0000</pubDate>
		<dc:creator>Tom ONeil</dc:creator>
				<category><![CDATA[lotus]]></category>

		<guid isPermaLink="false">http://codepress.net/b/?p=379</guid>
		<description><![CDATA[On two recent Ed Brill posts, I stated my claim that developers were the key to Lotus Notes&#8217; world domination.
I might have even gone so far as recommending that Ed do the &#8220;developer dance&#8221; patented by Microsoft&#8217;s Steve Ballmer.

I believe the Notes Designer should be available to every Lotus Notes user. Restrict their access to [...]]]></description>
			<content:encoded><![CDATA[<p>On two recent Ed Brill posts, I stated my claim that developers were the key to Lotus Notes&#8217; world domination.</p>
<p>I might have even gone so far as recommending that Ed do the &#8220;developer dance&#8221; patented by Microsoft&#8217;s Steve Ballmer.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/8To-6VIJZRE&amp;feature" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/8To-6VIJZRE&amp;feature"></embed></object></p>
<p>I believe the Notes Designer should be available to every Lotus Notes user. Restrict their access to production/dev servers&#8230; but allow end-users to tinker with their applications locally.</p>
<p>My company (typically) does not provide end-users with the designer client but recently (especially with the cost-cutting measures) my group has been quite busy. After listening to the business case for one person to start modifying his group&#8217;s application, I convinced my manager to let them get the designer and modify their Notes application locally. When the user is ready, I copy the items from their database and paste them into a test copy in the test environment.</p>
<p>So far I have been amazed with the development skills of the end user. Except for one issue (green/bold form headers) the code looks great. He followed all of the best practices and it was well-tested by the users.</p>
<p>Their application was old (I built it five years ago) and it needed work. Without the extra end-user development they might have looked for a different (non-Lotus Notes) solution. Allowing the end-user to tinker with their own application was a win/win for both teams.</p>
<p>When the Lotus Notes email client was crappy, user development and the benefits of workflow are what made Lotus Notes strong. Why not just return the designer back to the end users and watch productivity (and sales) soar?</p>
]]></content:encoded>
			<wfw:commentRss>http://codepress.net/b/2009/07/13/developers-developers-developers/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Simple Research &#8211; Lotus Notes vs Outlook</title>
		<link>http://codepress.net/b/2009/07/13/simple-research-lotus-notes-vs-outlook/</link>
		<comments>http://codepress.net/b/2009/07/13/simple-research-lotus-notes-vs-outlook/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 02:27:56 +0000</pubDate>
		<dc:creator>Tom ONeil</dc:creator>
				<category><![CDATA[lotus]]></category>

		<guid isPermaLink="false">http://codepress.net/b/?p=383</guid>
		<description><![CDATA[Disclaimer: I am not a statistician and I do not claim to know anything about statistics.
For a long time I have wondered if the disturbing lack of Lotus Notes shops is just a Milwaukee issue. I finally decided to stop wondering and do a little research. I decided to use a very (un)scientific method&#8230; search [...]]]></description>
			<content:encoded><![CDATA[<p><em>Disclaimer: I am not a statistician and I do not claim to know anything about statistics.</em></p>
<p>For a long time I have wondered if the disturbing lack of Lotus Notes shops is just a Milwaukee issue. I finally decided to stop wondering and do a little research. I decided to use a very (un)scientific method&#8230; search Monster.com.</p>
<p>My searches were simple. I searched for the word &#8220;Lotus&#8221; in Milwaukee. The search found six results (jobs). Yikes! Chicago looked a bit better with 29 jobs and New York City looked great with 55 jobs.</p>
<p>Case solved! There are plenty of other Lotus Notes shops in other cities! I shouldn&#8217;t have FUD (Fear, Uncertainty, &amp; Doubt) about Lotus Notes.</p>
<p>Then I got curious&#8230; what is the percentage of Lotus Notes jobs compared to jobs that contain the keyword &#8220;Outlook.&#8221; My results were a bit frightening.</p>
<table style="border-collapse: collapse; width: 172pt;" border="0" cellspacing="0" cellpadding="0" width="229">
<col style="width: 76pt;" width="101"></col>
<col style="width: 48pt;" span="2" width="64"></col>
<tbody>
<tr style="height: 15pt;" height="20">
<td style="height: 15pt; width: 124pt;" colspan="2" width="165" height="20"><strong>Lotus vs Outlook</strong></td>
<td style="width: 48pt;" width="64"></td>
</tr>
<tr style="height: 15pt;" height="20">
<td style="height: 15pt;" height="20"><strong>City</strong></td>
<td><strong>Lotus</strong></td>
<td><strong>Outlook</strong></td>
</tr>
<tr style="height: 15pt;" height="20">
<td style="height: 15pt;" height="20">Milwaukee</td>
<td align="right">6</td>
<td align="right">56</td>
</tr>
<tr style="height: 15pt;" height="20">
<td style="height: 15pt;" height="20">Chicago</td>
<td align="right">29</td>
<td align="right">174</td>
</tr>
<tr style="height: 15pt;" height="20">
<td style="height: 15pt;" height="20">San Francisco</td>
<td align="right">33</td>
<td align="right">138</td>
</tr>
<tr style="height: 15pt;" height="20">
<td style="height: 15pt;" height="20">Seattle</td>
<td align="right">7</td>
<td align="right">142</td>
</tr>
<tr style="height: 15pt;" height="20">
<td style="height: 15pt;" height="20">New York</td>
<td align="right">55</td>
<td align="right">363</td>
</tr>
<tr style="height: 15pt;" height="20">
<td style="height: 15pt;" height="20">Houston</td>
<td align="right">19</td>
<td align="right">190</td>
</tr>
<tr style="height: 15pt;" height="20">
<td style="height: 15pt;" height="20">United Kingdom</td>
<td align="right">77</td>
<td align="right">569</td>
</tr>
</tbody>
</table>
<p><a href="http://codepress.net/b/wp-content/uploads/2009/07/barchart_lotusoutlook.jpg"><img class="alignnone size-full wp-image-386" title="barchart_lotusoutlook" src="http://codepress.net/b/wp-content/uploads/2009/07/barchart_lotusoutlook.jpg" alt="barchart_lotusoutlook" width="497" height="303" /></a></p>
<p>To be fair&#8230; this data is terribly unreliable. For instance&#8230; doing a search for the word &#8220;sales&#8221; in Milwaukee returns 470 jobs. Many employers must not list their email system in the job description. Maybe companies that use Lotus Notes figure the software is easy enough to use so it is not listed as a job requirement.</p>
<p>Would I use these numbers to claim I know the market-share of Outlook vs Lotus Notes? No&#8230; I would not. Do these numbers worry me? Yes.</p>
]]></content:encoded>
			<wfw:commentRss>http://codepress.net/b/2009/07/13/simple-research-lotus-notes-vs-outlook/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
