The IT Crowd

The IT crowd

Watch Jen ( she knows nothing about IT ) , Moss and Roy ( standard nerds ) in their daily effort to provide “IT Services”. 😉
Unfortunatly this real great stuff is only available for UK audience ( anyone knows why ? ) according to the Channel 4 website. Unofficial releases of the TV show ought to be available in P2P networks, as far as I’ve been told about …


Notes on a USB Key – Chapter 2

wendyI changed the code for my project “Wendy” once again. In the former version of nstart.exe, the file had to be copied to the Notes executable directory.

This is no longer necessary now; you can copy nstart.exe to i.e the “root” directory of your USB key, regardless of where your Notes Client is installed. nstart.exe locates the notes.ini and notes.exe, makes the necessary changes and starts the client.

This is NOT project “WANDA”, IBM announced at Lotusphere2006. It is my solution on how to put a Notes client “installation” on a USB key. But I’m eager to see what IBM’s solution will look like.

Does anyone have some information about project “WANDA” ?

/////////////////////////////////////////////////////////////////////////////
//  nstart.cpp
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "nstart.h"
#include "SADirRead.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
#define NOTES_INI "notes.ini"
#define NOTES_PRG "notes.exe"
#define BACKSLASH ":\\"

CString Drives ="CDEFGHIJKLMNOPQRSTUVWXYZcdefghijklmnopqrstuvwxyz";
CFile* fin =	NULL;
CFile* fout =	NULL;
CWinApp			theApp;
CSADirRead		FSearch;
CFileException	ex;
CString			THE_NOTES_INI;
CString			THE_NOTES_EXE;
char			AppPath[MAX_PATH];
char			pbuf[99999];
int				i, j, m, n;
using namespace std;

/////////////////////////////////////////////////////////////////////////////
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		cerr < < _T("Fatal Error: MFC initialization failed") << endl;
		nRetCode = 1;
	}

	else

	try
	{
		GetModuleFileName(AfxGetApp()->m_hInstance,AppPath,MAX_PATH);

		CString BS(_T(BACKSLASH));
		CString strPath(AppPath);
		CString ThisDrive (strPath.Left(1) + BS);

		FSearch.ClearDirs();
		FSearch.GetDirs(ThisDrive, true);
		FSearch.ClearFiles();
		FSearch.GetFiles(NOTES_INI);

		CSADirRead::SAFileVector &IniFile = FSearch.Files();

		for (CSADirRead::SAFileVector::const_iterator m = IniFile.begin();
			m!=IniFile.end(); m++) {

			THE_NOTES_INI = ("%s\n", (*m).m_sName);
		}

		fin =	new CFile( THE_NOTES_INI,
				CFile::modeRead | CFile::shareDenyNone);

		// read NOTES.INI
		ULONGLONG dwLength = fin->GetLength();
		ULONGLONG nBytesRead = fin->Read( pbuf,dwLength );
		fin->Close();

		CString buffer(pbuf);

		// replace drive letters with current drive
		for	(i=0; i < Drives.GetLength() ; i++ ) {

			CString DriveLetter (_T(Drives.GetAt(i) + BS));
		    j = buffer.Replace(_T(DriveLetter), _T(ThisDrive));
		}

		// write notes.ini
		fout =	new CFile( THE_NOTES_INI ,
				CFile::modeWrite | CFile::shareDenyWrite);

		fout->Write(_T(buffer),dwLength);
		fout->Flush();
		fout->Close();

		// search Notes executable
		FSearch.ClearDirs();
		FSearch.GetDirs(ThisDrive, true);
		FSearch.ClearFiles();
		FSearch.GetFiles(NOTES_PRG);

		CSADirRead::SAFileVector &ExeFile = FSearch.Files();

		for (CSADirRead::SAFileVector::const_iterator n = ExeFile.begin();
			n!=ExeFile.end(); n++) {

			THE_NOTES_EXE = ("%s\n", (*n).m_sName);
		}

		// start the client
		ShellExecute(0, "open", THE_NOTES_EXE, 0, 0, 1);
	}

	catch (CFileException* pEx)
	{
		// if an error occurs, just make a message box
		pEx->ReportError();
		pEx->Delete();
		nRetCode = 1;
	}
	catch (...)
	{
		nRetCode = 1;
	}

	return nRetCode;
}

