OpenNTF: TriggerHappy 2.0

18.01.2014 14:07:11 TriggerHappy initially started on Domino 9.0.1 LINUX/64Bit

TriggerHappy20
Still having a smallish issue when the agent is started. Seems to be a problem with Thread Local Storage implementation. Looking for assistance.

If anyone is willing to look into the code, I will send it. Ping me an email if you want to help.


AUTO_SORT_DATE

As of Notes 9.0.1, you can now control the date column in the mailfile preferences to automatically sort ascending or descending.  (

autosort

The option can also be set via the notes.ini

AUTO_SORT_DATE=11 or 12

A value of 11 displays the most recent message at the end of the view (the default) and 12 displays it at the beginning of the view.


Build cAPI Programs On Linux/64

Today I built a compile and build environment for Domino 9.0.1 on Linux 64Bit. I had done this for 32-Bit Linux a while ago and all the steps for 32Bit also work in a 64Bit environment.

There is only one symlink you have to add in addition to the symlinks you have to create on 32-Bit

ln -s $Notes_ExecDirectory/libgsk8iccs_64.so /usr/lib64/libgsk8iccs_64.so

where $Notes_ExecDirectory=/opt/ibm/domino64/domino/notes/latest/linux in my environment

 


Titanium Studio – ‘Failed to create the Java Virtual Machine’

I recently installed Titanium Studio on my PC. On first startup, I received the following (pretty useless)  error message …

TiError

To get more information about the error ( and the cause ), you can start TitaniumStudio.exe from the command prompt with the -debug switch

tiError2

After more searching and testing, I changed a parameter in the titaniumstudio.ini from

-Xmx1024m to -Xmx512m

Now Titanium Studio starts without any complaint …

 


Compacting Databases With DBMT

Starting with IBM Domino 9.0, DBMT has been introduced. You can use the DataBase MainTenance tool for performing multiple daily/weekly administrative tasks on user’s mail database files. The DBMT tool relieves the administrator of the need to run the Updall task.
When DBMT is executed, it uses the copy-style compact (compact -c ) to compact databases. Compact -c has the disadvantage of fragmenting files and this can have an impact on the performance of your server.

But DBMT behaves a bit different here. DBMT preallocs the .TMP file to the used space size of the .NSF.

I did a test on my server. Here is the result.
prealloc

Unfortunately, the “old” compact task itself does not yet have the preallocation feature included. I hope, that we will see this feature in a future release …


Administration Help and DBMT in 9.0.1

If you are already familiar with DBMT, you might be aware of this;  if you are new to DBMT, you can save some time reading this article

DBMT is a new feature in Domino 9.0 that allows you to configure the regular maintenance options that you are familiar with to run automatically on schedule to keep your databases running smoothly. There are a lot of options that are described in the Administration Help Database

But, the Administration Help is wrong in one particular case:

“Specify any additional system databases using the notes.ini variable DBMT_FILTER. Separate entries in the list either by a space ( ), a comma (,) or a semi-colon (;). The names are case-insensitive and are relative to the data directory.

The correct name for the variable is DBMT_COMPACT_FILTER

Even after upgrading to 9.0.1, you will find this incorrect entry in the help.

 


deviceBean in Notes / Domino 9.0.1

Starting with version 9.0.1 of IBM Notes / Domino,a new managed bean called the deviceBean is  introduced within the XPages run-time to provide an easy to use and easy to program way of identifying a popular range of mobile and tablet devices directly within ServerSide JavaScript or Expression Language (EL) computed expressions.

So, instead of using

<xp:text escape="true" id="computedField2"
value="#{javascript:context.getUserAgent().isFirefox()}"/>

you can use EL in your XPage

<xp:text escape="true" id="computedField1"
value="#{deviceBean.firefox}"/>

Read all about this new bean in the “What’s new in IBM Domino Designer 9.0.1 Social Edition?” section of the IBM Notes Designer Help


ODS52 available in Notes & Domino Release 9.0.1

This new ODS prevents data corruption that can occur only under very rare certain circumstance for medium and strong encrypted databases. A temporary solution has already been built into  8.5.3 and 9.0.

Starting with 9.0.1, the issue has been fixed permanently.

Once a Notes Client or Domino Server has been upgraded to 9.0.1, set CREATE_R9_DATABASES=1 in notes.in and the next copy style compact of the database will upgrade the database to ODS52 and the encrypted databases will no longer be exposed to this very rare corruption.

 


Thanks, Bruce

Thank you Bruce for all you have done for the (Lotus) Notes community and for giving OpenNTF to us in 2001.

Bruce-Elgort-in-a-Clark-class

I remember that day back in 2007 in Dublin, when I first met you in person at ILUG. We have met a few times on other events since then, and I hope to (perhaps) see you as a speaker at the EntwicklerCamp conference in 2014.

Good luck to you for all your future plans!!


Toolbars are missing after upgrading to Notes 9

After you have successfully upgraded your client to IBM Notes 9, you will no longer see any toolbar when using the IBM Social Theme.

toolbar1

You might also have checked “File\Preferences\Toolbars” and found all your toolbars there: all of them enabled and visible.

In IBM Notes 9, there is a new setting that is activated by default: “Show Toolbars Only When Editing”

toolbar2

Uncheck it and your toolbars will re-appear, yeah!

 


I am invited! The IBM Leadership Alliance Conference

A couple of days ago, I received a mail asking me to join Alistair Rennie (General Manager, IBM Collaboration Solutions ) at the sixth annual IBM Leadership Alliance conference, October 23rd – 25th, at the Fairmont Copley Plaza, Boston, Massachusetts.

The conference has it’s focus on IBM’s newest collaboration capabilities and solutions. IBM will share the latest on  strategy and technical direction, from Application Development and Social Integration, to Mobility and Messaging & Collaboration. Content shared during this meeting will include IBM confidential information that will be governed by the terms of the confidentiality agreement between IBM and each attendee. So do not expect any post about what will be presented at this invitation only event.

Hotel and flight is already booked. Public transportation seems to be fairly easy in Boston. And the hotel and venue is close to Boston Logan International Airport
scheduleBoston
ScheduleBoston1


I’ll be doing a webinar in October

Howard Greenberg from TLCC invited me to present a webinar in October.  I’m looking forward to working with Howard. So, if you do not have / had the opportunity to attend a LUG near your location and you want to know, how to find the bottlenecks in your XPages and make them lightning fast, you are invited to our webinartlccwebinar


The plain simple guide to conferences

Anyone wanting to know more about IBM  Notes / Domino, or is interested in learning about current or recent developments, can use conferences ( such as MWLUG, ICONUK , BLUG, Connect ( a.k.a.Lotusphere), AdminCamp, Entwicklercamp, dominopoint, SNouG, DanNotes …) to gain a lot of knowledge in a short amount of time.

In addition to the educational opportunities, conferences provide a great chance to do some in-depth networking.
Because most experts attend conferences, they’re great occasions to both meet and introduce yourself to the forerunners in the field. Although it’s smart to attend a conferences that are held in your area, for networking purposes you should also attend those that are offered out of town.
You’ll be able to spread the name of your business further and get to know experts and insiders that you might not ordinarily get to meet.

Conferences have become some of the best platforms to learn new and innovative techniques and discover what is happening worldwide in the world of IBM Notes / Domino. As the goal of client satisfaction and meeting client deliverables in an efficient manner is paramount, being on the cutting edge of new techniques can only improve your business.

Attending a conference can be an overwhelming but exciting experience. So, before you go, take a moment to read these tips to make your conference experience even better.

Before the Conference

Before you go to a conference, it’s a great idea to set both general and specific goals for yourself, and come up with a plan on how to follow them while you’re there. Most goals fall into the following categories:

  • Finding better and newer ways to undergo specific tasks and determining the best ways to accomplish these new techniques.
  • Discovering the answers to certain problems or queries that you need to be solved.
  • Learning about topics that can help you perform better.
  • Uncovering the ways IBM Notes / Domino can help benefit you and your company.

After you’ve determined your goals, ascertain the sessions that are the most related to helping you accomplish them. Use the online agenda to plan your first and second choices for each available time slot. See if you can learn what the goals of each of the sessions are, (don’t forget to pay attention to whom the speaker is), and use that to help you make your decisions.

If you use advanced planning, you’ll be able to enter the conference less flustered and time-crunched, and thus have more time available for networking opportunities. And of course, don’t forget to bring your list of goals and your pre-determined agenda with you to the conference.

While at the Conference

The most important thing you can do at a conference is to make the most of all available opportunities.

  • Attend all of your conference sessions and make notes on the speakers’ presentations.
  • Go to all of the networking events available. These events are often filled with other marketers and have a tendency to be very lively, so they’re definitely worth your time.
  • Introduce yourself to co-attendees and share your experiences and knowledge with your co-attendees.

After the Conference

After the conference is over, there are a few things you should do before you move on with your everyday life.

  • Organize the notes you’ve taken, and extract any information that you deem to be important. Keep this knowledge handy so you don’t forget about it.
  • If you’ve made any contacts that you clicked with at the conference, be sure to follow up with them so you don’t lose any of the progress made with your networking goals.
  • Prioritize the information you’ve learned. It’s not always possible to implement all the new strategies you’ve learned immediately, so organize them according to your order of importance.
  • Utilize the information that you’ve learned.

See you in Indianapolis, Brighton, Gelsenkirchen, Milano, Frankfurt and Zürich !!


MWLUG and ICONUK

MWLUG is just around the corner. I’m very happy to have the chance to hop over the pond to attend this conference. And I’m very thankful to the organizers for being selected as a speaker.

Same for ICONUK ( t.c.f.k.a.UKLUG ) where I also will be speaking about how you can improve performance of your XPages application.

Looking forward to meeting the usual suspect as well as new members of the community.

And for the records, here is my flight schedule for the next weeks.

mwlug_iconuk

Anyone to bet on lost luggage or missed flights ?? …


Get Version Info for a .DLL using Java (JNA)

I want to get the version info for an .DLL via Java.

The scenario is that I have a file on my local system and if the version on the server is newer then the one on my system I need to download the file from the server

Java Native Access (JNA) provides Java programs easy access to native shared libraries without using the Java Native Interface. JNA’s design aims to provide native access in a natural way with a minimum of effort.

jna

You need to download the jna.jar and platform.jar from here to run the following code:

package de.eknori.jna;

import com.sun.jna.Library;
import com.sun.jna.Memory;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.win32.W32APIOptions;
import java.io.IOException;

/**
 * @author Ulrich
 * 
 */
public class FileVersionInfo {
	interface Version extends Library {
		Version INSTANCE = (Version) Native.loadLibrary("Version",
				Version.class, W32APIOptions.UNICODE_OPTIONS);

		public int GetFileVersionInfoSizeW(String lptstrFilename, int dwDummy);

		public boolean GetFileVersionInfoW(String lptstrFilename, int dwHandle,
				int dwLen, Pointer lpData);

		public int VerQueryValueW(Pointer pBlock, String lpSubBlock,
				PointerByReference lplpBuffer, IntByReference puLen);
	}

	/**
	 * 
	 */
	public static class VS_FIXEDFILEINFO extends com.sun.jna.Structure {
		public int dwSignature;
		public int dwStrucVersion;
		public int dwFileVersionMS;
		public int dwFileVersionLS;
		public int dwProductVersionMS;
		public int dwProductVersionLS;
		public int dwFileFlagsMask;
		public int dwFileFlags;
		public int dwFileOS;
		public int dwFileType;
		public int dwFileSubtype;
		public int dwFileDateMS;
		public int dwFileDateLS;

		public VS_FIXEDFILEINFO(com.sun.jna.Pointer p) {
			super(p);
		}
	}

	private String sFileName;
	private String sVersionNumber;

	/**
	 * 
	 */
	public FileVersionInfo() {
	}

	/**
	 * 
	 */
	public FileVersionInfo(String fname) {
		this.sFileName = fname;
	}

	/**
	 *
	 */
	private void _getVersion() {

		int versionlength = Version.INSTANCE.GetFileVersionInfoSizeW(
				this.sFileName, 0);

		byte[] bufferarray = new byte[versionlength];
		Pointer lpData = new Memory(bufferarray.length);

		PointerByReference lplpBuffer = new PointerByReference();
		IntByReference puLen = new IntByReference();

		@SuppressWarnings("unused")
		boolean FileInfoResult = Version.INSTANCE.GetFileVersionInfoW(
				this.sFileName, 0, versionlength, lpData);

		@SuppressWarnings("unused")
		int verQueryVal = Version.INSTANCE.VerQueryValueW(lpData, "\\",
				lplpBuffer, puLen);

		VS_FIXEDFILEINFO lplpBufStructure = new VS_FIXEDFILEINFO(
				lplpBuffer.getValue());
		lplpBufStructure.read();
		StringBuilder sb = new StringBuilder();
		sb.append((short) (lplpBufStructure.dwFileVersionMS >> 16));
		sb.append(".");
		sb.append((short) (lplpBufStructure.dwFileVersionMS & 0xffff));
		sb.append(".");
		sb.append((short) (lplpBufStructure.dwFileVersionLS >> 16));
		sb.append(".");
		sb.append((short) (lplpBufStructure.dwFileVersionLS & 0xffff));
		this.sVersionNumber = sb.toString();
	}

	/**
	 * 
	 */
	public void setFileName(String fname) {
		this.sFileName = fname;
	}

	/**
	 * 
	 */
	public String getVersionNumber() {
		this._getVersion();
		return sVersionNumber;
	}

	/**
	 * 
	 */
	public static void main(String[] args) throws IOException {
		// FileVersionInfo fv = new FileVersionInfo();
		// fv.setFileName("c:\\tools\\sample.dll");
		FileVersionInfo fv = new FileVersionInfo("c:\\tools\\sample.dll");
		System.out.println(fv.getVersionNumber());

	}
}

[XSnippets] – IBM Notes Traveler Administration REST API Test

I could not get the example in the IBM Notes Traveler Administration API to work. So I wrote my own test code.

The code connects on http port 80 to the Traveler Server ( 9.0.0.1 is needed !), does a basic authentication and prints the result of the GET request to the console.

You need to download HttpClient 4.2.5 from http://hc.apache.org/downloads.cgi and configure the build path to use the jars from the download.

 


Manage OutOfOffice with IBM Notes Traveler 9.0.0.1

IBM Notes Traveler now supports “Out of office” functionality on Android and iOS devices. This allows you to configure a variety of settings that determine how IBM Notes Traveler responds when you receive mail while away from the office.

LNTOOO

By the way: The German translation is HORRIBLE!!!

To use this feature, you have to install and configure IBM Notes Traveler Companion.

Read more about other features added to IBM Notes Traveler here