Subscribe: dominoExperts.com
http://www.dominoexperts.com/de/forum.nsf/dominoExperts.rss
Added By: Feedage Forager Feedage Grade B rated
Language: English
Tags:
accelerator pack  cache  content  dap  dojo  domino accelerator  domino  ibm  java  jvm  new  page  server  user  web  work 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: dominoExperts.com

dominoExperts.com



For Domino Experts by Domino Experts



Published: 2007-01-02

 



A question about http authentication
Hi, I want to use one time password passcodes . Is it possible to configure the redirection database to handle an extra field ( token ) and authorize the user checking its value ?. In addition I want to keep a single user name / password login form for the intranet users and a more complex login form with user name - password - token for the users comming from internet through a reverse proxy . Is it possible to check the IP and display the one ore the other login form? Thanks



charset problem getting data from the web
Hi I'm struggling to read data from a web site which has special character not converted correctly by Notes. In fact, the string is "FORLÌ|2000004708|14/02/2011" but I always get "FORL■2000004708|14/02/2011" here below the script I wrote which also include utf-8 character conversion but it doesn't work. is there anybody who already came across this problem and can give me some help? thanks in advance. mauro Set HTTPBolle=CreateObject("Microsoft.XMLHTTP") '### Leggo il link Web ### annoBolle$=Cstr(Year(Today)) URLServerBolle$ = "http://mysitexxx:8080/" + annoBolle$ + "Bolle/" URLBolle$ = URLServerBolle$ +FileBolleWeb$+"txt" Call HTTPBolle.open("GET",URLBolle$,True) ' Header (doveva esser eun UTF-8 in get ma nn va Call HTTPBolle.SetRequestHeader("Content-Type" , "text/xml;charset=utf-8") Call HTTPBolle.SetRequestHeader("SoapAction", "http://schemas.xmlsoap.org/soap/envelope") Call HTTPBolle.send(Null) '### LEGGO IL FILE DAL LINK WEB ### HTTPBolleTXT$=HTTPBolle.responseText



GZip servlet to gzip your pages
I have played a little with gzip compression. I am not sure of IBM's status of including it in domino. There are som issues with gzip and Internet Explorer so I can understand IBM's reluctance to support it. Anyways the servlet is listed below. You can take any domino-resource (in fact any web-resource what so ever) and supply the link as a parameter and the servlet will gzip the contents and deliver it. Notice that it will retrieve the content using the credentials of the logged in user. It mirrors all the cookies in the request to the server. This is the url format (you can try the link if you want): http://www.dominoExperts.com/servlet/gZip?url=/ It supports relative URL's but you could also pick up content from other sites. I have included the class file for those lazy kids that don't want to compile the servlet.   /* * Author: Tomas Nielsen * Created: 2007-08-09 * www.dominoExperts.com *//* Servlet to retrieve a URL's content and deliver it compressed using gzip - if the client can handle it. The servlet is completely transparent if the user is logged in, the page is retrieved with the users credentials. This is done by mirroring all cookies trough the proxy.Note: URL's can NOT contain spaces. That is not a valid URL. %20 or + is the way to go. Beware that there is a bug in HttpServletRequest.getParameter that will cause some disturbances with encoding if you use encoded URL's. Depending on your configuration it can for example misinterpret UTF-8 as ISO8859-1 or vice versa(it does not query the browser settings before converting, and some browsers do not even send encoding, so it is a gamble). Steps performed: - Get the URL content - Determine clients ability to do gzip - If able do the zipping thing- Deliver content Invoked trough: /servlet/gZip?url=xxx */import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.zip.GZIPOutputStream; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class gZip extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {         long executionTime = System.currentTimeMillis();         try {                 String u = req.getParameter("url");                 u = (u.charAt(0)=='/' ? "http://" + req.getServerName() + u : u);  // Allow relative URL's.                URL url = new URL( u )[...]



Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files

I am doing some work involving encryption and decryption and due to US export restrictions on crypto - standard Java has limits on key lengths.

The error shows in the form:

2012-08-07 11:05:19 HTTP JVM: java.security.InvalidKeyException: Illegal key size or default parameters
2012-08-07 11:05:19 HTTP JVM: at javax.crypto.Cipher.a(Unknown Source)
2012-08-07 11:05:19 HTTP JVM: at javax.crypto.Cipher.init(Unknown Source)
2012-08-07 11:05:19 HTTP JVM: at javax.crypto.Cipher.init(Unknown Source)
2012-08-07 11:05:19 HTTP JVM: at JavaAgent.NotesMain(JavaAgent.java:163)
2012-08-07 11:05:19 HTTP JVM: at lotus.domino.AgentBase.runNotes(Unknown Source)
2012-08-07 11:05:19 HTTP JVM: at lotus.domino.NotesThread.run(Unknown Source)

So after some googling I found out about the Unlimited Strength Jurisdiction Policy files and downloaded them from Oracle only to be greeted by:

2012-08-07 13:05:37 HTTP JVM: Exception in thread "AgentThread: JavaAgent"
2012-08-07 13:05:37 HTTP JVM: java.lang.NoClassDefFoundError: javax.crypto.b (initialization failure)
2012-08-07 13:05:37 HTTP JVM: at java.lang.J9VMInternals.initialize(J9VMInternals.java:140)
2012-08-07 13:05:37 HTTP JVM: at javax.crypto.KeyGenerator.getInstance(Unknown Source)
2012-08-07 13:05:37 HTTP JVM: at JavaAgent.NotesMain(JavaAgent.java:148)
2012-08-07 13:05:37 HTTP JVM: at lotus.domino.AgentBase.runNotes(Unknown Source)
2012-08-07 13:05:37 HTTP JVM: at lotus.domino.NotesThread.run(Unknown Source)

Even more research revealed that IBM has rolled its own Unlimited Strength Jurisdiction Policy files and they can be downloaded here:

http://www-128.ibm.com/developerworks/java/jdk/security/

The link requires you to log in either with your partner ID or the ID you use when buing Domino.

After changing the files at \Domino\jvm\lib\security everything is working great!




Domino 8.5.3 FP3 wipes out jvm/lib/ext directory

Over the years I have added some 40 JAR files to my jvm/lib/ext directory of my Domino server. Many of my customers have done the same thing.

It improves performance but mostly it is to prevent memory leaks.

But when upgrading to 8.5.3 FP3 the installer wipes the ext directory clean and replaces everything with the IBM jars.

So make a backup before!

If not it is always a good idea to test the backup strategy once in awhile.  (image)




Creating a session for a user

For a project I need to log in a user using an agent or a servlet on a Domino server.

Does anyone know of a way to do this without knowing the users' password?

It must be done in Single Sign On solutions so somehow it must be possible.

Any thoughts anoyone?




Domino Accelerator Pack 2.03 is out (Maintenance release)

Updates:
- Improves DAP memory management when handling larger file transfers.
- Remove annoying logging that would appear on console but not in logs.




Does DAP work OK when other DSAPIs on the same server?

If we were running one, or more, other DSAPI filters on our servers (like Tomcat redirector, offline, or a third party SSO),  would this DSAPI still work ? And if so could it be the lowest item in the list to allow the other to work properly?

 




Domino Accelerator Pack 2.02 is out (Maintenance release)

- Improves DAP Windows semaphore handling so less windows handles are allocated. We have not seen any direct issues with this but using less windows resources is always better.
- Dojo Builds use less memory while building.
- Dojo Builds compensates for older Dojo versions with missing requires.

While updating the semaphore handling we decided to add some of the Dojo Build improvements we were planning for a later release.




LTPA_DominoSecret invisible
I'm trying to get SSO set up with CAS (http://www.jasig.org/cas) and I need to access the LTPA_DominoSecret. I created the Web SSO document for my site, but the LTPA_DominoSecret field isn't there even after I create the SSO keys. IBM's site was useless, saying that if I'm the owner or administrator of the document (which I am), I should be able to see that field. I'm running 8.5.1... should that secret still be in the same place or did they move it (or remove it)? Thanks! - Drew



HTTPQueueMethod=2 notes.ini setting

I read up on some HTTP queue handling and stumbled on this.

In default Domino (6, 6.5, 7 and 8) HTTP queue handling a round robin method of assigning work to the HTTP threads is used. This could potentially leave a lot of HTTP threads idling and others doing hard work like performing agent-url's.
If you are unlucky you might be queued after such a URL and have to wait for the other one to finish - even though there are idling http threads!

If you enable HTTPQueueMethod=2 you will have assignment to the HTTP-thread with the least workload. There is a small price in OS overhead - switching threads.

If you do recursive calls to a domino server you might end up with a deadlock with the standard setting: Your first requests do a request for a XML-page on the same server and that second request ends up behind the first request. Classic deadlock scenario!

You can of course deadlock even with method 2 but it is less likely.

Domino does NOT support recursive requests!

I will try this one out and do some timings. Anyone has any experience with this one?




Using a web proxy software to help with web development

When developing modern web applications, especially using Ajax, being able to see what interactions your web browser have with the server will be really helpful.

There are a number of techniques to do this. Either the browser has some built in tool to do this (Chrome) or a plug-in like FireBug (Firefox). For Internet Explorer there are plug-ins as well like "IEHTTPHeaders".

Or there is the more traditional web proxy that you run as a separate program that intercepts port 80 traffic. I am using one of the latter called Charles Proxy. It is very well thought out and written in Java so it runs everywhere with all browsers.

Whichever you choose does not matter. What is important is that you can inspect the traffic from and to your web server.

You might want to know if your Ajax request actually fires, or if it has an Error 404 return. Having a proxy and knowing how to use it can really save you hour of work.

When it comes to web page optimization it is great to inspect what is loaded, load times and how much work can be done simultaneously.

Many of the tools will allow you to see a graph of the items being loaded and you can see if your page design is causing issues and hold-ups of a smooth page loading.

What is your favorite web development tool?




Domino Accelerator Pack roadmap ahead

I have had a lot of questions about where Domino Accelerator Pack is heading and instead of writing emails to everyone I will just post it here.

We have a lot of ideas and we have to prioritize to make the right decisions come out first. Here is some of the features coming in short term:

- We have found a way to get DAP to work with the versions of Domino suffering from the DSAPI problem. This is high priority of course even though newer Domino versions do not suffer from this.

- Shredding even more weight of Domino pages. Page Optimization. For some time we have looked at Domino pages and found a lot of unnecessary scripts and malformed HTML that was needed when you support Netscape 1.0 and Internet Explorer 2.0. This extra weight can be taken away from your pages without any harm. We have seen pages shred as much as 1000 bytes in the lab. For a majority of the pages (opendocument, openform, editdocument) we have roughly 450 bytes of reduction. That is before GZip. This feature will be enabled by default for the entire server but can be turned off either for individual pages or for all pages.

- Performance measuring. We will make it possible to get performance data from your pages in real time so you can really tune that web-agent, form or XPage.

- DefaultCache=true. Instant cache fix. DAP will have an option to enable caching for all known static content on the server. This will be a very effective "GoFaster=1" option for your server and, most of all, your users.

 

Long term goals:

- The DAP interface is being migrated to Dojo.

- GUI to give the ability to reset parts of the cache.

- Web trace plug-in.

Web-trace for a user. What content has been sent to a user? Enables you to debug web applications remote in real time.

The web trace will be able to trace all input and output sent to and from a specific user. This will enable developers to find errors occurring for a certain user without actually being on site. The Web Trace also measures how long pages take to render so you can spot any bottle necks. Especially useful when you get the error report "the system is slow".

Future:

- SDCH - Shared Dictionary Compression over HTTP. We are following what happens with Google's initiative with Chrome and support for "Shared Dictionary Compression over HTTP". At the moment not many browsers support it, only Chrome has native support and there is a plug-in for Internet Explorer. Google's studies show 40% improvement over gzip. Could be interesting.

- WebP - Weppy. Google's new proposal for image compression. Google claims an average 39% reduction on images in the wild. We have working code here and are eager to try it out but we miss a browser that can show WebP images.

- HTML5's cache manifest. We have some ideas on how to take advantage of this.

 

Note that the order of or the contents of the listed items may change.

 




When to use the private cache header

When setting up caching for your web applications there is a feature you can make use of that will cache the content on a per user basis.

The Cache-Control directive have an extra parameter "private" that you can set to make sure no proxies will cache the page and deliver it to someone else.

If your Domino server is on the Internet you MUST take this into consideration if you are in a corporate LAN you might already have proxies in house or you might get it in the future. In any case you should know about this.

As an example I have had one customer that introduced proxy servers into their LAN (without telling the web developers) and suddenly there was a complaint from one country that the local intranet start page had not changed for three weeks. The proxy had picked up an malformed cache header and somehow decided it could cache it forever. The page was super fast, just not very current.

The same can happen if you are on the Internet. You, as a web developer, have no knowledge of what is between you and your users. Local ISP's can have proxies set up to save bandwidth. Also about 20% of the internet traffic goes through Akamai caching proxies. You need to think about this.

Say you have a page in you web application where you can look at the latest issues in a work flow. If the URL is identical for all users and you decide to cache the page without the private parameter any proxy in between will think it is fair game to cache the page for everyone. If you add the private parameter like:

@SetHTTPHeader("Cache-control";"max-age=600,private");

Any proxy, including Domino Accelerator Pack, will detect it as content not appropriately for caching.

The content will still cache locally in the browser but you are sure no proxies in between will.

So if you have a local proxy or you are on the Internet and IF you have content that is unique for a single user you should set the Cache-control: private header.

Using the private header you can still cache content for that user but make sure no one else gets the same content.




Redirect Unauthenticated Users
I'm working on integrating iNotes 8.5 with Jasig CAS (Central Authentication Service). An issue I've run into is that if a page requires authentication, I need to redirect the user to the CAS login page rather than Domino's, and then after they've logged into CAS, I need to send them back to the page that they were trying to access. Is this possible? I'm free to make whatever modifications I need to the CAS server, and I've already configured it to set an LtpaToken for the user. So for the short version, I need to: 1. Redirect the user to CAS to log in 2. On return from CAS, display the page the user was trying to access Thanks! - Drew



Web Browser hard refresh - what is that?

Not many know of the hard refresh in web browsers and if they know of it they do not know what happens "under the hood". During the development of Domino Accelerator Pack I have had to look in depth into the mysterious Hard refresh.

First of all, a hard refresh is not when you hit the F5 key with a hammer ;) you initiate it like this:

Firefox: Hold down Shift button and click the reload icon. Or Shift-Ctrl-R.
Chrome: Hold down Ctrl button and clicking on reload icon. Or Shift-Ctrl-R.
Internet Explorer: Hold down Ctrl button and clicking on reload icon. Or Ctrl-F5.

The hard refresh forces all elements on a web page to be reloaded from the server. The browser will ignore any cached versions existing in memory or on disk on the client side and request everything from the server.
The web browser will also send an extra request header (Pragma: no-cache and some browsers also: Cache-Control: no-cache) signaling to the server that it wants the latest version and not a server cached version.

Do not confuse this with a simple reload. An ordinary reload will only refresh the base page and will just ask if there are any updates to the elements of the page.

Be aware though that requests made through Ajax calls, after the page has loaded will not be hard refreshed.

Any proxy servers along the way between the browser and the server shall also listen to the no-cache signal from the browser and release their caches. So it is a good and effective way of knowing you have the latest content in your browser.


If you are using Domino Accelerator Pack it will listen for incoming hard refresh and refresh the server side cache for all requests coming in with a hard refresh header. You can use this to refresh the cache if you have made changes to objects that are in the server cache. By doing a hard refresh on changed content you do not have to reset the entire server cache to push out new content.

Bonus tip: If you want to clear the local cache of your web browser, most modern browsers have agreed on the same short cut: Shift-Ctrl-Del to bring up the "empty cache" dialog. Note that this will not prevent the browser from getting server side cached versions. You still want to use the hard refresh for preventing that.