Action Check

This is a small utility designed to tell you which actions are not compiled. If, for some reason, an action is not compiled the tool will identify the title of the action and the position in the action bar.
More information about the background of this utility can be found here.

[via Craig Schumann]


Why does Notes …

not recognise that there is a new drive available ? I plug in my USB key whilst the Notes Client is running. I want to save data from within Notes on the thumb … the save dialogue pops up and … nada, niente, nix, nothing .. no way to access my attached USB key.

After restarting the client, I can access the drive. This is annoying. Why does Notes not behave like any other Windows based application ? Could someone at IBM fix this issue, please ?


Deep Purple / Alice Cooper

Im Rahmen ihrer Tournee machten die beiden Dinosaurier des Rock am 10.02.2006 auch in Dortmund Station. Ich hatte meine Karten schon Monate vorher bestellt und bin dann gestern mit meiner Frau zum Konzert gefahren.

Ich war ein wenig skeptisch wegen der Zusammenstellung. Alice Cooper und Deep Purple als gleichberechtigte Gruppen in einem Konzert ? Ob das gutgeht ?? Es ging gut, soviel sei vorab verraten 😉

Alice CooperPünktlich um 19:30 ging das Licht in der grossen Westfalenhalle aus und im gleichen Moment knallten einem die ersten Riffs von “Dirty Diamonds” um die Ohren.

Eric Singer ( der Drummer von Kiss ) trommelte, was das Zeug hielt. Es war recht beeindruckend, wie dieser Mann mit dem Drumset umging. Einfach Klasse. eric singer
Alice Cooper spulte routiniert seine mitlerweile über 30 Jahre alte Show ab. Das Lineup wird vervollständigt durch die beiden Gitarristen Ryan Roxie und Damon Johnson sowie Bassist Chuck Garric.

“Billon Dollar Babies”, “No more, Mr. Nice Guy” und “School’s out” waren natürlich fester Bestandteil der Show, ebenso wie die Enthauptung des Protagonisten.

Warum Herr Cooper beim Titel “Eighteen” mit einer Krücke herumfuchtelte, erschliesst sich mir nicht. Evtl liegt es an seinem fortgeschrittenen Alter.

Eine Neuerung im Programm war wohl der Part, in dem eine als Paris Hilton verkleidete Actrice ( Cooper Töchterchen Calico Cooper )zunächst ein paar Paparazzi verprügelte, Mr. Cooper ihrem kleinen Köter aber im Gegenzug den Kopf abriss. Er kann es einfach nicht lassen 😉

“Poison” brachte den Saal dann richtig in Schwung. Leider war es das dann auch schon. Ein weiterer Titel folgte, dann war nach gut 1:20 h Schluss mit “Feed my Frankenstein”.

30 Minuten Umbaupause; Teppich wird ausgelegt; ein Roadie staubsaugt den Teppich; Amps und Instrumente werden aufgebaut; Beeinduckend, was beim Soundcheck allein aus den Sidefills und den Monitorboxen herauskommt. Im direkten Vergleich sieht das Drumset von Ian Paice eher wie ein Kinderschlagzeug aus. Aber Herr Paice wird besser beurteilen können als ich, was er so braucht.

Deep PurpleDeep Purple gehört inzwischen zu den ältesten Bands im Rockgeschäft, aber sicher nicht zum “alten Eisen”. Seit 1968 mischt die Gruppe als “Deep Purple” im Rock-Business mit. Von den Gründungsmitgliedern ist allerdings nur noch Drummer Ian Paice dabei.

Nach einem kurzen Videoeinspieler, der zeigte, wie die Band aus einer Gitarrenkiste kletterte, schlenderten sie in der aktuellen Besetzung Ian Gillan (Gesang), Ian Paice (Schlagzeug), Roger Glover (Bass), Steve Morse (Gitarre) und Don Airey (Keyboard) auf die Bühne und eröffneten den Abend recht viel versprechend mit “Pictures Of Home” von dem 1972er Album “Machine Head”.

Roger GloverGlover hatte sich in der Mode alternder Biker eine Bandana um den Kopf gebunden, Paice – der inzwischen aussieht wie Elton Johns dicklicher Bruder mit Zopf – gefiel sich in einem ärmellosen T-Shirt von Nike, während Gillan in weissem Hemd mit dunkler Hose und barfuss ( jetzt versteht man auch den Teppich und das Staubsaugen ) die Rolle des Conferenciers übernahm und Morse die hellblaue Jeansmontur uneitler Hardrock-Gitarristen bevorzugte.

