276 Lotus blogs updated hourly. Who will post next? Home | Blogs | Search | About 
 
Latest 7 Posts
An Overview of Darwino for Domino Types
Thu, Apr 14th 2016 10
A Bit of Code Archaeology
Thu, Mar 10th 2016 6
Maven Native Chronicles: Running Automated Notes-based Tests
Sat, Feb 27th 2016 16
That Java Thing, Part 16: Maven Fallout
Tue, Feb 23rd 2016 11
That Java Thing, Part 15: Converting the Projects
Mon, Feb 22nd 2016 14
That Java Thing, Part 14: Maven Environment Setup
Sun, Feb 21st 2016 11
That Java Thing, Part 13: Introduction to Maven
Fri, Feb 19th 2016 10
Top 10
Maven Native Chronicles: Running Automated Notes-based Tests
Sat, Feb 27th 2016 16
Setting up nginx in Front of a Domino Server
Thu, Sep 18th 2014 14
That Java Thing, Part 15: Converting the Projects
Mon, Feb 22nd 2016 14
That Java Thing, Part 11: Diagnostics
Tue, Dec 1st 2015 13
The Podcasts I Listen To
Tue, Sep 22nd 2015 11
That Java Thing, Part 14: Maven Environment Setup
Sun, Feb 21st 2016 11
That Java Thing, Part 16: Maven Fallout
Tue, Feb 23rd 2016 11
Working with Rich Text's MIME Structure
Wed, Jul 8th 2015 10
Adding Components to an XPage Programmatically
Sun, Jul 19th 2015 10
Maven Native Chronicles, Part 1: Figuring Out nar-maven-plugin
Fri, Jul 24th 2015 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 Apr 14, 2016 6:17:27 PM EST. Realtime Update:
Location Lansdale, PA, USA