WebP support for Domino, anyone?

I am not always the first with new tech - I'd like it to mature a bit - but this evening I have played around with some sources for Google's new image format, WebP. Apparently it is pronounced "weppy". I have managed to compile it for windows and have tried to run some of my photographs trough it.
 
The compression is amazing! I fed it a photo of our youngest son when he helps me disconnect our radio.

Input size: 1 255 561 byte.
Output size: 548 309 byte.

This is with the highest quality factor 100!

Original image: Image link here!
Compression 100: Image link here!

Imagine if we allowed a lower quality factor. I did try with quality 55 and got a 41 397 byte file. You can see it has some artifacts but given the compression it is great!

Compression 55: Image link here!

Unfortunately there is no viewer available to this day so to look at it I have to convert it back to PNG (loss less) to view it. (I have included the PNG files for you to comapare quality)
When I compare the images I see no apparent difference at all! (If some of you are photo-nuts you will probably correct me here)

I have attached the images here. One day you might be able to look att the weppy ones also.

Maybe we should put WebP support into DAP? The compression sure is impressive!




Single Sign-On configuration is invalid

I got stuck on a SSO config the other day. I have done it a couple of times before for different organizations but this one failed when loading the HTTP task.

2010-10-08 22:48:29   HTTP Server: Error loading Web SSO Configuration 'LtpaToken' (Single Sign-On configuration is invalid)

