When customer service sucks - Star Alliance
Posted by Stephan H Wissel on 30 April 2009 | Comments (1) | categories: Travel
Usability - Productivity - Business - The web - Singapore & Twins
Posted by Stephan H Wissel on 30 April 2009 | Comments (1) | categories: Travel
Posted by Stephan H Wissel on 24 April 2009 | Comments (0) | categories: After hours
Posted by Stephan H Wissel on 24 April 2009 | Comments (2) | categories: Show-N-Tell Thursday SYWTBADD
Posted by Stephan H Wissel on 21 April 2009 | Comments (1) | categories: Software
FTBasePath=d:\full_text
to the notes.ini and run updall -f
. Your 100 user server won't notice. Large environments will benefitPosted by Stephan H Wissel on 21 April 2009 | Comments (10) | categories: IBM Notes Lotus Notes Show-N-Tell Thursday
Posted by Stephan H Wissel on 19 April 2009 | Comments (4) | categories: After hours
I spend the past few weeks reviewing code in Lotus Notes applications. While the robustness of the platform amazed me, the code I saw didn't (short of that one form with 1932 fields and 212 @DBLookups).There seems to be a common lack of coding quality among corporate LotusScript developers.
I hear: "C'mon what is your problem? The code is working."
I reminds me of the guy who jumped from the 88 story building stating "So far everything is fine" when falling past the 10th floor. Unfortunately very often the person who writes the code (being a contractor) doesn't have to maintain it, so bad engineering kicks in.
When you write code you should make one base assumption: "The guy who will have to maintain your code is an armed maniac and has your address".
Sadly the statement "It is working" neglects the most basic principle of software engineering:
we don't write code for machine, we write code for humans to understand.
Machines don't "understand" code, they just execute it. Enough of the rant, what needs to be done, what makes good code?
In a nutshell: decomposition. Decomposition is a fancy word for breaking down tasks into smaller units until a unit solves exactly one problem. The recommended approach for this is top-down development.
The Stanford Computer Engineering class uses your morning routine as example. The big task is "Morning routine".
Morning routine can be broken down into: Get out of bed, morning hygiene, breakfast, get to work. These tasks can be further broken down, lets take breakfast as example (Stanford uses the morning hygiene, so you have 2 now): Prepare Breakfast, Eat Breakfast, Read Newspaper.
Prepare Breakfast can be broken down to: Kiss wife, make coffee, make eggs, get juice, make toast.
Make coffee can be broken down to: get water, get coffee powder, fill machine, boil coffee. Get coffee powder can be broken down into: get box with beans, fill grinder, grind, get grinded powder.And so on.
Whatever programming language you use (even in COBOL) you could just write down in natural language what you do and then implement the sub routine:
Sub Breakfast
PrepareBreakfast
EatBreakfast
ReadNewsFeed
End Sub
Sub PrepareBreakfast
Do until sheIsSmiling
sheIsSmiling = KissSWMBO
End Do
MakeCoffee 2
MakeEggs 4
MakeToast 2
End Sub
There are a number of tips (lifted from the Stanford lesson without asking) around decomposition:
PERFORM makeMoney UNTIL rich [Fullstop]
)As usual YMMV
Posted by Stephan H Wissel on 19 April 2009 | Comments (0) | categories: Software SYWTBADD
Posted by Stephan H Wissel on 18 April 2009 | Comments (0) | categories: After hours
Posted by Stephan H Wissel on 15 April 2009 | Comments (4) | categories: Show-N-Tell Thursday
Option Public Option Declare '/**' * ' * FieldAccess is a universal class to manage large amount of values put into text fields ' * (text, names, readers, authors etc. ' * it manages these large amount by splitting reader names into multiple fields to overcome ' * the 32k size limit. New fields are created as needed. ' * Good for 62500 entries ' * ' * v0.1 2009-03-20 : notessensei@sg.ibm.com '**/ '// Important: This class doesn't contain production quality error handling, you need to add '// that for production use. Use OpenLog for best results! Public Class FieldAccess Private AccessFieldName As String 'The base name for the Reader field Private maxFieldEntries As Integer 'The maximum number of entries per reader field Private maxNumOfFields As Integer 'Limit the number of fields, to avoid mising data in views Private maxTotal As Integer 'The maximum number of names in total Private curTotal As Integer 'The current number of entries Private curFieldMembers List As String 'The list of current Reader entries Private fieldCount As Integer 'The current number of fields Private initialized As Boolean 'Has the list of names been initialized Private doc As NotesDocument 'The current document Private fieldType As Integer 'Text, names, reader, author Sub new (curDoc As NotesDocument ) Set Me .doc = curDoc Me .AccessFieldName = "Field" Me .maxFieldEntries = 500 Me .maxNumOfFields = 10 'Adjust as needed Me .initialized = False Me .fieldType = 0 'No special type End Sub 'Need to set the field Name Public Property Set fieldName As String If Me .AccessFieldName < > fieldName Then Me .AccessFieldName = fieldName Me .initialized = False End If End Property Public Property Get FieldName As String fieldName = Me .AccessFieldName End Property 'How many entries are in the names field right now Public Property Get count As Integer If Not Me .initialized Then Me .initializeFields End If count = Me .curTotal End Property 'Add a entry to the value list Public Sub addEntry (entryToAdd As String ) If Not Me .initialized Then Me .initializeFields End If If Not Iselement ( Me .curFieldMembers (entryToAdd ) ) Then If Me .curTotal = Me .maxFieldEntries * Me .maxNumOfFields Then Error 8000 'We throw an error Else Me .curFieldMembers (entryToAdd ) = entryToAdd Me .curTotal = Me .curTotal + 1 End If End If End Sub 'Bulk adding of entries. Suitable to pull in entries from getItemValues
Posted by Stephan H Wissel on 15 April 2009 | Comments (2) | categories: Show-N-Tell Thursday
RFC | Description | Domino | Remarks |
---|---|---|---|
RFC 1123 | Requirements for Internet Hosts Application and Support (STD 3) | Yes | |
RFC 1870 | SMTP Service Extension for Message Size Declaration (obsoletes: RFC 1653) | Yes | |
RFC 2476 | Message Submission Obsolete | see RFC 4409 below. | |
RFC 2505 | AntiSpam Recommendations for SMTP MTAs (BCP 30) | Yes | |
RFC 5321 | The Simple Mail Transfer Protocol (obsoletes RFC 821 aka STD 10, RFC 974, and RFC 1869, RFC 2821) | Yes | |
RFC 5322 | Internet Message Format (obsoletes RFC 822 aka STD 11, and RFC 822) | Yes | |
RFC 2920 | SMTP Service Extension for Command Pipelining (STD 60) | Yes | |
RFC 3030 | SMTP Service Extensions for Transmission of Large and Binary MIME Messages | No | |
RFC 3207 | SMTP Service Extension for Secure SMTP over Transport Layer Security (obsoletes RFC 2487) | Yes | |
RFC 3461 | SMTP Service Extension for Delivery Status Notifications (obsoletes RFC 1891) | Yes | |
RFC 3462 | The Multipart/Report Content Type for the Reporting of Mail System Administrative Messages (obsoletes RFC 1892) | Yes | |
RFC 3463 | Enhanced Status Codes for SMTP (obsoletes RFC 1893 ) | Yes | |
RFC 3464 | An Extensible Message Format for Delivery Status Notifications (obsoletes RFC 1894) | Yes | |
RFC 3834 | Recommendations for Automatic Responses to Electronic Mail | Yes | |
RFC 4409 | Message Submission for Mail (obsoletes RFC 2476) | Partial | Domino can be configured to act as an MSA, but is not strictly compliant (e.g. does not qualify unqualified domains in addresses) |
RFC 4952 | Overview and Framework for Internationalized Email | This is not a standard - only an informational document | |
RFC 4954 | SMTP Service Extension for Authentication (obsoletes RFC 2554) | Yes | |
RFC 5068 | Email Submission Operations: Access and Accountability Requirements (BCP 134) | Yes | This is not a standard - it is a document describing a set of operational best practices. Domino can be configured to support these practices |
Posted by Stephan H Wissel on 13 April 2009 | Comments (5) | categories: Show-N-Tell Thursday
Posted by Stephan H Wissel on 12 April 2009 | Comments (0) | categories: Software
forms/form,single,/d:database/d:form forms/subform,single,/d:database/d:subform forms/page,single,/d:database/d:page misc/frameset,single,/d:database/d:frameset views/view,single,/d:database/d:view views/folder,single,/d:database/d:folder sharedstuff/field,single,/d:database/d:sharedfield sharedstuff/action,single,/d:database/d:sharedactions resources/image,single,/d:database/d:imageresource resources/applet,single,/d:database/d:appletresource code/agent,single,/d:database/d:agent code/webservice,single,/d:database/d:webservice code/scribtlibrary,single,/d:database/d:scriptlibrary sharedstuff/column,single,/d:database/d:sharedcolumn misc/outline,single,/d:database/d:outline code/databasescript,single,/d:database/d:databasescript misc/helpusingdocument,single,/d:database/d:helpusingdocument misc/helpaboutdocument,single,/d:database/d:helpaboutdocument resources/dataconnection,single,/d:database/d:dataconnection resources/fileresource,single,/d:database/d:fileresource resources/stylesheetresource,single,/d:database/d:stylesheetresource resources/db2accessview,single,/d:database/d:db2accessviewHappy extracting. I'll continue that series with some of the stylesheets we have written. Stylesheets are not only good for reports, but also to whip your code into shape. Stay tuned.
Posted by Stephan H Wissel on 11 April 2009 | Comments (0) | categories: DXLMagic Lotusphere Show-N-Tell Thursday
Posted by Stephan H Wissel on 10 April 2009 | Comments (8) | categories: Show-N-Tell Thursday
Posted by Stephan H Wissel on 09 April 2009 | Comments (1) | categories: XPages
Posted by Stephan H Wissel on 07 April 2009 | Comments (1) | categories: IBM - Lotus
Posted by Stephan H Wissel on 04 April 2009 | Comments (7) | categories: XPages
Posted by Stephan H Wissel on 03 April 2009 | Comments (0) | categories: IBM Notes Lotus Lotus Notes
Posted by Stephan H Wissel on 02 April 2009 | Comments (6) | categories: IBM - Lotus
Posted by Stephan H Wissel on 02 April 2009 | Comments (0) | categories: IBM Notes Lotus Notes
Posted by Stephan H Wissel on 02 April 2009 | Comments (1) | categories: After hours
Posted by Stephan H Wissel on 01 April 2009 | Comments (11) | categories: IBM - Lotus
Posted by Stephan H Wissel on 01 April 2009 | Comments (7) | categories: XPages
Posted by Stephan H Wissel on 01 April 2009 | Comments (0) | categories: IBM