264 Lotus blogs updated hourly. Who will post next? Home | Blogs | Search | About 
 
Latest 7 Posts
Building on ODA's Maven-ization
Tue, Mar 31st 2015 9
Auto-OSGi-ifying Maven Projects
Sat, Mar 28th 2015 18
Tycho and Tribulations
Sat, Mar 14th 2015 11
Quick Tip: Wrapping a lotus.domino.Document in a DominoDocument
Tue, Mar 3rd 2015 11
Be a Better Programmer, Part 5
Fri, Jan 30th 2015 10
I Hadn't Thought I'd End The Year Getting Into WebSphere
Wed, Dec 31st 2014 11
Musing About Web App Structure
Tue, Dec 16th 2014 4
Top 10
Auto-OSGi-ifying Maven Projects
Sat, Mar 28th 2015 18
Arbitrary Authentication with an nginx Reverse Proxy
Mon, Sep 22nd 2014 13
The Collections Framework as Education
Sun, Apr 6th 2014 11
Domino and SSL: Come with Me If You Want to Live
Wed, Sep 24th 2014 11
I Posted My WrapBootstrap Ace Renderkit
Tue, Sep 30th 2014 11
I Hadn't Thought I'd End The Year Getting Into WebSphere
Wed, Dec 31st 2014 11
Quick Tip: Wrapping a lotus.domino.Document in a DominoDocument
Tue, Mar 3rd 2015 11
Tycho and Tribulations
Sat, Mar 14th 2015 11
Expanding your use of EL: Mea Culpa
Fri, May 2nd 2014 10
Meandering Musing About Views
Sun, Jul 20th 2014 10


Jesse Gallagher
Blog Title frostillic.us
Blog URL http://frostillic.us
RSS Feed http://unenc.frostillic.us/f.nsf/feed.xml
Validate Feed feedvalidator.org or validator.w3.org
Feed Last Checked Mar 31, 2015 7:40:51 PM EST. Realtime Update:
Location Lansdale, PA, USA