IBM has a helpful document about not having two SSO documents with the same name but I had found a new one apparently.

What I had done was that I had entered an "Organization" under Token Configuration even though the server was running Web onfiguration and not Internet Sites which caused Domino not to find it.

I actually went and looked at the Server form to find out how it worked. This is great with Domino you can look into everything!

(image)

If you are having troubles with SSO configurations you can inspect all of them, regardless of if they are Web configs or Internet sites, in the view "($WebSSOConfigs)".

The view is hidden but you can open it with the old trick:

Open the NAB in the notes client and while holding down Ctrl-Shift, Choose View -> Go to...

Scroll down in the list of views to "($WebSSOConfigs)", select and OK.

All SSO configs for a certain domain has the domain as a prefix in the view and the other ones are just listed with their names.

 




What is static and what is dynamic - where to cache?

First time implementers of caching often stand confused to what can be cached. I have had a client that was absolutely certain that all caching was bad - that only prevented us from showing the latest information. Obviously they had bad experiences with wrong set caching in the past.

Ideally you would design your web applications with caching in mind from the start but it is not uncommon that you have a situation with a lot of existing web applications and you have to start identifying static content.

So, deciding on what to cache and not to cache. I would like to break it down into three categories:

- Definitely static content. Will not change at least not for a long time. This is images, CSS and the like.
- Definitely NOT static content. Views, certain forms and content protected by user access.
- Semi static content. This is tricky. Let me explain.