Recent Blog Posts
10
An Overview of Darwino for Domino Types
Thu, Apr 14th 2016 6:05p   Jesse Gallagher
So, Darwino! I've mentioned it quite a few times on Twitter and, particularly, in person, but I think it's high time I write some proper blog posts about it. To start with, I'll cover what Darwino is. The short version is it's a Java-based development framework with a replicating document database. The interesting aspects go beyond that, though: In addition to Java web servers, it targets mobile devices, both Android and, through RoboVM, iOS. Those devices store their own replicas of t
6
A Bit of Code Archaeology
Thu, Mar 10th 2016 9:08a   Jesse Gallagher
Yesterday, I decided to toss the source of my first real XPages app up on GitHub: https://github.com/jesse-gallagher/Raidomatic It's my WoW guild's web site, which had some forums as well as a raid-management tool and loot tracker. I'm guessing that those tools won't be particularly useful for your average XPages app, but they were interesting things to build, and were a great exercise in figuring out the platform. Since it is quite old, there are also plenty of terrible decisions i
16
Maven Native Chronicles: Running Automated Notes-based Tests
Sat, Feb 27th 2016 5:02p   Jesse Gallagher
This post isn't really in my ongoing Java thread, though it's related in that this is the sort of thing that may come up in fairly-advanced cases. This post will assume a functional knowledge of Maven, Tycho, and JUnit. For Darwino, I ran into the need to run unit tests on Domino-adapter code during the Maven build process. Since the Domino project tree uses Tycho, this ended up differing slightly from standard Maven testing. Rather than using the src/test/java directory in the same proj
11
That Java Thing, Part 16: Maven Fallout
Tue, Feb 23rd 2016 2:33p   Jesse Gallagher
So, after the last post's large task of converting to Maven, this step is mostly about picking up the pieces and expanding on some of the concepts. We'll start with M2Eclipse, usually rendered as just "m2e". m2e m2e is the set of plugins that acts as Eclipse's interface to Maven. It more-or-less replaces the earlier maven-eclipse-plugin, though you will likely still see references to that around. Eclipse doesn't have any inherent knowledge of how Maven works, m2e has the complicated
14
That Java Thing, Part 15: Converting the Projects
Mon, Feb 22nd 2016 10:26a   Jesse Gallagher
Prelude: there was a typo in the previous entry. Originally, the file URL read "file://C:/IBM/UpdateSite", but, on Windows, there should be another slash in there: "file:///C:/IBM/UpdateSite". I've corrected the original post now, but you should make sure to fix your own settings.xml file if needed. Otherwise, Maven will complain down the line about the URI "having an authority component". The time has come to do the dirty work of converting our existing plugin projects to Maven. Th
11
That Java Thing, Part 14: Maven Environment Setup
Sun, Feb 21st 2016 6:51p   Jesse Gallagher
Before diving into the task of converting our plugin projects to Maven, there's a bit of setup we need to do. In a basic case, Maven doesn't require much setup beyond the project file itself - it's a "convention over configuration" type of thing that tries to make doing things the default way smooth. However, since it's also a "Java" thing, that means that anything out of the ordinary requires a bunch of XML. Our big "out of the ordinary" aspect is OSGi. Maven and OSGi are often
10
That Java Thing, Part 13: Introduction to Maven
Fri, Feb 19th 2016 6:27p   Jesse Gallagher
I've been laying warnings that this would be coming and you've seen me grouse about it for over a year, but now the time has come to really dive into Maven for Domino developers. To lead into it, there are two main topics to cover: what Maven is and why you should bother. What Maven Is Maven is a build automation tool, primarily for Java applications but able to work with a number of other languages and environments. The concept of a "build automation tool" is a strange one when you
8
Connect 2016 and Darwino 1.0
Mon, Feb 8th 2016 9:45a   Jesse Gallagher
Last week was Connect 2016 and, while I don't have a full review of it, I felt that it was a pretty successful conference. The new venue was much less weird and more purpose-fitting than expected. Moreover, while the conference content wasn't bursting with announcements and in-depth technical dives like at something like WWDC, it did feel a bit more grounded and less marketing-hollow than the last two. So I'll call it a win. On the OpenNTF front, the conference saw a bit more in the slo
10
Connect 2016 Lead-Up
Tue, Jan 26th 2016 9:02a   Jesse Gallagher
Phew, well, my plugin series continues its hiatus due to how thoroughly swamped I've been with work the last couple months. It will return in time, ready to dive into the fruitful and terrifying topic of Maven-ization. In the mean time, we're very close indeed now to this year's Connect, and I'm looking forward to it. There are a number of sessions that I'm rather looking forward to, but I'd like to mention two due to my indirect and direct association with them, respectively. Firs
10
That Java Thing, Part 12: Expanding the Plugin - JAX-RS
Thu, Dec 3rd 2015 3:21p   Jesse Gallagher
A couple of months back, Toby Samples wrote a series on using Wink in Domino. I'm not going to cover all of that ground here, but it's still worth dipping into the topic a bink, as writing REST services in an OSGi plugin is a great way to not only add capabilities to your XPages apps, but to also start making your data (and programming skills) more accessible from other platforms. There are two main terms to know here: "JAX-RS" and "Wink". JAX-RS stands for "Java API for RESTful Web
13
That Java Thing, Part 11: Diagnostics
Tue, Dec 1st 2015 8:43a   Jesse Gallagher
Though my surprisingly-packed schedule the last few weeks caused a hiatus, it's time to retun to this series with a quick description of some of the diagnostic tools available to you when doing plugin development (outside of connecting the debugger, which I may do eventually). The primary tool in your "what the heck is going on?" toolbox should be the XPages Log File Reader. This app does a wonderful job providing a web UI for the important diagnostic files you'll likely need to see du
5
That Java Thing, Interlude: Effective Java
Mon, Nov 16th 2015 8:15a   Jesse Gallagher
While taking a short breather in my continuing Java series, I think that now is a good time to reiterate my advice for all Domino developers to read Effective Java. It's probably not the best way to learn Java from scratch, but it's an invaluable tour through tons of important Java concepts. Even if you don't use most of the knowledge immediately, reading every section will help immerse you in the language and give you a better appreciation for its texture, which is one of the most im
7
That Java Thing, Part 10: Expanding the Plugin - Serving Resources
Thu, Nov 12th 2015 12:02p   Jesse Gallagher
After sharing code, one of the handiest uses of a plugin is sharing web resources - stylesheets, JavaScript files, and so forth. This process is similar to the last couple steps in that, though it is not very complicated on the whole, it's pretty non-obvious how to get around to doing it. To start with, we'll create some resources to serve up. Expand the src/main/resources folder in your project (it will be slightly more useful to use the "normal" folder version and not the source fold
8
That Java Thing, Part 9: Expanding the Plugin - Jars
Wed, Nov 11th 2015 11:50a   Jesse Gallagher
So it appears that I once again forgot to commit my changes. Well, consider this a cautionary tale, but we can still salvage the situation a bit by committing the previous changes before embarking on an unrelated modification - it's that mixing of different changes that can cause trouble in a source control repository. [IMAGE] For today's post, we'll add a third-party Jar to our plugin in order to use it internally and provide it to external applications (and we'll cover why those ar
7
That Java Thing, Part 8: Source Bundles
Tue, Nov 10th 2015 7:46a   Jesse Gallagher
Before anything else today, Eric McCormick reminding that yesterday's post missed the final step: committing the changes. So, let's take care of that right now. On my side, since my Windows VM is also being accessed from the Mac side, it's worthwhile to add a .gitignore file to the root of the repo to keep out all the .DS_Store nonsense. GitHub's Java gitignore is a good start, though skipping the part about ignoring Jar files. In your text editor of choice, create a new file named ".
10
That Java Thing, Part 7: Adding a Managed Bean to the Plugin
Mon, Nov 9th 2015 6:37a   Jesse Gallagher
For today's step, we'll deal more with the meat of the task: putting your own code in the plugin. There are a lot of options for what a plugin can provide, ranging from just storing classes to be accessed from elsewhere to being full-on OSGi web applications. Adding a managed bean certainly falls on the simpler side of this spectrum, but it's also one of the most common uses. These steps should also be very familiar if you've created a managed bean in an XPages NSF before. Before we g
7
That Java Thing, Part 6: Creating the Feature and Update Site
Sun, Nov 8th 2015 10:45a   Jesse Gallagher
The last post covered turning our nascent plugin into a proper XPages library, so now it's time to fill in the remaining pieces to get it installed. To do that, we'll need a feature and an update site. The feature will point to our plugin - in a more-complicated setup, this could point to several related plugins, but we'll just need the one. The update site will do similarly, referencing the feature in a way that Eclipse-type platforms know about. Go to File → New and choose "Feature
4
That Java Thing, Part 4: Expanding the Plugin
Fri, Nov 6th 2015 8:48a   Jesse Gallagher
In the last post, we created an empty plugin project for our XPages library. Today, we'll flesh that plugin out a bit and add the actual XSP hooks. The first step is to start filling in some details in the plugin's Manifest file, which is the core description of what the plugin does and what it requires in its environment. To begin with, open the MANIFEST.MF file in the META-INF folder of your project and check the "This plug-in is a singleton" checkbox: [IMAGE] During one of the ste
5
That Java Thing, Part 4: Creating the Plugin
Thu, Nov 5th 2015 9:38a   Jesse Gallagher
To make a basic XPages library, we'll need to create the trio of OSGi projects: the plugin, the feature, and the update site. For a long time, the XSP Starter Kit has been a great go-to starting point for this sort of thing. It definitely covers almost all of the potential ground, but it can be a bit overkill when you just want to put some classes in a shared place. So, for this exercise, we'll start from scratch. But before we do that, we should create a Git first. This isn't required,
8
That Java Thing, Part 3: Eclipse Prep
Wed, Nov 4th 2015 4:26a   Jesse Gallagher
Before you dive into OSGi development, you'll need a proper development environment, and that usually means Eclipse. Domino Designer, being Eclipse-based, can technically do the job and has the advantage of some of the setup being done, but it's so out-of-date at this point that it's not worth it (believe me, I tried originally). Newer Eclipse versions have improved noticeably, so it's best to grab a recent version. Currently, that means Mars, or Eclipse 4.5.1. Before Eclipse, you'll
7
That Java Thing, Part 2: Intro to OSGi
Tue, Nov 3rd 2015 6:44a   Jesse Gallagher
OSGi once stood for "Open Services Gateway initiative", but that name slid from "impossibly vague" to "entirely obsolete" rather quickly. For our needs, OSGi is a mechanism for bringing sanity to the "big pile of Jars" that you might otherwise have in a large Java system. It provides a standardized way to describe the name of a library, its version, its dependencies, its capabilities, and its interactions with other libraries. In this way, rather than just "commons-io-2.1.jar", y
8
That Java Thing, Part 1: The Java Problem in the Community
Mon, Nov 2nd 2015 1:20p   Jesse Gallagher
Java has been a bugbear for the Domino community for a long time. Though Notes and Domino have presented a top-to-bottom (mostly) Java environment for years, the monumental inertia of the corporate development community, the platform's tortured history of insufficiently-fleshed-out Java hooks, and IBM's "pay no attention to that man behind the curtain" pitch with regard to the language created an environment where Java is often something for "other developers". XPages represented a t
7
Domino's Server-Side User Security
Sun, Nov 1st 2015 7:41a   Jesse Gallagher
The other day, Jesper Kiaer write an interesting two-part sert of blog posts talking about the security implications of HTTPEnableConnectorHeaders, something I mention in my setup example. In it, he describes the ability to specify an arbitrary username as a security hole, which I don't agree with, but I see where he's coming from. It certainly has, shall we say, implications. The $WSRU header comes along for the ride when you enable the HTTPEnableConnectorHeaders notes.ini property (off
4
Satisfying Designer's Peculiar OSGi Constraints in Tycho
Mon, Oct 12th 2015 4:33p   Jesse Gallagher
Before anything else, I should mention that this post is entirely on the topic of building OSGi plugins with Maven. If you're not doing that yet, this probably won't be particularly useful. For the most part, when building OSGi plugins for XPages, you can be fairly confident that the available plugins will be fairly similar between Notes and Domino. That's not quite always the case, though - there are a set of plugins that are available in Domino that aren't present in Designer's runt
5
Release Day
Sat, Oct 3rd 2015 6:34p   Jesse Gallagher
Today, I put two long-overdue releases up on OpenNTF. First and by-far-foremost is version 2.0.0 of the OpenNTF Domino API. The major version reflects not so much a major new architectural change over the 1.5.x release candidates as it does the fact that those releases were conservatively named and presaged a Java-style "1.x forever" future. Various development builds and release candidates have been used in production by the API team and others for a while now, and so this represents a
11
The Podcasts I Listen To
Tue, Sep 22nd 2015 12:46p   Jesse Gallagher
Over the years, I've accumulated a stable of podcasts I listen to, mostly tech-related (and then mostly Apple-related), and I realized that this may be a handy list for anyone looking to pick up some new listening material. I've uploaded the full list here, but here are some of the highlights: Accidental Tech Podcast - This show is hosted by John Siracusa (of OS X review fame), Marco Arment (of Overcast and Peace fame), and Casey Liss (of, now, ATP fame). It's almost all about technolog
4
Seriously, Though: Reverse Proxies
Wed, Sep 16th 2015 4:28p   Jesse Gallagher
So, Domino administrators: what are your feelings about SSL lately? Do they include, perhaps, stress? It's "oh crap, my servers are broken" season again, and this time the culprit is a change in Apple's operating systems. Fortunately, in this case, the problem isn't as severe as an outright security vulnerability like POODLE and, better still, there is a definitive statement from IBM indicating that they are going to bring their security stack up to snuff almost in time. But this isn
5
XPages Devs: Enable "Refresh entire application when design changes"
Mon, Sep 14th 2015 11:48a   Jesse Gallagher
When developing an XPages application of beyond-minimal complexity, you're likely to run into a problem where your app starts saying that a class is incompatible with itself in one way or another. The exception usually traces down to something like "foo.SomeClass is incompatible with foo.SomeClass" or "cannot assign instance of foo.SomeClass to field X..." where the field is that same class. This has cropped up since time immemorial. It's actually, though, something that IBM sort-o
4
Dealing with OSGi Fragments in Tycho and Designer
Fri, Sep 11th 2015 6:30p   Jesse Gallagher
This post is partly to spread information publicly and partly a useful note to my future self for the next time I run into this trouble. In OGSi, the primary type of entity you're dealing with is a "Bundle" or "Plug-in" (the two terms are effectively the same for our needs). However, there's a sort of specialized type that you may run into called a "Fragment". They're similar to a plug-in in that they're a contained unit of Java code and resources, but they have the special prope
2
My MWLUG 2015 Presentation, "Maven: An Exhortation and Apology"
Sun, Aug 30th 2015 6:07p   Jesse Gallagher
At prophesied, I gave a presentation on MWLUG last week. Keeping with my tradition, the slides from the deck are not particularly useful on their own, so I'm not going to post them as such. However, Dave Navarre once again did the yeoman's work of recording my session, so it and a number of other sessions from the conference are available on YouTube. In addition, my plan is to expand, as I did earlier today, on the core components of my session in blog form, in a way that wouldn
8
Wrangling Tycho and Target Platforms
Sun, Aug 30th 2015 4:16p   Jesse Gallagher
One of the persistent problems when dealing with OSGi projects with Maven is the interaction between Maven, Tycho, and Eclipse. The core trouble comes in with the differing ways that Maven and OSGi handle dependencies. Dependency Mechanisms The Maven way of establishing dependencies is to list them in your Maven project's POM file. A standard one will look something like this: com.google.guava guava 18.0 This tells Maven that your project depends on Guava version 18.0. The "
6
MWLUG 2015 - Maven: An Exhortation and Apology
Sun, Aug 16th 2015 11:55a   Jesse Gallagher
At MWLUG this coming week, I'll be giving a presentation on Maven. Specifically, I plan to cover: What Maven is Why Domino developers should know about it Why it's so painful and awkward for Domino developers Why it's still worth using in spite of all the suffering How this will help when working on projects outside of traditional Domino The session is slated for 3:30 PM on Thursday. I expect it to be cathartic for me and useful for the attendees, so I hope you can make it.
6
Maven Native Chronicles, Part 3: Improving Native Artifact Handling
Sun, Jul 26th 2015 8:38p   Jesse Gallagher
This post isn't so much a part of the current series as it is a followup to a post from the other week, but I can conceptually retcon that one in as a prologue. This will also be a good quick tip for dealing with Maven projects. In my previous post, I described how I copied the built native shared library from the C++ project into the OSGi fragments for distribution, and I left it with the really hacky approach of copying the file using a project-relative path that reached up into the oth
6
Maven Native Chronicles, Part 2: Setting Up a Windows Jenkins Node
Sun, Jul 26th 2015 10:16a   Jesse Gallagher
Before I get to the meat of this post, I want to point out that Ulrich Krause wrote a post on a similar topic today and you should read it. The build process I've been working with involves a Jenkins server running on OS X (in order to build iOS binaries), and so it will be useful to have a Windows instance set up as well to run native builds and, importantly, tests. Jenkins comes with support for distributed builds and makes it relatively straightforward. To start with, I installed Virt
10
Maven Native Chronicles, Part 1: Figuring Out nar-maven-plugin
Fri, Jul 24th 2015 2:48p   Jesse Gallagher
As I mentioned the other day, my work lately involves a native shared library that is then included in an OSGi plugin. To get it working during a Maven compile, I just farmed out the actual build process to Visual Studio's command-line project builder. That works as far as it goes, but it's not particularly Maven-y and, more importantly, it's Windows-only. In looking around, it seems like the most popular method of doing native compilation in Maven, especially with JNI components, is ma
10
Adding Components to an XPage Programmatically
Sun, Jul 19th 2015 8:16a   Jesse Gallagher
One of my favorite aspects of working with apps using my framework is the component binding capability. This lets me just write the main structure of the page and let the controller do the grunt work of creating fields with validators and converters. There's a lot of magic behind the scenes to make it happen, but the core concept of dynamic component creation is relatively straightforward. An XPage is a tree of components, and those components are all Java objects on the back end, which
5
Quick-and-Dirty Inclusion of a Visual C++ Project in a Maven Build
Sat, Jul 11th 2015 6:26p   Jesse Gallagher
One of my projects lately makes use of a JNI library distributed via an OSGi plugin. The OSGi side of the project uses the typical Maven+Tycho combination for its building, but the native library was developed using Visual C++. This is workable enough, but ideally I'd like to have the whole thing part of one smooth build: compile the native library, then subsequently copy its resultant shared 32- and 64-bit libraries into the OSGi plugins. From what I've gathered, the "proper" way to d
10
Working with Rich Text's MIME Structure
Wed, Jul 8th 2015 7:28p   Jesse Gallagher
My work lately has involved, among other things, processing and creating MIME entities in the format used by Notes for storage as rich text. This structure isn't particularly complicated, but there are some interesting aspects to it that are worth explaining for posterity. Which is to say, myself when I need to do this again. As a quick primer, MIME is a format originally designed for email which has proven generally useful, including for HTTP and, for our needs, internal storage in NSF.
3
Quick Tip: Override Form-XPage Mapping in xsp.properties
Thu, Jun 11th 2015 1:17p   Jesse Gallagher
This is sort of an esoteric feature, but I just ran across it and it fits nicely into an XPages bag of tricks. Specifically, as it turns out, there's a way to override the default "which XPage should be used for this document?" behavior in some cases. The most-commonly-known behavior is the "Display XPage Instead" set on the form (or the default form if-and-only-if the document has an empty Form field). This wins in all cases, and is the only way to get an XPage to open for a document
5
Parsing JSON in XPages Applications
Thu, May 21st 2015 11:47a   Jesse Gallagher
David Leedy pointed out to me that a post I made last year about generating JSON in XPages left out a crucial bit of followup: reading that JSON back in. This topic is a bit simpler to start with, since there's really just one entrypoint: com.ibm.commons.util.io.json.JsonParser.fromJson(...). There are a few variants of this method to provide either a callback to call during parsing or a List to fill with the result, but most of the time you're going to use the variants that take a Strin
6
Quick PSA: LS2J Problems in 9.0.1 FP3
Tue, May 19th 2015 1:25p   Jesse Gallagher
While I'm at it, I realized that it may be useful to further spread information about the problem that led to me fiddling with the latest IFs and JVM patches in the first place: the LS2J problems in 9.0.1 FP3. Specifically, it's borked. The main way most people have encountered this is via an exception dialog when attempting to add new plugins to an Update Site NSF, since that uses LS2J to accomplish its task - it displays several layers of stack and the upshot is that there's a j
5
Quick Tip: Re-Enabling Disabled Designer Plugins
Tue, May 19th 2015 12:58p   Jesse Gallagher
Recently, I had a case where my installed Designer plugins stopped appearing, immediately made obvious by the libraries disappearing from XPages applications and Designer listing hundreds of class-not-found errors. At first, I figured that the local plugins had been deleted, but trying to install from update sites curtly informed me that they contained nothing new for me. It turned out that my local plugins had been somehow marked disabled by Designer. The fix for this was to go to File




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