Wie nicht anders erwartet gab es Songs vom neuen Album “Rapture of the deep”.

Die Soloeinlage von Steve Morse, in der er seine E-Gitarre wie eine Kirchenorgel (!) erkingen liess wurde vom Publkum nicht so recht verstanden und nach 5 Minuten durch Pfiffe beendet. Ich hätte dem Spiel des Herrn Morse gerne noch weiter zugehört. Wann hört man schon einmal Bach auf der E-Gitarre ??.

Don Airey lieferte ein ebenfalls grandioses Solo ab; ich weiss nicht, wie viele Stilrichtungen er in seinem knapp 4 minütigem virtuosen Keyboardspiel untergebracht hat. Und worin kann ein Keyboardsolo sonst enden als in “Perfect Strangers” ?

“Highway Star”, “Black Night”; es ging Schlag auf Schlag. Vermisst habe ich eigentlich nur ‘Child In Time’, das Ian Gillan allerdings schon seit 15 Jahren nicht mehr live vorträgt.

Der Hit aller Luftgitarrenhelden, “Smoke on the Water”, beendete schliesslich ein grandioses Konzert, zu dem viele “Herren” mit schütterem Haar und einer dicken Wölbung oberhalb der Gürtellinie auch aus dem benachbarten Ausland angereist waren.

Es war ein gelungener Abend …


Sizer v3.3

Sizer is a freeware utility that allows you to resize any window to an exact, predefined size. This is extremely useful when designing web pages, as it allows you to see how the page will look when viewed at a smaller size. The utility is also handy when compiling screen-shots for documentation, using Sizer allows you to easily maintain the same window size across screen grabs.

Rocky Oliver mentioned it a while ago, and I’m using this great tool for a couple of years. It is my #1 freeware tool. You can download Sizer from here


Please Leave

If you do not like my country, please leave.
If you do not like the way our women dress, please leave.
If you do not like our separation of politics and religion, please leave.
If you support violent responses to criticism of Islam, please leave.
If you support terrorism in any way, shape or form, please leave.
If you cannot accept satirical cartoons in our newspapers, please leave.
If you do not support democracy or the freedom of speech, please leave my country.


How to open a Notes Database in Ten Years

Assume you have a database from an employee in ODS 43 format. The employee quit the company and you put his mail file on a DVD.
Whoooosh … 10 years later you are asked to find a special document in this database. At this time you’re running Notes 12.5 with ODS 99. I know, Lotus Notes will always be downward compatible …

What I want to say is, that all archive systems offer an option to have a copy of all or of all selected documents on a cd or DVD and you can hand out this storage to anyone, regardless if he or she has the associated appication installed on his computer.

The data is written on the storage together with a runtime version of the application the data is created with.

Will we ever have this feature in Notes ? Anyone at IBM reading this and like to leave a comment ?


Notes Client On USB Key – The Starter

As I posted earlier this week, I was about to write a small starter application that would do all the necessary changes to the notes.ini when you have a notes installation on an usb key. Well here it is: nstart.exe
When you plug in your usb key to a different computer, you cannot be sure to have the same drive letter for your usb device than before.
In this case your Notes won’t start and you have to tweak the notes.ini manually.
Copy nstart.exe to the notes root directory. When you double click nstart.exe, the tool will set all occurencies of drives ( for example e:\ ) to your current drives letter and then start notes.exe.
The code is still very beta; it should have more error handling, I know. But I decided to release the code in this very early state. The code works for me but maybe not for you. So please give me a feedback when you find the code useful. Even if you think this stuff is crap, please let me know. And if you find errors ( and I’m sure you will ) just leave a comment.


// nstart.cpp
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "nstart.h"
#include "CPathSplit.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
#define NOTES_INI "notes.ini"
#define NOTES_PRG "notes.exe"
#define BACKSLASH ":\\"

CWinApp theApp;
CFile* fin = NULL;
CFile* fout = NULL;
CFileException ex;
CString Drives ="CDEFGHIJKLMNOPQRSTUVWXYZcdefghijklmnopqrstuvwxyz";
char AppPath[MAX_PATH];
int i, n, j;