Semi static content is content that might change a couple of times a day. Say you have a company intranet start page.

You would like the page to be very fast as it loads hundreds or thousands times per day and it has probably matured over time to contain WebQueryOpens, 10-50 DbLookups, Repeatcontrols or whatever web designers have put in there.

Setting a cache time of 1-10 minutes will save the server a lot of repeat hits and your users will still get the latest version the first time they hit the page - they will just miss out for 10 minutes if there is a change after that.

For static content setting up web rules to set expires headers on images is the only way. For HTML and CSS files you have the option to set the expires headers with the @SetHTTPHeader.

If you are using Domino Accelerator Pack you will also have server side caching. DAP will look at content being sent to the users and cache content in memory depending on their cache settings.

If we take the example of the frequently used company home page. If we can cache it in memory for just one minute on the server Domino will only have to recalculate the page once every minute and you would only have a one minute delay of updates.

All requests would be served compressed directly from memory meaning 0 ms render time.




Weekly Web Performance Tip

I have added a new forum section, "Weekly Web Performance Tip".

Starting this week we will have a Web Performance article running each week. Feel free to comment or add your own performance tip!

The first article will arrive shortly, happy reading!




Important DAP info for users of Domino 8.0.2 FP3 and 4; 8.5.1; 8.5.1FP1

Because of a bug in the DSAPI introduced in the SPR MKIN7TGMQV DAP does not work with the versions with this fix in it.

If you are running any of the above mentioned versions of Domino you should open a PMR with IBM asking for a hotfix and refer to the SPR MKIN823SZZ which resolves the problem.

We have worked very closely with IBM quality engineering the last couple of weeks to have a hotfix ready. Unfortunately I cannot make the hotfixes available here but you have to ask IBM for them.

Please contact me if you have any further questions about this.

 




Missing dojo.require in dijit._DialogMixin

I got a question from one of our customers about a JavaScript error when using the automatic DojoBuild in DAP.