Recent Blog Posts
9
Building on ODA's Maven-ization
Tue, Mar 31st 2015 7:30p   Jesse Gallagher
Over the weekend, I took a bit of time to apply some of my hard-won recent Maven knowledge to a project I wish I had more time to work with lately: the ODA. The development branches have been Maven-ized for half a year or so, but primarily just to the point of getting the compile to work. Now that I know more about it, I was able to go in and make great strides towards several important goals. As a preliminary note: don't take my current implementations as gospel. There are parts that wi
18
Auto-OSGi-ifying Maven Projects
Sat, Mar 28th 2015 3:15p   Jesse Gallagher
In my last post, I discussed some of the problems that you run into when dealing with Maven projects that should also be OSGi plugins, particularly when you're mixing OSGi and non-OSGi projects in the same Maven build (in short: don't do that). Since then, things have smoothed out, particularly when I split the OSGi portion out into another Maven build, allowing it to consume the "core" artifacts cleanly, without the timing issue described previously. But I ran into another layer of th
11
Tycho and Tribulations
Sat, Mar 14th 2015 2:02p   Jesse Gallagher
For the last few weeks, a large part of my work has involved dealing with Maven, and much of that also involves Eclipse. It's been quite the learning experience - very frustrating much of the time, but valuable overall. In particular, any time OSGi comes into play, things get very complicated and arcane, in non-obvious ways. Fair warning: this blog post will likely start out as an even-keeled description of the task at hand and descending into just ranting about Maven. The Actors To sta
11
Quick Tip: Wrapping a lotus.domino.Document in a DominoDocument
Tue, Mar 3rd 2015 3:13p   Jesse Gallagher
In the XPages environment, there are two kinds of documents: the standard Document class you get from normal Domino API operations and DominoDocument (styled NotesXspDocument in SSJS). Many times, these can be treated roughly equivalently: DominoDocument has some (but not all) of the same methods that you're used to from Document, such as getItemValueString and replaceItemValue, and you can always get the inner Document object with getDocument(boolean applyChanges). What's less common,
10
Be a Better Programmer, Part 5
Fri, Jan 30th 2015 9:02p   Jesse Gallagher
Inevitably, as a programmer, you're going to run into a situation where you're faced with a seemingly-impossibly-daunting, whether it's because the task is large or because it's particularly arcane. While sometimes it's just going to be a long slog (some code bases are just monsters), there's usually some underlying conceit that brings everything together. Figure Out How Things Are Simple No matter how crazily complex or impossible-seeming a programming task can be, it's useful to
11
I Hadn't Thought I'd End The Year Getting Into WebSphere
Wed, Dec 31st 2014 2:11p   Jesse Gallagher
...yet here we are. It's been a very interesting week in ODA circles. It started with Daniele Vistalli being curious if it was possible to run the OpenNTF Domino API on WebSphere, specifically the surprisingly-friendly Liberty profile. And not just curious: it turned out he had the chops to make it happen. Before too long, with the help of the ODA team, he wrote an extension to the WebSphere server that spins up native (lotus.domino.local) Notes RPC connections using Notes.jar and thus
4
Musing About Web App Structure
Tue, Dec 16th 2014 5:17p   Jesse Gallagher
I've been giving a lot of thought lately to how I feel about different structures for web apps. Specifically, in this case, the "structure" I'm thinking about is the "client-server" balance in the app itself and the associated method of data access. The impetus has been my minor fiddling with Angular over the past half a year or so. If you're not familiar with it, Angular is a client-side JavaScript framework focused on building full-fledged apps that run in the browser. The way it
6
Figuring Out Maven: Group/Artifact Names and Repositories
Mon, Dec 8th 2014 9:34p   Jesse Gallagher
As I fiddle with Maven, I figure it may be useful to share my growing understanding of it - or at least preliminary assumptions. Any of these posts should not be taken as a true guide to learning Maven, since I'm just muddling through myself, but I suspect that my path will be similar to a lot of other Domino developers'. The first thing I feel I grokked about Maven is its concept of repositories, mostly because it's the easiest concept I've run across. Repositories in Maven seem to m
9
How I Maven-ized My Framework
Mon, Dec 8th 2014 9:11a   Jesse Gallagher
This past weekend, I decided to take a crack at Maven-izing the frostillic.us Framework (I should really update the README on there). If you're not familiar with it, Maven is a build system for Java projects, basically an alternative to the standard Eclipse way of doing things that we've all gotten pretty used to. Though I'm not in a position to be a strong advocate of it, I know that it has advantages in dependency-resolution and popularity (most Java projects seem to include a "you c
4
Using the ODA Design API for File-Resource Manipulation
Wed, Nov 19th 2014 5:11p   Jesse Gallagher
As is characteristic of his blog, Sven Hasselbach recently posted two interesting posts on using the NAPI classes in the XPages runtime to manipulate files in the WebContent folder. If you haven't read the posts, I suggest you do so now, because it's knowledge that is very good to have. The NAPI classes are chock full of cheating sorcery. But the point of this post here is a bit of me-too-ism. Which is to say: the OpenNTF Domino API has you covered on this front. The API's Design packag
6
Factories in XPages
Wed, Nov 12th 2014 5:18p   Jesse Gallagher
In my last post, I intimated that I wanted to write a post covering the concept of factories in XPages, or at least the specific kind in question. This is that post. The term "factory" covers a number of meanings, and objects named this way crop up all over the place (ODA has one, for example). The kind I care about today are those defined in an XspContributor object in an XPages plugin. These factories are generally (exclusively, perhaps) used for the purpose of generating adapters: as
9
Property Resolution in XPages EL
Tue, Nov 11th 2014 10:19a   Jesse Gallagher
Reading Devin Olson's recent series on EL processing put me in the mood to refresh and fill out my knowledge of how that stuff actually happens. A while back, I made a small foray of my own into explaining how property resolution in XPages EL works, one which I followed up with a mea culpa explaining that I had left out a few additional supported types. As happens frequently, that still didn't cover the full story. Before getting to what I mean by that, I'll step back to an overview of
4
Using "Verboten" Property Names in Custom Controls
Sun, Nov 2nd 2014 8:11a   Jesse Gallagher
In an attempt to save you from yourself, Designer prevents you from naming your custom control properties after SSJS keywords such as "do" and "for". This is presumably because a construct like compositeData.for would throw both a syntax error in SSJS and the developer into a tizzy. However, sometimes you want to use one of those names - they're not illegal in EL, after all, and even SSJS could still use compositeData['for'] or compositeData.get("for") to access the value. Fortun
4
CocoaLove Reflection
Sun, Oct 26th 2014 5:15p   Jesse Gallagher
This weekend, I attended CocoaLove a new Mac/iOS-development-related conference held in Philadelphia. Though my Cocoa resume consists of doing various tutorials every few years for the last decade or so, the location, concept, and speaker lineup were impossible to resist. The upshot: this was a great conference. As the tagline – "A conference about people, not tech." – indicates, the sessions weren't technical or even generally about programming as such. Instead, it was a bit more i
8
A Welcome SSL Stay of Execution
Tue, Oct 21st 2014 3:11p   Jesse Gallagher
As you likely know from the torrent of posts on Planet Lotus on the topic, IBM announced a hopefully-imminent pair of updates to cover the two main SSL issues that have come to the fore recently: lack of SHA-2 support and the POODLE vulnerability in SSLv3. This is welcome indeed! Personally, I'm going to stick with the nginx approach for HTTP, even in simple setups, because I've found the extra features you can get (and the promising new ones I haven't tried) to be a dramatic
3
Some Notes on Developing with the frostillic.us Framework
Thu, Oct 9th 2014 5:12p   Jesse Gallagher
Now that I have a few apps under my belt, I've been getting a better idea of the plusses and minuses of my current development techniques - the frostillic.us Framework combined with stock controls + renderers. This post is basically a mostly-unordered list of my overall thoughts on the current state. Component binding is absolutely the way to go. This pays off in a number of ways, but just knowing that the component is pointed unambiguously at a model property - and thus getting its field
3
Building an App with the frostillic.us Framework, Part 7
Tue, Oct 7th 2014 6:12p   Jesse Gallagher
Well, it's been much longer than planned, and this topic isn't actually particularly groundbreaking, but the series returns! Define the data model Create the view and add it to an XPage Create the editing page Add validation and translation to the model Add notification to the model Add sorting to the view Basic servlet REST with Angular.js One of the edge features of the Framework is that it assists in writing DesignerFacesServlet servlets - which are sort of like XAgents but written dir
6
NotesIn9 Appearance: Custom Renderers
Thu, Oct 2nd 2014 7:12p   Jesse Gallagher
In a bout of unintentional timing, Dave Leedy posted an episode of NotesIn9 I recorded about custom renderers. This should pair nicely with my last post - the video provides an explanation for what renderers are, how to attach them to your components, and an example of a basic renderer for a widget container. So if you're interested in going down that path (which you should be!), perhaps the video will help. In it, I recommend looking at the source of Bootstrap4XPages, which remai
11
I Posted My WrapBootstrap Ace Renderkit
Tue, Sep 30th 2014 5:12p   Jesse Gallagher
Since I realized there was no reason not to and it could be potentially useful to others, I tossed the renderkit I use for the WrapBootstrap Ace theme up on GitHub: https://github.com/jesse-gallagher/Miscellany As implied by the fact that it's not even a top-level project in my own GitHub profile, there are caveats: The theme itself is not actually included. That's licensed stuff and you'd have to buy it yourself if you want to use it. Fortunately, it's dirt cheap for normal use.
5
A Note About Installing the OpenNTF API RC2 Release
Fri, Sep 26th 2014 12:16p   Jesse Gallagher
In the latest release of the OpenNTF Domino API, the installation process has changed a bit, which is most notable for Designer. The reason for this is due to the weird requirements in Designer for properly getting source and documentation working. When downloading the file, instead of the previous Eclipse update sites, there are two Update Site NSFs: one for Designer and one for Domino. There are a couple ways you can use these: If you're already using Update Sites for Designer or Domin
11
Domino and SSL: Come with Me If You Want to Live
Wed, Sep 24th 2014 1:12p   Jesse Gallagher
Looking at Planet Lotus and Twitter the last few weeks, it's impossible to not notice that the lack of SHA-2 support in Domino has become something of A Thing. There has been some grumbling about it for a while now, but it's kicked into high gear thanks to Google's announcement of imminent SHA-1 deprecation. While it's entirely possible that Google will give a stay of execution for SHA-1 when it comes to Chrome users (it wouldn't be the first bold announcement they quietly don
13
Arbitrary Authentication with an nginx Reverse Proxy
Mon, Sep 22nd 2014 4:12p   Jesse Gallagher
I had intended that this next part of my nginx thread would cover GeoIP, but that will have to wait: a comment by Tinus Riyanto on my previous post sent my thoughts aflame. Specifically, the question was whether or not you can use nginx for authentication and then pass that value along to Domino, and the answer is yes. One of the aforementioned WebSphere connector headers is $WSRU - Domino will accept the value of this header as the authenticated username, no password required (it will als
8
Adding Load Balancing to the nginx Setup
Sat, Sep 20th 2014 8:16a   Jesse Gallagher
In an earlier post, I went over the basic setup of installing nginx on a single Domino server to get the basic benefits (largely SSL). Next, it's time to expand the setup to have one nginx server in front of two Domino servers. The concept is relatively straightforward: when an HTTP request comes in, nginx will pick one of the back-end servers it knows about and pass the request along to that. That allows for balancing the load between the two (since the act of processing the request is m
7
Generating JSON in XPages Applications
Thu, Sep 18th 2014 3:13p   Jesse Gallagher
This topic is fairly well-trodden ground, but there's no harm in trodding it some more: methods of producing JSON in the XPages environment. Specifically, this will be primarily about the IBM Commons JSON classes, found in com.ibm.commons.util.io.json. The reason for that choice is just that they ship with Domino - other tools (like Gson) are great too, and in some ways better. Before I go further, I'd like to reiterate a point I made before: Never, ever, ever generate code without prope
9
Setting up nginx in Front of a Domino Server
Thu, Sep 18th 2014 10:18a   Jesse Gallagher
As I've mentioned before and now presented on, I'm a big proponent of using a reverse proxy in front of Domino. There are numerous benefits to be gained, particularly when you expand your infrastructure to include multiple back-end servers. But even in the case of a single server, I've found it very worthwhile to set up, and not overly complicated. This example uses nginx and Domino on Ubuntu Linux, but the ideas and some configuration apply much the same way on other OSes and with othe
4
Designer Experiment and Feature Request: JSF Tools in Designer
Wed, Sep 17th 2014 4:12p   Jesse Gallagher
TL;DR: You can install JSF tools in Designer to help out quite a bit with faces-config.xml editing, but there are bugs that may require changes in Designer's code to fix. I was having a discussion about Andrew Magerman's recent on-point jeremiad about SSJS and the topic got to the difficulty of using Java in XPages if you don't already know the ropes - creating classes, managed beans, etc.. I looked around a bit for examples of how other tools do it, and I found this page on using the
5
Quick Tip: A View-Filtering Search Box
Tue, Sep 16th 2014 7:11p   Jesse Gallagher
One of the problems that crops up in some situations in XPages is the one described here: executing Ajax queries in too rapid a succession can cause the browser to cap them out until a full refresh. Depending on how you're encountering the problem, there may be a built-in solution: XSP controls that execute Ajax requests often have a throttling or latency parameter, and the same applies for "manual" JS widgets like Select2 (called "quietMillis" there). Another such situation is the to
10
The Basic Xots Tasklet in the Blog
Sat, Sep 6th 2014 7:12a   Jesse Gallagher
Continuing in my two-day spat of blog posts shamelessly containing "blog" in the title, I figured I'd mention how I'm using Xots for new-comment notifications. If you're not familiar with it, Xots is a recent addition to the OpenNTF Domino API (added in the recently-released M5 RC1 build), intended to replace both agents and DOTS. There's still more work to be done on the scheduling portion, but Xots is perfectly capable of running manually-created tasks in a similar manner to Threa
8
How I'm Handling URLs for the Blog
Fri, Sep 5th 2014 6:13p   Jesse Gallagher
As I mentioned in the introductory post for the blog, I'm putting my investigation into RequestCustomizerFactory classes to work in the blog. At its core, the point of what I'm doing is to allow me to write code like this: ...and have the generated link be something like: whatever The core of this is the ability of a RequestCustomizerFactory to specify a UrlProcessor that is used by basically every URL-generation routine in XPages to map the XSP-side URLs to their final HTML version.
3
New Blog Structure
Fri, Sep 5th 2014 3:13p   Jesse Gallagher
So I finally got around to re-doing my blog app after letting the previous one wither on the vine for years. The main things this new template has over the previous one are: A properly responsive design care of WrapBootstrap. Conveniently, it's the same design I use for our internal task-tracking app, so I had most of the renderers ready. Along those lines, the XSP structure is heavily based on standard/ExtLib components when at all possible, rather than putting the Bootstrap structure i
4
(Not) My Slide Decks From MWLUG
Tue, Sep 2nd 2014 6:14p   Jesse Gallagher
At this year's MWLUG, I presented two sessions: one on using nginx as a reverse proxy and load balancer, and one on structured XPages development. Normally, the next step would be to post the slides, but my decks aren't particularly useful on their own - they were small 8-slide affairs that mostly served as a memory assistance to me, one sight gag, and then a "Demo" slide where I switched to the normal screen for the actual code. So my plan instead is to blog with the details. The latter s
6
A Centralized Bean for Translation
Mon, Sep 1st 2014 2:12p   Jesse Gallagher
The normal method for doing translation in XPages is by using the built-in Designer tooling, which creates properties files for each language for each XPage in your app. This is okay, though it requires using Designer to update the properties (since apparently the translation happens as part of the build process). For the refresh of my blog I'm working on, I'm taking a different tack, inspired by the way a client does it and similar to how I do it in the Framework. Specifically, I have a cent
6
Quick Tip: Use Dojo Content Panes for Speedier Initial Page Loads
Mon, Aug 18th 2014 5:13p   Jesse Gallagher
The XPages Extension Library is full of hidden gems and one I particularly like keeping in my back pocket is the control. It's a fairly unassuming control; like the rest of the components in the "Dojo Layout" category, it takes its name and basic concept from the underlying Dijit. However, you don't have to use it in a full Dojo layout - and, in fact, all of the actual layout types have more-appropriate XSP components. Presumably, its initial use is to load content from a specified UR
4
My Sessions at MWLUG This Year
Mon, Aug 18th 2014 1:13p   Jesse Gallagher
As I mentioned at the end of this morning's post about SSL and reverse proxies, I'm going to be giving a session on using a reverse proxy in front of Domino at this year's MWLUG next week. Specifically, it will be one of two sessions, both on Friday: OS101: Load Balancing, Failover, and More With nginx I'll be discussing the general reasons why you would use a reverse proxy - not just the aforementioned SSL benefit, but also load balancing, failover, multi-app integration, new feature
6
Domino SSL and Reverse Proxies
Mon, Aug 18th 2014 7:12a   Jesse Gallagher
Domino's SSL stack has been long-in-the-tooth and awkward to deal with for a while. Until recently, this has mostly just resulted in the sort of stilted way you have to set up SSL keychains, using the Server Certificate Admin database initially and then "IKeyMan" more and more (specifically, an old version you need 32-bit Windows XP for, like a barbarian), but the job eventually got done. However, as a post from Steve Pitcher points out, this is becoming rapidly impractical. While I gen
6
Quicker Tip: Lowering XPage Build Overhead When Using Jars
Thu, Aug 14th 2014 1:13p   Jesse Gallagher
(Caveat: I don't actually know if this matters with the Jar design element in 9.0+, since the only times I've needed it are with clients using obsolete versions) If you use Jar files stored in an NSF in your build path with XPages apps, you've likely noticed that it makes your build times interminable, particularly if it's a large library. From what I can tell, Designer seems convinced that it must download the entire Jar file during every build, in order to find out what's inside of
7
Be a Better Programmer, Part 4
Thu, Aug 14th 2014 7:12a   Jesse Gallagher
This topic isn't, strictly speaking, in the same vein as the rest of this series; instead, it's more of a meandering "case study" sort of thing. But it has something of a unifying theme, if you'll bear with me: Be Mindful of Your Layer of Abstraction Basically everything about computers has to do with layers of abstraction, but what I have in mind at the moment is how it interacts with web programming. First, I'll dive into a bit of background. The original premise of HTML was that
5
Quick Tip: facetName-less Callbacks in XPages
Wed, Aug 13th 2014 5:12p   Jesse Gallagher
When you're setting up a Custom Control, you likely know by now that you can set up callback areas to add content to a specified place inside your CC content when it's rendered. They typically look something like this: Content Above Content Below You then drop content in there like so in your XPage: That works fine. However, you can benefit greatly by learning that both properties of the callback are optional. Leaving off the id isn't particularly interesting,
3
How I Learned to Stop Worrying and Love C Structs
Mon, Aug 4th 2014 8:12p   Jesse Gallagher
Since a large amount of on-site client time has put my framework work on hold for a bit, I figured I'd continue my dalliance in the world of raw item data. Specifically, what I've been doing is filling out the collection of structs with Java wrappers, particularly in the "cd" subpackage. For someone like me who has only done bits and pieces of C over the years, this is a fruitful experience, particularly since I'm dealing with just the core concept of the Notes API data structures wit
7
Delving Into NSF Raw Item Data
Tue, Jul 29th 2014 11:12a   Jesse Gallagher
For the Design package of the OpenNTF Domino API, one of my goals was to add the ability to access the supporting structures around XPages: file resources, images, CSS, and, crucially, Java classes and the XPages themselves. My weapon of choice for the whole API is DXL, and this covered the job nicely for most of those aspects. DXL has clean representations for the first three in the list: specialized XML formats containing the pertinent metadata and a single BASE64-encoded block of the ac
3
Building an App with the frostillic.us Framework, Part 6
Wed, Jul 23rd 2014 12:12p   Jesse Gallagher
Define the data model Create the view and add it to an XPage Create the editing page Add validation and translation to the model Add notification to the model Add sorting to the view Basic servlet REST with Angular.js Add sorting to the view This step in the framework example is very similar to the second in that there's nothing particularly Framework-y about it. Technically, the work in the title of this step is already done: I had already enabled click-to-sort and set sortable="true" i
4
The Industry's Vileness
Tue, Jul 22nd 2014 9:13p   Jesse Gallagher
Fair warning: this post isn't technical. It's also full of sweeping generalities. When I attended middle and high school, it was as part of the last group of geeks and nerds that should face systemic ostracization. Naturally, high school will still be terrible for most people, just because it's full of high schoolers, but the world at large has seen a near-complete triumph for geeks and nerds generally. And this has had some very positive side effects: because we had to deal with exclu
6
Generating Toaster, dGrowl, etc. Notifications From Server Code
Tue, Jul 22nd 2014 10:12a   Jesse Gallagher
In yesterday's Framework-series post, I offhandedly mentioned that the "flashMessage" routine I use could easily be paired with or replaced by "toaster"-style notifications. This turned out to be very coincidental, as just today a NotesIn9 episode went up featuring Brad Balassaitis talking about using dGrowl for this purpose, along with an accompanying blog post. Whenever I've used something like this, I've run into situations where I want to generate the message from the server, sa
5
Value and Method Bindings in XPages
Mon, Jul 21st 2014 3:12p   Jesse Gallagher
When you use any binding in XPages - anything with "#{...}" or "${...}", regardless of whether it's EL, SSJS, or other - you're creating what is called in JSF-land either a ValueBinding or a MethodBinding, and the distinction is important but can be subtle, particularly when dealing with SSJS. Value Bindings The simplest case of value bindings are sprinkled throughout even the most basic XPage app, created when you bind a control to a document's field: The meaning is clear: "thi
2
Building an App with the frostillic.us Framework, Part 5
Mon, Jul 21st 2014 1:12p   Jesse Gallagher
Define the data model Create the view and add it to an XPage Create the editing page Add validation and translation to the model Add notification to the model Add sorting to the view Basic servlet REST with Angular.js Add notification to the model The next step in building our Framework app is a simple one: adding some basic visual notification when user saves a note. We'll leave the navigation rule to send the user to the home page in place and use flashScope (included in the Framework) a
10
Meandering Musing About Views
Sun, Jul 20th 2014 9:15p   Jesse Gallagher
As happens periodically, I've been thinking about Domino views lately. When I get into one of these moods, I find it helps to take a step back to look at what an NSF is. An NSF is, in its heart of hearts, a key/value store. Each entry has several keys of which the useful ones are Note ID and the UNID, which are 32-bit and 128-bit integers, respectively, and where the Note ID is fixed and the UNID is mutable. Each entry's value is a multimap with string keys and values that are either ef
2
How I Deal With Collections in the Framework
Sun, Jul 20th 2014 8:13a   Jesse Gallagher
A post on Christian Güdemann's blog and a followup on Nathan Freeman's made me figure it could be useful to discuss how I deal with the job of working with document collections in the frostillic.us Framework. First of all: I am not solving the same original problem Christian had. His post discussed strategies for actually opening and processing every document and secondarily building a collection using inadvisable selection formulas for views (namely, @Today). I don't generally do that
7
Platform Defensiveness
Fri, Jul 18th 2014 6:12p   Jesse Gallagher
If you were a Mac user in the 90s and early 2000s, life could be tough. Though you loved your platform of choice and could see its advantages plain as day, you were in a distinct minority. The world was full of people ready to line up to explain why you're an idiot on a sinking ship. And the part that stung was that they weren't always wrong: for every person talking out of their ass about how great having a menu bar in every window was or the joys of running ancient line-of-business DOS
4
Building an App with the frostillic.us Framework, Part 4
Thu, Jul 17th 2014 1:12p   Jesse Gallagher
Define the data model Create the view and add it to an XPage Create the editing page Add validation and translation to the model Add notification to the model Add sorting to the view Basic servlet REST with Angular.js Add validation and translation to the model Now that we have a page to edit the model objects, it's time to spruce them up a bit by adding some type information, an additional field, and some basic translation. When we first set up the Note model, it didn't contain any infor
4
Building an App with the frostillic.us Framework, Part 3
Thu, Jul 17th 2014 12:12p   Jesse Gallagher
Define the data model Create the view and add it to an XPage Create the editing page Add validation and translation to the model Add notification to the model Add sorting to the view Basic servlet REST with Angular.js On the scale of "bog-standard" to "weird", the next phase of writing a frostillic.us Framework app sits in the middle: the basic steps of creating a model-editing page are pretty standard, but you can use unique aspects of the Framework to save a bunch of coding and add som
7
Building an App with the frostillic.us Framework, Part 2
Fri, Jul 11th 2014 3:12p   Jesse Gallagher
Define the data model Create the view and add it to an XPage Create the editing page Add notification to the model Add sorting to the view Basic servlet REST with Angular.js The first stage of building a frostillic.us-Framework-based app was a bit unusual - focusing on creating a model object in Java - but the next phase is about as bog-standard as it gets: Create the view and add it to an XPage The view we'll need is a basic one showing all Notes. We'll name it "NotesAll" to match the
3
Building an App with the frostillic.us Framework, Part 1
Wed, Jul 9th 2014 8:11a   Jesse Gallagher
Now that the framework I've been building is settling into a real project, I figured one of the best ways for me to explain how it works and to double-check my own assumptions is to make a tutorial on how to actually construct an app using it. This will be a very simple one to start with: a note-taking app with just a couple fields and only one business object to speak of. The overall conceit of the framework is that it uses standard/ExtLib components and idioms where appropriate but decl
7
The Trouble With Developing on Domino
Tue, Jul 8th 2014 8:15a   Jesse Gallagher
The core trouble in my eyes with developing on Domino is that it is unloved for what it is. Not so much by customers (I have no interest in whether companies use Exchange or SharePoint or whatever), but more by IBM. The situation reminds me of Apple with products like WebObjects, Xserve, and Aperture: there's clearly a dedicated and talented team behind it, but the organization's heart isn't in it. The analogy is inexact: first, Apple's overarching motivations and strategies are much e
4
Dabbling in Reflection
Mon, Jul 7th 2014 12:15p   Jesse Gallagher
In a similar vein to my post from the other day, I'd like to discuss one of the other bugaboos that crops up from time to time in the edges of XPages development, usually spoken of in hushed tones: reflection. If you're not familiar with the term, reflection is an aspect of metaprogramming; specifically, it's the ability to inspect and operate on objects and classes at runtime. Reflection in Java isn't as smooth as it is in other languages, but it makes sense as you work with it. The
3
My Black Magic for the Day
Fri, Jul 4th 2014 4:12p   Jesse Gallagher
One of the overarching goals for my model framework is to get the job of specifying business logic out of the XPage. So far, most of my work in the area revolved around building in the ability to override getters/setters, establish relationships, and so forth. However, a big problem remains: the XPage still needs to be told things about the data that are really the model's job, not the XSP markup's. Namely, validation. A little while ago, I "solved" this by adopting Hibernate Validator
8
Things I Rarely Use: sessionScope
Thu, Jul 3rd 2014 6:15p   Jesse Gallagher
As this post's title implies, I'm considering making this a series on XPages anti-patterns, but no promises there. In any event, this is a topic that's been stewing in my brain for a little while: my antipathy towards the session scope in XPages. Now, don't get me wrong: other than the "not reset on logout" thing that may be fixed by now, I have no technical qualms with sessionScope; it does what it says on the tin. However, I've often found that many people use it very frequently,
4
XPages Data Caching and a Dive Into Java
Wed, Jul 2nd 2014 2:11p   Jesse Gallagher
One of the most common idioms I run into when writing an app is the desire to cache some expensive-to-compute data in the view or application scope on first fetch, and then use the cached version from then on. It usually takes a form like this: public Date getCachedTime() { Map applicationScope = ExtLibUtil.getApplicationScope(); if(!applicationScope.containsKey("cachedTime")) { // Some actual expensive operation goes here applicationScope.put("cachedTime", new Date()); } return
5
Another Round of URL Fiddling
Thu, Jun 19th 2014 3:11p   Jesse Gallagher
I was working on another installment of "Be a Better Programmer", but the result isn't where I want it to be yet, so it'll have to wait. Instead, I'll share a bit about my latest futzing around when it comes to improving the URLs used in an XPages app. This has been a long-running saga, with the latest installment seeing me stumbling across a capability that had been right under my nose: the ViewHandler's ability to manipulate the URLs generated for a page. That method worked, but h
2
The frostillic.us Framework
Mon, Jun 9th 2014 1:15p   Jesse Gallagher
For a while now, I've maintained a project called XPages Scaffolding on OpenNTF and GitHub. This project is the NTF that I use when creating a new XPages application and acts as a storehouse for my "bag of tricks", things like my model framework, controller classes, and various goodies I've picked up over the years, like a JSFUtil class and a flashScope. For a while, I've figured that, once this stuff is in proper shape, I'd extract it into an OSGi plugin and get it out of the NSF. L
7
REST Services for my Model Framework
Fri, Jun 6th 2014 7:15a   Jesse Gallagher
Recently, I've been refactoring out my framework code from XPages Scaffolding into an OSGi plugin. Part of this is just to help with code reuse and versioning: having a whole bunch of framework classes in each NSF is a drag, both from a perspective of having a bunch of extra stuff in the NSF and for having to worry about keeping them up to date (a template would work, but eh...). But another part is that it lets me work on some new features I've been itching to try. One of thos
3
Be a Better Programmer, Part 3
Thu, Jun 5th 2014 8:12a   Jesse Gallagher
After a break last week, this week's entry returns a bit to practical concepts. Specifically: Develop a Working Knowledge of Relative Speeds Performance of an app depends on almost-countless factors, but I've found that you mostly just need to know a few general ideas and rules of thumb to avoid the real pitfalls. Big O Notation The first thing to have a general working knowledge of is the naively-named Big O notation. This is one of the core concepts in a Computer Science curriculu
5
Swift
Wed, Jun 4th 2014 6:14p   Jesse Gallagher
This is a topic that doesn't really fit my usual bailiwick of Domino programming, nor is it something I'm particularly qualified to comment on, since the most Objective-C programming I've ever done was some putzing around years and years ago with a weird idea for a pseudo-database that didn't even involve Cocoa, but I'm going to talk about it anyway. I'm really excited about Swift. In case you don't follow Apple circles, Swift was one of the fire hose of announcements at WWDC on Mo
6
Coaxing Enums Into XPage Combo Boxes
Wed, May 28th 2014 4:11p   Jesse Gallagher
I've been reworking Forms 'n' Views over the last couple days to use it as a development companion for the OpenNTF Design API, and one of the minor hurdles I ran across was presenting a getter/setter pair that expects a Java Enum to an XPages control (a combo box in this case, but it would be the same with other similar controls). I had assumed at first that it would simply not work - that the runtime would entirely balk at the conversion. However, it turned out that XPages does half th
7
Code for Tim: LESS CSS for XPages
Sun, May 25th 2014 2:15p   Jesse Gallagher
When OpenNTF announced the "Code for Tim" initiative, I browsed Tim's GitHub repository list and one stuck out to me: the "xspless" stub repository for adding LESS CSS support to XPages. I'd latently wished for this sort of feature for a while, but hadn't yet set out down the path. It seems Tim had had the same desire, and had taken at least one more step than me. I've decided to try my hand at making this desire a reality, and it's borne some fruit so far. I've created a
6
Be a Better Programmer, Part 2
Thu, May 22nd 2014 10:12a   Jesse Gallagher
For this week's installment, I'd like to cover a more abstract topic than last time: Develop a Philosophy of Programming By this grandiose title I don't mean that your outlook on programming has to be an answer to life, the universe, and everything (though tell me if it is), but more that it's useful to know why you do what you do. Why are you a programmer? I'm assuming it's not because of a particular love for "delivering" "enterprise" "workflow" "solutions". In my case, i
5
For-fun Project: NSF StateManager
Tue, May 20th 2014 3:11p   Jesse Gallagher
Earlier this year, I created a StateManager for XPages using Couchbase as a back end. Mostly, this was just to give myself an excuse to mess around with XPages internals and Couchbase. But even still, it had an interesting characteristic: by storing the state of an XPage between requests in a location available to multiple servers, the XPages became cluster-friendly - you could load an XPage on one server and make later requests to another (though it would take further work to handle other
6
The DSAPI Login Filter I Wrote Years Ago
Mon, May 19th 2014 12:11p   Jesse Gallagher
In one of the conversations I had at the meetup yesterday, I was reminded of the DSAPI filter I use on my server for authentication, and remembered I'd yet to properly blog about it. Years ago, I had a problem: I was setting up an XPages-based forum site for my WoW guild, and I wanted sticky logins. Since my guildies are actual humans and not corporate drones subject to the whims of an IT department, I couldn't expect them to put up with having to log in every browser session, nor did I
3
Be a Better Programmer, Part 1
Thu, May 15th 2014 4:11p   Jesse Gallagher
For over a year now, I've had notes on this blog-post series sitting on my desktop, staring at me and asking why I haven't actually started it. Well, I'm going to start it now. The title and core concept are stolen from the illustrious Day[9], though I expect any mentions of video games will be incidental at best. What I want to do is encourage everyone, myself included, to be a better programmer, and I aim to do this by sharing overall concepts and strategies that I have found to hel
3
So it goes.
Mon, May 12th 2014 6:12p   Jesse Gallagher
Having only briefly met Tim Tripcony in person and lacking the writing skill for the task, I feel like it's not entirely proper for me to comment on his death, but I'm doing to do so anyway. Years ago, when I was finding out about the Lotus community and starting my journey learning XPages, Tim immediately stood out as one of The People to pay attention to. His knowledge of the platform and willingness to share made his blog an excellent resource, but it was more than that. In a way that
5
Book Review: Mastering XPages, Second Edition
Sun, May 11th 2014 3:12p   Jesse Gallagher
For a review of Mastering Xpages, I could copy almost wholesale the introduction from my review of XPages Extension Library: the low count of XPages books makes each one an essential purchase. As before, fortunately the book rises above that obligatory baseline and is absolutely worth your time. That's the upshot of this review: if you're a Domino programmer, buy and read this book. Size One of the first things you notice about the book is its size, clocking in at over a thousand pages
8
Pretty URLs: A Step in the Right Direction
Sat, May 10th 2014 9:11p   Jesse Gallagher
A long time ago, I mused a bit about the URL problem in XPages. The core problem then, as it is today, was that XPage URLs are ugly as sin. Domino URLs were never pretty, but XPages took them back a few steps. Just look at this normal-case monstrosity: https://someserver.com/foldername/app.nsf/somepage.xsp?action=openDocument&docum entId=E0023409DE744F8085257CD3007006A3 Barely any part of that has anything to do with the task at hand! Some parts - like the folder path and NSF name
4
Using a ViewHandler to Serve a Different XPage
Sat, May 3rd 2014 8:12a   Jesse Gallagher
I've been using a ViewHandler class for a while now for a specific purpose: injecting controller objects automatically. However, I hadn't really dug into them further than that. I should have, though: I spent a little time poking around this morning and found that they can help solve two minor annoyances I've had for a while. For the purposes of this post, the pertinent one of those is the ability to serve a different XPage than the one requested. In normal cases, this isn't a particu
10
Expanding your use of EL: Mea Culpa
Fri, May 2nd 2014 7:11p   Jesse Gallagher
A while back, a wrote a couple posts about using Expression Language (EL) to clean up your XPages code, and in the first of them I gave what I labeled an exclusive list of the interfaces that XPages EL provides special support for (as opposed to just looking for getters/setters). It turns out I was sorely mistaken: there are at least two other types that EL specially supports. The first is the class used for JavaScript objects, such as allowing #{foo.bar} to bind like you'd expect to
4
My Current Ideal App-Dev Routine, April 2014
Sun, Apr 27th 2014 11:11a   Jesse Gallagher
Though most of my paying work involves working with clients' creaky old databases, greenfield projects will always have my heart. For these and for my side projects, I've been moving towards an ideal Domino-app strategy that seems to serve me well. The Setup My apps consist of at least two NSFs: one for the app itself and at least one for data. The only non-design notes in the app NSF are for app configuration, and even then I keep it limited. Everything else goes in the "data" databa




Created and Maintained by Yancy Lent - About - Planet Lotus Blog - Advertising - Mobile Edition