329 Lotus blogs updated hourly. Who will post next? Home | Downloads | Events | Jobs | Twitter | Bookmarks | Pods | Blogs | Search | myPL | About 
 
Latest 7 Posts
Mapping Document Collections To Views | Blog
Thu, Apr 11th 2013 239
Making Google Apps For Business Behave Like a Mail Client | Blog
Wed, Apr 3rd 2013 219
Documenting Your LotusScript Classes | Blog
Wed, Mar 27th 2013 282
The Perfect Desk Quest - 2013 Update | Blog
Tue, Mar 26th 2013 243
Updating Glyphicons in Bootstrap | Blog
Thu, Mar 21st 2013 218
Easy Access to Sub-Collections of the DocumentWrapper Class | Blog
Wed, Mar 20th 2013 168
Easy Access to Sub-Collections of the DocumentWrapper Class | Blog
Wed, Mar 13th 2013 196
Top 10
The Hidden Cost of Holidays | Blog
Thu, Jun 14th 2012 844
Laplets are the Way Forward | Blog
Thu, Dec 20th 2012 721
How To Remove Voice Command From Galaxy S2 Without Rooting | Blog
Tue, Jul 10th 2012 608
How Well Do You Know LotusScript? | Blog
Wed, Jan 30th 2013 560
Are Notes Views Still Relevant? | Blog
Tue, Feb 19th 2013 526
Super Useful Set of LotusScript Wrapper Classes | Blog
Mon, Feb 4th 2013 430
How to Do Infinite Scrolling in Domino | Blog
Wed, Mar 6th 2013 428
Be Careful With Custom HTML Attributes (Dojo) | Blog
Mon, Dec 10th 2012 419
Infinite Scrolling Views in Domino | Blog
Thu, Feb 21st 2013 401
Extending The LotusScript Wrapper Classes | Blog
Fri, Mar 8th 2013 376


My Coming of Age (as a Developer)
   

The other week I posted on Google+ about the warm fuzzy feeling I'd gotten when writing this line of code:

public class Poster extends Entry implements IEntry

Why so? Because all the classes involved were of my own making. Finally things had started to come clear to me; I understood the importance of class inheritance and the role of implementable classes.

While I'd kind of understood this for a while it wasn't until it all clicked and I actually did it for myself that I could truly say it really made complete sense.

The Poster class the code refers to lives inside a Flex-based app I've been working on for a while now that lets school kids create artwork from photos they've taken by adding their own words to them. The app is the closest I've come to making actual software. 

As well as posters they can create a Calendar, which is also an Entry-based class. Posters and Calendars both consist of one or many pages. For this there's a Page class, which has a property that defines what size of paper it's based on. Ultimately the kids will print out their entries, so the paper size is important, so as to get the proportion of width/height right.

In order to define the paper sizes available I created another class called PaperSize, which you can see below (the code is ActionScript 3, but is a lot like Java/most other languages).

package 
{
    public final class PaperSize{
        
        public static const A4:PaperSize = new PaperSize(595, 842, "A4", "A4 (International)");
        public static const Letter:PaperSize = new PaperSize(651, 842, "Letter", "Letter (US)");
        
        public var width:int;
        public var height:int;
        public var name:String;
        public var description:String;
        
        public function PaperSize(width:int, height:int, name:String, description:String){
            this.width = width;
            this.height = height;
            this.name = name;
            this.description = description;
        }
        
        public static function AllSizes():ArrayCollection{
            return new ArrayCollection([
                PaperSize.Letter,
                PaperSize.A4
            ]);
        }
        
        public static function get Default():PaperSize{
            return PaperSize.Letter;
        }
        
        public static function findByName(name:String):PaperSize{
            for each(var size:PaperSize in AllSizes()){
                if (size.name.toLowerCase()==name.toLowerCase()){
                    return size;
                }
            }
            return Default;
        }
    }
}

Again, the fact that I wrote the above code un-aided and without any kind of copy-pasting off the internets was nothing short of a revelation for me. Once again I got that nice feeling, knowing that I'd written the class all on my ownsome.

I'm not saying the above PaperSize class is perfect, but it works well for me and does everything I need it to and in a way classes were meant to (at least as I understand it).

I'm sure you guys can offer suggestions to improve it (and I welcome them) but my point here is that I finally understand how and when to use static classes. Finally, it's all coming together.

It's not only writing the classes that give me a nice feeling. I get the feeling over and over again each time I refer to my classes and type-ahead popups, suggesting properties that I made appear there, as below:

image

With the class I can do things like:

page.height = PaperSize.A4.height;

or

paperSizePicker.dataProvider = PaperSize.AllSizes();
paperSizePicker.labelField = "description";

or

entry.paperSize = PaperSize.findByName(xml.@size);

The findByName() method comes in handy as each Entry gets stored as XML, so the students can come back and re-load/edit them at a later date. The XML holds the name of the paper size used and I can reload it when needed.

My point? Not sure really. As ever, just sharing my adventures in coding. Also wanted to share my excitement that - after 15 years as a "developer" - I can finally call myself a programmer without feeling too much like a fraudster.

What about you guys? Am I the only saddo who gets a kick out of seeing their own classes' properties and methods appear in code type-aheads when programming?

Click here to post a response



---------------------
http://www.codestore.net/store.nsf/unid/BLOG-20111005-0350
Oct 05, 2011
99 hits



Recent Blog Posts
239


Mapping Document Collections To Views | Blog
Thu, Apr 11th 2013 4:00a   Jake Howlett
It's now a couple of months since I wrote about a Super Useful Set of LotusScript Wrapper Classes, which I've written about on and off since February. Today I want to share a few more extensions I've made to them, which help massively when it comes to getting documents from views. Imagine the following use scenario: Dim factory As New CustomerFactory() Dim coll As CustomerCollection 'Let's get a collection from a view Set coll = factory.GetAll() 'Or you could to this Set coll = factory [read] Keywords: domino lotusscript notes database
219