DAP's dojobuild will automatically take all the dojo.requires on your web page and build a custom build for you in real time, compress it and cache it. It will save you many many requests and reduce page load time dramatically.

After some digging it turns out that in one of the dojo components, dijit._DialogMixin, there is a missing dojo.require statement: dojo.require("dijit._Widget");
That was the reason for the faulty build.

To help make Dojo better we have submitted a ticket here: http://bugs.dojotoolkit.org/ticket/11089

Since this flaw has been in there for some Dojo generations I will put in a programmatic correction in the next release of DAP.

For now, just add a dojo.require("dijit._Widget") in dijit/_DialogMixin , and the build will be fine. Depending on which dojo.requires you have on your pages you might not even be affected by the issue.




Domino Accelerator Pack 2.01 is out (Maintenance release)

This is a maintenance release to handle the DSAPI bug introduced in later versions of Domino (read more here) and to improve the Dojo build system.

2.01 Fix list:

- Added detection of Domino versions with the DSAPI bug in them and prevent DAP start.
- Fixed a bug where some Dojo builds with circular requires would never finish.




Updated license file

For those asking about the license file in the trial download, I have updated the date.

This will be automated shortly.




Windows 7 won't activate - Code 0x8007232B – DNS name does not exist

I am trying out different operating systems and I thought I would give the 64 bit Win7 version a spin on my work laptop. I have always been a bit annoyed with the 32 bit XP that I lose 600 MB of memory due to the 3,4 GB limit of 32 bit operating systems.

Win7 64 bit seems to work fine so far. But a couple of days into running it it started nagging me about activation and every time I tried to activate I got the error:

Code 0x8007232B – DNS name does not exist.

After some searching I found out the fix. Apparently there is a bug that has been around since the Vista days and it is still not fixed. Here is the solution:

Right click My computer, Properties.

Choose "Change product key" and enter your key once more (same as when installing). It will start to activate and 60 seconds later it works!

So far everything else seems to work fine. Only Daemon Tools lite does not work at all with 64 bit win7.




Sweden - Denmark - 0-1

As a Dane living in Sweden it is really hard not to be a little extra amused when Sweden cannot hold back the Danish dynamite even when most of the best Danish players are not participating.

Anyway, I have laid out my oldest son's football gear for tomorrows training. I guess I need to attend just to make sure it is a fair game.  (image)

 

 (image)




Domino Accelerator Pack 2.00 is out (Automatic Dojo builds)

This is a major new release with a lot of new features!

New in this version is the automatic Dojo build system. IBM has whole heartedly embraced the Dojo JavaScript framework for Domino and so has DAP.

The automatic Dojo build system will analyze your web page and make a Dojo build with the Dojo components used on the web page. The build will combine all the individual dojo files and compress it and cache it in memory. Saving from 15 - 115 requests can be expected for a single page using dojo. Your applications will not require any rewrites, DAP will change your HTML page to use the Dojo build for you.

Also new in this release is the DAP-Commands. It will let you insert HTML-commands that will instruct DAP to combine JavaScript and StyleSheet files on a page into one request.
DAP-Commands can speed up existing Domino applications while still maintaining backwards compatibility with servers not running DAP.

The long awaited 64 bit version is also included in this release. See the 64_bit directory in the .ZIP file.

 (image) Download DAP 2.00.zip




Domino Accelerator Pack gets validated as "Ready for IBM Lotus software"!

After having completed all the qualifying technical validations of our product, Domino Accelerator Pack 1.50, we are very proud to announce that it has received the "Ready for IBM Lotus software" quality sign.

(image)

A big thanks to all the hard working people at IBM for the good team work in the process!




Domino Accelerator Pack gets accepted into IBM Global Solution Directory

I have had a lot of contact with IBM lately and they suggested I apply to have Domino Accelerator Pack listed in the Global Solution Directory.

So, said and done. We now have a listing!

http://www-304.ibm.com/jct09002c/gsdod/solutiondetails.do?&solution=39976&lc=en

We are working on some other activities together but more on that later.  (image)




Cluster environment

Tomas--

My company is interested in experimenting with DAP. My team has the trail version but we have a question about the assimilation into our environment. Specifically, we use clustered servers. How does the DAP installation work for this type of setup?