using namespace std;

/////////////////////////////////////////////////////////////////////////////
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
cerr < < _T("Fatal Error: MFC initialization failed") << endl; nRetCode = 1; } else try { GetModuleFileName(AfxGetApp()->m_hInstance,AppPath,MAX_PATH);
CString l_oStrPath = AppPath;
CPathSplit l_oPathSplit(l_oStrPath);

CString l_oStrFileExt;
CString l_oStrPathCustom;
l_oStrFileExt = NOTES_INI;
l_oStrPathCustom = l_oPathSplit.GetPath(ePATHEL_DIRECTORY, & l_oStrFileExt);

CString BS(_T(BACKSLASH));
CString strPath(AppPath);
CString ThisDrive (strPath.Left(1) + BS);

fin = new CFile( l_oStrPathCustom, CFile::modeRead | CFile::shareDenyNone);
ULONGLONG dwLength = fin->GetLength();
char pbuf[99999] = {dwLength}; // read NOTES.INI
UINT nBytesRead = fin->Read( pbuf,dwLength );
fin->Close();

CString buffer(pbuf);

// replace drive letters with current drive
for (i=0; i < Drives.GetLength() ; i++) { CString DriveLetter (_T(Drives.GetAt(i) + BS)); j = buffer.Replace(_T(DriveLetter), _T(ThisDrive)); } // write notes.ini fout = new CFile( l_oStrPathCustom ,CFile::modeWrite | CFile::shareDenyWrite); fout->Write(_T(buffer),dwLength);
fout->Flush();
fout->Close();

// start the client
l_oStrFileExt = NOTES_PRG;
l_oStrPathCustom = l_oPathSplit.GetPath(ePATHEL_DIRECTORY, & l_oStrFileExt);
ShellExecute(0, "open", l_oStrPathCustom, 0, 0, 1);
}

catch (CFileException* pEx)
{
// if an error occurs, just make a message box
pEx->ReportError();
pEx->Delete();
nRetCode = 1;
}
catch (...)
{
nRetCode = 1;
}

return nRetCode;
}

Download Source


Notes Client on USB key

IBM announced Project “Wanda” at Lotusphere2006.

Project Wanda : for roaming users you can carry for entire Notes experience on a usb key that can plug into any computer regardless of if it has notes installed.

This is a great idea. I’m not at Lotusphere; so I’m not able to ask for further details. ( anyone out there who has details and would share his knowledge ? )
I guess, that they will use U3 technologie to accomplish this.

But why wait for Wanda ?
For all of you, who haven’t already have a Notes Client “installation” on an USB-key, here is what I did:

I just copied my local Notes folder to the key and tweaked the notes.ini. That was easy, wasn’t it ?

Ok, there are a few limitations:

  • The stick must have at least 350 MB of free space
  • Depending on the drive letter you have to tweak the notes.ini manually once again
  • You cannot start a Notes Database by double-clicking ( registry entries are missing).

As a workaround whilst waiting for Wanda, I will write a “starter” asap, so all you have to do is plug in the key and double click the nstart.exe. The nstart.exe will change the notes.ini for you.


Blog, blog, blogging from Lotusphere

Sitting in good ol’ Germany, I’m eager to read the “Bloggregator” ( by Richard Schwartz )
Yesterday there was a real information overflow due to a huge amount of blog entries. Today it seems to me that soft drinks flavoured with Yak pee, coffee and other energy drinks do not work any longer for the hardcore bloggers.
You can count the number of new entries by 10 fingers. What’s up ? 😉

Anyway, have a good time there at Lotusphere2006.


Why at least pay for what you can get free of charge ?

According to Ed Brill there are plans to have “standard out-of-the-box RSS feed support as well as blog template support” .
To be honest; why do I have to pay for new “features” I can get free of charge from the Open Source community ? I can download a well working Blog template from OpenNTF and can code a RSS feed using generic Lotus Notes capabilities.

It is ridiculous to offer more and more new features but leave the core product as is.
I’ve complained about the fact that it is not possible to change the column headers at runtime. The same complaint about tabbed tables labels.
Another one is about sections. Why can i change the twistie in views using an alternative to the standard picture but cannot use this in sections ?

Developers should rather concentrate on how to implement code for this than create functions for stuff that is already available