Making Google Apps For Business Behave Like a Mail Client | Blog
Wed, Apr 3rd 2013 4:16a   Jake Howlett
So, I mentioned that I've moved to a new PC and, for the first time in years, I didn't install a dedicated Mail client/app. Instead I'm using direct web access to Google Apps For Business (posh name for paid-for Gmail). The one thing I never liked about using Email in a browser is that I constantly close and re-open the browser. Thus, in effect, closing my email client, which I then have to remember to re-open. Now though I've made it seem like a real app. You can do this using Chrome's "a [read] Keywords: application email google
282


Documenting Your LotusScript Classes | Blog
Wed, Mar 27th 2013 4:00a   Jake Howlett
Just a quick LotusScript tip: Hopefully you've been inspired by my recent adventures in creating custom LotusScript classes. If so, you'll have noticed that, when creating your own properties and methods in these classes that they get their own comments added in. For example, if you type "property get foo as string" and then press return, you'll see something like this:%REM Property Get Foo Description: Comments for Property Get %END REM Property Get Foo As String End Property Domino De [read] Keywords: domino lotusscript properties
243


The Perfect Desk Quest - 2013 Update | Blog
Tue, Mar 26th 2013 6:20a   Jake Howlett
It must be time for another update on how my desk is evolving towards the elusive "perfect desk". Previous updates here. Here's my desk now, following a recent overhaul: The two main differences from before: The Lenovo T400 laptop and its docking station have gone and the left-most monitor has moved positions to be on the right. My desk needs to not only keep up with the way I work, but also the changes of the times. I decided it was time I got "with the times" and "embrace the cloud" an [read] Keywords: domino lotus notes database development email laptop microsoft office outlook server vm
218


Updating Glyphicons in Bootstrap | Blog
Thu, Mar 21st 2013 4:00p   Jake Howlett
Using Bootstrap, whenever I want to an icon to an element, I simply write HTML like this: Add New And I get something like this: The choice of icons is documented here and the icons themselves are based on Glyphicons "halflings". All is good. However, recently I found myself wanting to use an icon to show that a document had some attachments. Naturally, I wanted a paperclip. Just like a magnifying glass denotes searching, a paperclip denotes a file attachment. Who knows why! To my sur [read] Keywords: css twitter
168


Easy Access to Sub-Collections of the DocumentWrapper Class | Blog
Wed, Mar 20th 2013 12:30p   Jake Howlett
My favourite feature of the Wrapper Classes I keep going on about is the ready access they can give to any given class's related sub-classes. For example, let's say you have an object based on the Customer class and you want to find all their Invoices. Wouldn't it be nice to write code like this in a WQO agent:Dim customer As Customer, invoice As Invoice Set customer = New Customer(web.document) If customer.Invoices.Count > 0 Then Set invoice = customer.Invoices.getFirst() While Not i [read] Keywords: agent properties




196


Easy Access to Sub-Collections of the DocumentWrapper Class | Blog
Wed, Mar 13th 2013 4:20a   Jake Howlett
My favourite feature of the Wrapper Classes I keep going on about is the ready access they can give to any given class's related sub-classes. For example, let's say you have an object based on the Customer class and you want to find all their Invoices. Wouldn't it be nice to write code like this in a WQO agent: Dim customer As Customer, invoice As Invoice Set customer = New Customer(web.document) If customer.Invoices.Count > 0 Then Set invoice = customer.Invoices.getFirst() While Not [read] Keywords: agent properties
229


Creating New Documents Based on the DocumentWrapper Class | Blog
Mon, Mar 11th 2013 7:20a   Jake Howlett
So far, we've seen how to "wrap" an existing document inside a custom class, which is based on the DocumentWrapper subclass. But the document we wrap doesn't have to exist. We can use the DocumentWrapper classes to handle creation of new documents. Imagine that, anywhere in your LotusScript, you could write this: Set invoice = New Invoice(web.database.CreateDocument) invoice.Number = factory.GetNextInvoiceNumber() invoice.Value = 12345.98 invoice.Save() Wouldn't that be cool!? It's quite [read] Keywords: lotusscript database properties
376


Extending The LotusScript Wrapper Classes | Blog
Fri, Mar 8th 2013 3:03a   Jake Howlett
The wrapper classes I blogged about in February went down a lot better than I thought they might. So, taking it further. Let's extend the DocumentWrapper class some more. Since first writing about them  on here I've been busy using and extending them as I go. Here are a few examples of some of the properties I've added Simple Helper Properties Some very simple properties: WebLink, UNID and IsNew. Property Get WebLink As String WebLink = "/" + Replace(web.database.Filepath, "", "/" [read] Keywords: domino lotusscript database properties
428


How to Do Infinite Scrolling in Domino | Blog
Wed, Mar 6th 2013 3:00a   Jake Howlett
Last week I linked to a Domino-based infinite-scrolling view demo and promised I'd write up how I did it. Even though the reaction to the demo was mixed I'm a man of my word, so here goes. It always surprises (worries!) me when I'm asked to either share a downloadable copy of a demo or write a how-to about it. Particularly when it's something that's all but completely web-based. The code is there to see; just a click away. That said, in this case, unless you're familiar with jQuery and/or [read] Keywords: agent domino lotusscript notes ajax application development server




Created and Maintained by Yancy Lent - About - Blog Submission - Suggestions - Change Log - Blog Widget - Advertising - Mobile Edition