FYI.  Our company  has Domino teams in many  countries worldwide

 

 




Lazy loading Dojo

Loading and instantiating Dojo can make a web page appear slow. So in an experiment I wanted to load dojo after the page had loaded and filled the screen with information.
This works very well and I thought I should write a small example. I am utilizing this on the front page of dominoexperts.com's site for the live performance graph.
This is how it works:

After onload, run all your onload scripts and when done run a function to load dojo like this:

function loadGraph() {
 djConfig = {afterOnLoad : true,
  addOnLoad:function() {initLoader();},
  useXDomain: true
 };
 var e = document.createElement("script");
 e.type = "text/javascript";
 e.src="/dojo-release-1.3.1/dojo/dojo.xd|/dap/dap.nsf/dap2|/dojo-release-1.3.1/dojox/gfx/shape.xd|/dojo-release-1.3.1/dojox/gfx/path.xd?dapmerge";
 document.getElementsByTagName("head")[0].appendChild(e);
}

As you might have guessed dojo is loaded trough a script-insertion. The 4 last lines of the script inserts a |
   Print ||




DominoDisableFileUploadChecks=1

I found this one while at a customer where we have a WebSphere Application Server application posting file attachments to a Domino server.

To save time we were just using a form with a file upload control on it and have WAS posting to that form. Works fine for two years.

Then when I have to do maintenance on the form and resaves it. WHAM:

HTTP Web Server: File Upload Not Allowed Exception

All over the logfile.

It turns out that somewhere, I believe in 6.5, IBM decided to have more strict tests on the forms being posted. The form worked fine until i "touched" it with a newer Domino Designer client. After that the only way to get it to work was to put back an old backup of the database or to add this notes.ini setting.

I just thought it could be nice for others to know about this one.




Chat un-feature
An option to disable fetching new chat messages would be nice. And an option to hide my online availability.



Small Ajax example

I found this on JavaScriptKit. It shows a nice way of including html on an already loaded page.

function HttpRequest(url){
var pageRequest = false //variable to hold ajax object
/*@cc_on
   @if (@_jscript_version >= 5)
      try {
      pageRequest = new ActiveXObject("Msxml2.XMLHTTP")
      }
      catch (e){
         try {
         pageRequest = new ActiveXObject("Microsoft.XMLHTTP")
         }
         catch (e2){
         pageRequest = false
         }
      }
   @end
@*/

if (!pageRequest && typeof XMLHttpRequest != 'undefined')
   pageRequest = new XMLHttpRequest()

if (pageRequest){ //if pageRequest is not false
   pageRequest.open('GET', url, false) //get page synchronously
   pageRequest.send(null)
   embedpage(pageRequest)
   }
}

function embedpage(request){
//if viewing page offline or the document was successfully retrieved online (status code=2000)
if (window.location.href.indexOf("http")==-1 || request.status==200)
   document.write(request.responseText)
}

HttpRequest("external.htm") //include "external.htm" onto current page




Förslag

Denna eminenta awareness-funktion, skulle jag gärna vilja inkludera ytterligare ett menyalternativ i menyn. Nämligen möjligheten att kunna se meddelandehistorik (om det är möjligt så som i google talk). Om det nu lagras/tillåts lagras som en användarinställning. Vore nice. 




GetNthItem

Function I made to retrieve the Nth item when multiple notes items are stored in one document. Note: This has not been tested yet.

Function GetNthItem(Byval Itemname As String, Byval Index As Long, Byval doc As NotesDocument) As NotesItem
 Dim item As NotesItem
 Dim Counter As Long
 Dim found As Boolean

 Forall item In doc.Items
    If ( item.Name = Itemname ) Then
   If ( Counter = Index ) Then
    found = True
    Exit ForAll
   End If
   Counter = Counter + 1
  End If
 End Forall

 If found Then
  GetNthItem = item
 Else
  GetNthItem = Nothing
 End If
End Function




Is the 7.03 version out there yet?

Is it comming or have I just missed it?




replaceSubstring in javascript

This is one of my favourite one liners. All domino developers know the syntax from the @-formula language so why not have it in Java Script.

function replaceSubstring(exp, str, wit) { return exp.split(str).join(wit); }