Бюллетень "Lotus Notes CodeStore" No 45 от 2008-07-04
Рассылку ведет: Программист на Lotus NotesLotus CoderВыпуск No 45 от 2008-07-04
рассылка о программировании на Lotus Notes/Domino Обсуждения на форумах, блогах. Примеры программного кода на LotusScript,@formula, Java рассылка:выпускархивлентаблогсайт Бюллетень "Lotus Notes CodeStore" Выпуск 13 от 21.04.2008comp.soft.prog.lotuscodesrore
Форумы.Свежи темы и обсужденияЗдравствуйте. Я начинающий программист под Lotus. Столкнулся с такой проблемой:
- база создана и спроектирована в lotus designer 5.x
- документы создавались и редактировались в lotus note 5.x
- возникла необходимость внести изменение в одну из форм. Были добавлены два поля Rich Text и две кнопки, обрабатывающие Click и добавляющие данные в эти два поля RT (@Command([EditGotoField]; "pole"); @Command([EditInsertFileAttachment])). Изменения были внесены из-под lotus des 8.0 english ( без файла лицензии, в течение ознакомительного периода ).
- описание проблемы - из-под lotus note 5.x имеется возможность создания документа, редактирование и т.д. без ограничений. Из-под 7.x-8.x возможно только создание. Документ на редактирование не октрывается. В чем проблема ??
- учетная запись - Designer со всеми правами. Ролей нет сделал реплику базы на локальный комп, открыл в 7 - могу создавать и редактировать, а на сервере не могу Привет всем. У меня такая проблема: уволился админ лотуса, и нужно изменить пароль его учетной записи. Что бы он даже при наличии старого ID файла не смог зайти на сервер. Как это сделать? Я пробовал перерегистрировать учетную запись администратора со сменой пароля, но со старой ID учеткой и со старым паролем все равно входит. Подскажите, что делать? Я Спасибо! кто подскажет, где можно найти схему иерархии классов или сущностей LotusScript ( желательно 7 и старше версий ) Не везде возможно перейти на Sametime, приходиться ICQ использовать. Но возникла проблема - нужно протоколировать сообщения и управлять пользователями - безопасность однако. Обнаружил шлюз ICQ пишуший в Domino и управляемый оттуда: Proxymus for Lotus Domino (http://www.cs-soft.ru/data1/cssoft.nsf/pagesmenu/proxymusmain) Кто что еще видел подобное? Может есть отзывы? Есть проблема:
Sametime 8.0 Standart установлен на Lotus Domino 8.0 (ОС Win Srv 2003 R2) Создаю конференцию в которой участвуют как пользователи локальной сети, так и удаленные (через Интернет). Используется звук и видео.
Сначала между собой общаются два юзера: локальный и удаленный. Все нормально, все слышно и видно. Как только подключается третий, из локальной сети, сразу перестает быть слышен удаленный, хотя локальные слышат друг друга и удаленный слышит их. Добрый день.
сейчас рассматриваем вопрос по переходу на Lotus, встает вопрос как сохранить переписку из клиента MS Outlook, т.е. каким образом импортировать письма с сохранением папок из Outlook`а в Notes.
Заранее спасибо. Здравствуйте! Помогите решить проблему с подключением jar файлов в Lotus 5. В более старших версиях проблем нет. В частности в 7ке, в java агент добавляю библиотеку jar, подключаю из нее классы, и все прекрасно работает, а в 5ке не подцепляет. К сожалению, от 5ки уйти не могу. Как заставить 5ку видеть классы jar библиотеки? Спасибо! Sergey Berezka: Tips for installing multiple Lotus Notes Client releases on a single system или просто запускать nlnotes.exe PavelT100: Как на Lotus Script можно проверить наличие файла на диске ? На текущий момент я придумал тольк воспользоваться командой dir и запускать ее через shell - но это как-то уж очень коряво, а по другому нельзя ? В базе есть форма для создания документов. На основе этой формы сделан поиск по базе: после заполнения полей ( некоторых полей ) и нажатия соответствующей кнопки, формируется строка поиска и создается коллекция документов при помощи метода базы данных Search. В коде кнопки (LotusScript) последняя команда - закрытие формы. Есть одна проблема: выскакивает диалоговое окно с предложением сохранить документ. Как этого избежать ? Очистка всех полей формы не помогает. bqq: Предыдущий админ повздорив с начальником исчез затерев admin.id.Что можно предприняь чтобы получит права админа сервера? Вер.Lotus Notes 6.5 collection: Помириться и попросить у него прощения, с админами вздорить не нужно , ваш вопрос можно рассматривать и сточки зрения: как можно взломать сервер Lotus Domino 6.5, преценденты были но в последних фиксах все это исправили забыл про особенности... - какой числовой формат лучше использовать в LS для операций: деление умножение, округление (станд.)? Перевод [RU] Сообственно сабж..... Задача такая что бы минимизировать трафик при синхронизации почты, контактов, задач. можно ли это яблочное чудо прикрутить к Травелеру, если можно то через что? Интересные темы: Список форумов: Tips. СоветыIn some cases domcfg.nsf allows anonymous users to over-write settings!
A good customer of mine pays me to be on a yearly support contract, whereby I'm always there to help at short notice. The other morning I came to the office first thing to find a couple of worrying tickets had been logged. Having helped sort the problem I want to pass on what we found as it might save you the trouble. Their web presence is all but closed off -- access is only by registration and subsequent authentication. It was the registration process (open to Anonymous users) that showed the obvious signs of attack. At first it looked like spam but on closer inspection was in fact an attempt to hack the server. The main method of attack appeared to be SQL injection and so there was no real cause for concern as Domino is obviously immune to that method. What got me worried was when I investigated the ticket that stated all their website's login forms had reverted to the "one with a key on it". On opening domcfg.nsf it was immediately obvious the attack was Domino-aware and security had been compromised. Every document in domcfg.nsf had had its field values over-written with the same patterns used by the attack (Google value777.com and you'll see what I mean). Needless to say I was shocked, got on the phone and had them shut down the http task right away. The attackers must be Domino-aware as there's no other way they could have found domcfg.nsf. My next action was Googling "public access to domcfg.nsf" which took me straight to Chirs Linfoot's post on the problem. An interesting reply if from Kendall and points out: domcfg.ntf's [-Default-] entry doesn't have "Write public docs" checked. When adding Anonymous, did you set it to No Access and then set it to Reader? Notes has this annoying "feature" where upgrading access checks boxes you don't check, and downgrading unchecks boxes. Because of this, I've learned to carefully inspect all checkboxes in the ACL when changing entries. How it happened in this case I don't know, but Anonymous users had the write access to everything in domcfg.nsf. If you run a web server on Domino check your domcfg.nsf now! No real harm came of it and we were able to restore the old setting from backup but an interesting question was raised by the customer -- were the attackers trying to harvest username and passwords? It go me thinking. Although my immediate reaction was that this isn't possible I can't say I was completely sure of it at first. What if there was some way of manipulating the sign-in form via domcfg.nsf so that all login requests were sent elsewhere without your knowledge. Scary stuff. The other week I added Google Analytics to all the web-facing applications I'd produced for a customer. They then asked if I'd mind adding it to a copy of DominoWiki they used. "Not at all" I said, knowing it to be a two minute copy-paste task. The trouble is it turned in to a two hour job! Google Analytics adds itself to a page using this line of code: document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); This adds a Script tag to the document and loads the required code from Google's site. That's the idea. On the DominoWiki page it didn't add a tag though. It just wrote the escaped string to document itself as visible text. The first thing I did was add some more JavaScript lines to test the result of escape('<'), which it bizarrely returned as '<'. Since when did escaping do that!? After about an hour of messing about with charset settings and whatnot I started to reverse engineer the page to the point where I found that removing the reference to the wiki.js file solved the problem. Looking about in that file I found the following function: /* unescape Decode an XML string */ function unescape(s) { var n = s; n = n.replace(/</g, "<"); n = n.replace(/>/g, ">"); n = n.replace(/"/g, "\""); n = n.replace(/&/g, "&"); return n; } Whoever coded this part of the Wiki had re-written the built-in escape/unescape JavaScript functions. I'm sure I don't need to tell you how naughty that is. Not only bad practice but just plain annoying for the likes of me who come in afterward to do anything and spend half their morning struggling to work it all out. The fix is simple enough. Just add the following two lines to the unescape() function in wiki.js: //Following two lines required for Google Analytics to work n = n.replace(/%3C/g, "<"); n = n.replace(/%3E;/g, ">"); Here's a massive list of "reserved" words you should avoid using in your own code as variables or function names. If you really want a function called unescape then it's better defined within your own global object. For example the wiki.js file could contain this code:var Wiki = {}; Wiki.unescape = function(s) { var n = s; n = n.replace(/</g, "<"); n = n.replace(/>/g, ">"); n = n.replace(/"/g, "\""); n = n.replace(/&/g, "&"); return n; } There's then little to no chance of the code conflicting. Not just with others developers code but also with the inbuilt code of the browser. Right then, back to what I should have been doing... The other week I added Google Analytics to all the web-facing applications I'd produced for a customer. They then asked if I'd mind adding it to a copy of DominoWiki they used. "Not at all" I said, knowing it to be a two minute copy-paste task. The trouble is it turned in to a two hour job! Google Analytics adds itself to a page using this line of code: document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); This adds a Script tag to the document and loads the required code from Google's site. That's the idea. On the DominoWiki page it didn't add a tag though. It just wrote the escaped string to document itself as visible text. The first thing I did was add some more JavaScript lines to test the result of escape('<'), which it bizarrely returned as '<'. Since when did escaping do that!? After about an hour of messing about with charset settings and whatnot I started to reverse engineer the page to the point where I found that removing the reference to the wiki.js file solved the problem. Looking about in that file I found the following function: /* unescape Decode an XML string */ function unescape(s) { var n = s; n = n.replace(/</g, "<"); n = n.replace(/>/g, ">"); n = n.replace(/"/g, "\""); n = n.replace(/&/g, "&"); return n; } Whoever coded this part of the Wiki had re-written the built-in escape/unescape JavaScript functions. I'm sure I don't need to tell you how naughty that is. Not only bad practice but just plain annoying for the likes of me who come in afterward to do anything and spend half their morning struggling to work it all out. The fix is simple enough. Just add the following two lines to the unescape() function in wiki.js: //Following two lines required for Google Analytics to work n = n.replace(/%3C/g, "<"); n = n.replace(/%3E;/g, ">"); Here's a massive list of "reserved" words you should avoid using in your own code as variables or function names. If you really want a function called unescape then it's better defined within your own global object. For example the wiki.js file could contain this code:var Wiki = {}; Wiki.unescape = function(s) { var n = s; n = n.replace(/</g, "<"); n = n.replace(/>/g, ">"); n = n.replace(/"/g, "\""); n = n.replace(/&/g, "&"); return n; } There's then little to no chance of the code conflicting. Not just with others developers code but also with the inbuilt code of the browser. Right then, back to what I should have been doing... The other week I added Google Analytics to all the web-facing applications I'd produced for a customer. They then asked if I'd mind adding it to a copy of DominoWiki they used. "Not at all" I said, knowing it to be a two minute copy-paste task. The trouble is it turned in to a two hour job! Google Analytics adds itself to a page using this line of code: document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); This adds a Script tag to the document and loads the required code from Google's site. That's the idea. On the DominoWiki page it didn't add a tag though. It just wrote the escaped string to document itself as visible text. The first thing I did was add some more JavaScript lines to test the result of escape('<'), which it bizarrely returned as '<'. Since when did escaping do that!? After about an hour of messing about with charset settings and whatnot I started to reverse engineer the page to the point where I found that removing the reference to the wiki.js file solved the problem. Looking about in that file I found the following function: /* unescape Decode an XML string */ function unescape(s) { var n = s; n = n.replace(/</g, "<"); n = n.replace(/>/g, ">"); n = n.replace(/"/g, "\""); n = n.replace(/&/g, "&"); return n; } Whoever coded this part of the Wiki had re-written the built-in escape/unescape JavaScript functions. I'm sure I don't need to tell you how naughty that is. Not only bad practice but just plain annoying for the likes of me who come in afterward to do anything and spend half their morning struggling to work it all out. The fix is simple enough. Just add the following two lines to the unescape() function in wiki.js: //Following two lines required for Google Analytics to work n = n.replace(/%3C/g, "<"); n = n.replace(/%3E;/g, ">"); Here's a massive list of "reserved" words you should avoid using in your own code as variables or function names. If you really want a function called unescape then it's better defined within your own global object. For example the wiki.js file could contain this code:var Wiki = {}; Wiki.unescape = function(s) { var n = s; n = n.replace(/</g, "<"); n = n.replace(/>/g, ">"); n = n.replace(/"/g, "\""); n = n.replace(/&/g, "&"); return n; } There's then little to no chance of the code conflicting. Not just with others developers code but also with the inbuilt code of the browser. Right then, back to what I should have been doing... Why, why, why can't we create an OutputStream in a Domino Java Agent!?
While writing this entry I'll try not to turn it in to just another long dig at Domino, but it might end up going that way. Sorry. I'm writing a CAPTCHA plugin for a Domino site at the moment. Although I've managed to get a working solution I can't help but feel it could have been a whole lot easier to achieve were there not a couple of things missing from the basic toolkit of a Domino developer. Creating images on the fly using Java Agents is actually a lot easier than you might think. The hard part -- at least with Domino -- is getting the resulting image to the browser. There are several Java libraries out there for creating CAPTCHAS but they all seemed huge to me and just a little OTT. Not only that but the two or three I looked at (including the most popular JCaptcha seem to rely on you having such a thing as a user "session" that ties separate page requests together. We don't in Domino and so can't use them unless we're willing to suffer writing and deploying servlets (something I'd leave to the very end until I went down that route). After further searching I found the source to a JSP page where somebody had written a CAPTCHA generator in less than 100 lines of code. That's what I like to see. Lean and to the point. Not that is was a simple case of copy/paste of course. The code was written using parts of Java, such as ImageIO, which were only introduced in Java 1.4. My target was a Domino 6 server, which only has Java 1.3 (Domino 7 has Java 1.4). After more searching I found you could write JPEG files using an undocumented package called com.sun.image.codec.jpeg in Java 1.3. The trouble here though is that there's no way to write the JPG file you've produced directly to the browser. The main way a Java Agent writes to the browser is using the PrintWriter class, but this won't let you work with files and their inner bytes. Just text! Mikkel Heisterberg has written about this limitation on his well-worth-reading blog. He found that there's an undocumented method in Domino 7's Java called "getAgentOutputStream()" which gives us an OutputStream object. This is exactly what we need. The trouble is it's buggy and unusable. Whether it works in Domino 8 or not I don't know? The only real way (although I hope somebody is going to correct me on this) to get the image to the browser is to save it to the server's disk first! Saving to the server's disk is easily done and isn't a big deal, as long as you clean up after yourself, but I'd prefer to avoid that in the first place. Not only because it means you have to make sure code is signed with IDs that are allowed to run unrestriced code and the Agent itself needs to have an increased level of access, but it also means you have to make sure the Agent never gets updated by a copy signed with another ID, which would break the code. It's really quite messy. Why, why, why can't we create an OutputStream in a Domino Java Agent!? While writing this entry I'll try not to turn it in to just another long dig at Domino, but it might end up going that way. Sorry. I'm writing a CAPTCHA plugin for a Domino site at the moment. Although I've managed to get a working solution I can't help but feel it could have been a whole lot easier to achieve were there not a couple of things missing from the basic toolkit of a Domino developer. Creating images on the fly using Java Agents is actually a lot easier than you might think. The hard part -- at least with Domino -- is getting the resulting image to the browser. There are several Java libraries out there for creating CAPTCHAS but they all seemed huge to me and just a little OTT. Not only that but the two or three I looked at (including the most popular JCaptcha seem to rely on you having such a thing as a user "session" that ties separate page requests together. We don't in Domino and so can't use them unless we're willing to suffer writing and deploying servlets (something I'd leave to the very end until I went down that route). After further searching I found the source to a JSP page where somebody had written a CAPTCHA generator in less than 100 lines of code. That's what I like to see. Lean and to the point. Not that is was a simple case of copy/paste of course. The code was written using parts of Java, such as ImageIO, which were only introduced in Java 1.4. My target was a Domino 6 server, which only has Java 1.3 (Domino 7 has Java 1.4). After more searching I found you could write JPEG files using an undocumented package called com.sun.image.codec.jpeg in Java 1.3. The trouble here though is that there's no way to write the JPG file you've produced directly to the browser. The main way a Java Agent writes to the browser is using the PrintWriter class, but this won't let you work with files and their inner bytes. Just text! Mikkel Heisterberg has written about this limitation on his well-worth-reading blog. He found that there's an undocumented method in Domino 7's Java called "getAgentOutputStream()" which gives us an OutputStream object. This is exactly what we need. The trouble is it's buggy and unusable. Whether it works in Domino 8 or not I don't know? The only real way (although I hope somebody is going to correct me on this) to get the image to the browser is to save it to the server's disk first! Saving to the server's disk is easily done and isn't a big deal, as long as you clean up after yourself, but I'd prefer to avoid that in the first place. Not only because it means you have to make sure code is signed with IDs that are allowed to run unrestriced code and the Agent itself needs to have an increased level of access, but it also means you have to make sure the Agent never gets updated by a copy signed with another ID, which would break the code. It's really quite messy. Why, why, why can't we create an OutputStream in a Domino Java Agent!? See if you can find a hole in the way I create CAPTCHA images that might mean it's not as secure as it should be. See if you can find a hole in the way I create CAPTCHA images that might mean it's not as secure as it should be. As I mentioned yesterday the image created in the Java Agent is written to the disk. What I didn't mention is that the file is then added to a Rich Text field on a Captcha form and saved as a document with the answer to the captcha in there too. The file is then deleted from the disk and the agent redirects the browser to the file within the document that was just created. To do this I added an image in PassThru HTML to the form that needs a CAPTCHA, like so: <img src="/path/to/captchadb.nsf/captcha.jpg?OpenAgent&id=GsiMiuKMOprxdIYXUEe"> The ID is the hash of the DocumentUniqueID assigned to the document at the point of ?OpenForm. There's probably little point to hashing the document's ID but it seemed geekily cool to, so I did. This ID is stored in an editable field on the CAPTCHA-enabled Form called CaptchaID. The field is type="hidden" so that the value is passed back to the server and the value of the field at ?OpenForm is the same as the value at ?CreateDocument. Otherwise it would change and we'd lose our link between the "session". It's a handy hack of a session, but is it a flaw in the security of the process? The "captcha.jpg" Agent creates the image and a document in which to store it. It then redirects the browser's request for the CAPTCHA image to a URL such as: /path/to/captchadb.nsf/0/6BCB41.. ...0470E0F/$file/GsiMiuKMOprxdIYXUEe.jpg When the document with the CAPTCHA on it is saved the value in the CaptchaID field is used to look in the "captcha database" for the Captcha document with the same key (the one where the image file is stored along with the answer). This answer is tested and the Captcha document is then deleted. If it doesn't match then the user returns to the form and a new image/document is created. The obvious flaw here is storing both image and answer in the same document to which the Anonymous user has read access and to which a hacker would know the key (but not the UNID). This might seem like a massive hole in security. But is it? I feel safe in this approach as I have hidden all but one of the database's design elements from the web. The only thing not hidden is the "captcha.jpg" agent. The Form used to store the document and View used for lookups are both hidden. If you traverse back through the image's URL to the following address: /path/to/captchadb.nsf/0/6BCBF41... ...B00470E0F/ You will get an error 404 saying: HTTP Web Server: Lotus Notes Exception - Special database object cannot be located Go back as far as the root of the database: /path/to/captchadb.nsf/ And you will see "No views found". Guess the name of the view and you'll get another 404. As far as I can see there's no way whatsoever that an Anonymous web visitor/hacker/bot can get access to the answer which is stored as plain text in the "hidden" document. As an extra precaution the hidden Form has no actual fields on it when opened in Domino Designer. If the Form wasn't hidden then all they'd see in the browser is a blank page anyway. How secure is this approach? There's a simple workaround of keeping the file and answer in separate documents and adding Readers field security to the latter, but I don't see the need to, unless you know of one? See if you can find a hole in the way I create CAPTCHA images that might mean it's not as secure as it should be. As I mentioned yesterday the image created in the Java Agent is written to the disk. What I didn't mention is that the file is then added to a Rich Text field on a Captcha form and saved as a document with the answer to the captcha in there too. The file is then deleted from the disk and the agent redirects the browser to the file within the document that was just created. To do this I added an image in PassThru HTML to the form that needs a CAPTCHA, like so: <img src="/path/to/captchadb.nsf/captcha.jpg?OpenAgent&id=GsiMiuKMOprxdIYXUEe"> The ID is the hash of the DocumentUniqueID assigned to the document at the point of ?OpenForm. There's probably little point to hashing the document's ID but it seemed geekily cool to, so I did. This ID is stored in an editable field on the CAPTCHA-enabled Form called CaptchaID. The field is type="hidden" so that the value is passed back to the server and the value of the field at ?OpenForm is the same as the value at ?CreateDocument. Otherwise it would change and we'd lose our link between the "session". It's a handy hack of a session, but is it a flaw in the security of the process? The "captcha.jpg" Agent creates the image and a document in which to store it. It then redirects the browser's request for the CAPTCHA image to a URL such as: /path/to/captchadb.nsf/0/6BCB41.. ...0470E0F/$file/GsiMiuKMOprxdIYXUEe.jpg When the document with the CAPTCHA on it is saved the value in the CaptchaID field is used to look in the "captcha database" for the Captcha document with the same key (the one where the image file is stored along with the answer). This answer is tested and the Captcha document is then deleted. If it doesn't match then the user returns to the form and a new image/document is created. The obvious flaw here is storing both image and answer in the same document to which the Anonymous user has read access and to which a hacker would know the key (but not the UNID). This might seem like a massive hole in security. But is it? I feel safe in this approach as I have hidden all but one of the database's design elements from the web. The only thing not hidden is the "captcha.jpg" agent. The Form used to store the document and View used for lookups are both hidden. If you traverse back through the image's URL to the following address: /path/to/captchadb.nsf/0/6BCBF41... ...B00470E0F/ You will get an error 404 saying: HTTP Web Server: Lotus Notes Exception - Special database object cannot be located Go back as far as the root of the database: /path/to/captchadb.nsf/ And you will see "No views found". Guess the name of the view and you'll get another 404. As far as I can see there's no way whatsoever that an Anonymous web visitor/hacker/bot can get access to the answer which is stored as plain text in the "hidden" document. As an extra precaution the hidden Form has no actual fields on it when opened in Domino Designer. If the Form wasn't hidden then all they'd see in the browser is a blank page anyway. How secure is this approach? There's a simple workaround of keeping the file and answer in separate documents and adding Readers field security to the latter, but I don't see the need to, unless you know of one? Release the shackles! You can now create files in your Agents without needing to write to the server's disk. No need to worry about whether the agent is always signed with an ID that's allowed to!!
On Tuesday I was bemoaning the lack of a way to stream binary data directly to the browser from an Agent. Me, moaning? Surely not! Despite the fact nobody knew of a way to stream data directly I did manage to get something out of the whole exercise. What came of it is a way to generate, store and (optionally) email automatically generated files without using the server's disk. So what? Well, not needing to write to the disk means you don't need to worry about who signed the agent last and/or what access the ID has to the server. Any old developer can now write an agent that works with file generation! As an example, here's a form that will generate and attach a PDF to itself during the WQS event. It can even email it, as you can see to the right. You'll just have to trust me for the time being that the agent is run without unrestricted rights. There's also a form that does the same thing with a text file and one that will create an Excel file I can't show you a CAPTCHA demo online as this server is Linux and without X11 running it can't use the Java graphics libraries. Although the approach is the same for them all the difference between the Text/Excel and Image/PDF is that they are based on text and binary data respectively. Generating the text files, as you'd imagine, is easier and can be achieved with a small amount of LotusScript. Here's the code needed in a WQS agent to attach a text file. Generating binary files like the PDF requires Java (we need to use a ByteArrayOutputStream as a temporary buffer). Here's some commented code that's an abstract from the WQS of the above demo. There's probably more detail that's worth discussing further and so I'll probably write a full-length article on the topic. Next week I'll outline how you go about downloading the DEXT app that the demos live in. In the mean time have a play with the demo. Don't abuse the send-email feature though please! I'll be keeping an eye on its usage and will cut it off if used badly. On Tuesday I was bemoaning the lack of a way to stream binary data directly to the browser from an Agent. Me, moaning? Surely not! Despite the fact nobody knew of a way to stream data directly I did manage to get something out of the whole exercise. What came of it is a way to generate, store and (optionally) email automatically generated files without using the server's disk. So what? Well, not needing to write to the disk means you don't need to worry about who signed the agent last and/or what access the ID has to the server. Any old developer can now write an agent that works with file generation! As an example, here's a form that will generate and attach a PDF to itself during the WQS event. It can even email it, as you can see to the right. You'll just have to trust me for the time being that the agent is run without unrestricted rights. There's also a form that does the same thing with a text file and one that will create an Excel file I can't show you a CAPTCHA demo online as this server is Linux and without X11 running it can't use the Java graphics libraries. Although the approach is the same for them all the difference between the Text/Excel and Image/PDF is that they are based on text and binary data respectively. Generating the text files, as you'd imagine, is easier and can be achieved with a small amount of LotusScript. Here's the code needed in a WQS agent to attach a text file. Generating binary files like the PDF requires Java (we need to use a ByteArrayOutputStream as a temporary buffer). Here's some commented code that's an abstract from the WQS of the above demo. There's probably more detail that's worth discussing further and so I'll probably write a full-length article on the topic. Next week I'll outline how you go about downloading the DEXT app that the demos live in. In the mean time have a play with the demo. Don't abuse the send-email feature though please! I'll be keeping an eye on its usage and will cut it off if used badly. A week earlier than expected little Miss Minnie Howlett decided to make her way in to the big wide world yesterday morning, 23rd June 2008, at 8:08 am. Her entry was a little more dramatic than her big brother's 18 months ago. More on that in a mo. Here's a re-creation of the photo of her brother from the day he was born. See the similarity!? Things started in the normal way and it looked like our planned home birth was going to go ahead. We probably left it a little late to call the midwife though and before we knew it (and before the midwife had arrived) Karen was in the bath and wanting to push. At this point it dawned on me I could well be doing the delivery myself. Needless to say I didn't fancy the idea and called 999. Within 10 minutes an ambulance arrived. Within another 10 minutes we were in the maternity ward. It's amazing how fast you can get somewhere with blue lights flashing and the rush hour traffic parting to make way. Within 10 minutes of being in the hosptital Minnie arrived. Daddy was, yet again, reduced to a babbling fool crying like a little baby. On Saturday night we were next door and the whole of the street was there. We got a sweepstake going on sex and weight. It turns out I was spot on with the weight but got the sex wrong. I'd been convinced it would be another boy. Howlett men just don't have girls. Apparently. Well, I'm glad I did. She's a little beauty and I'm as proud as punch. Things might be a little quiet for the rest of the week although I'll try and post more techy stuff if I can. I need a couple of days paternity to help Karen out. Before I go here's a photo of Felix. I promised 18 months ago not to let this site turn in to a glorifed family album, but have realised I hardly post family info or photos at all now. Well, here he is pretending to be daddy: Isn't he a big boy! You don't realise how much your children have grown until the next sibling arrives... A week earlier than expected little Miss Minnie Howlett decided to make her way in to the big wide world yesterday morning, 23rd June 2008, at 8:08 am. Her entry was a little more dramatic than her big brother's 18 months ago. More on that in a mo. Here's a re-creation of the photo of her brother from the day he was born. See the similarity!? Things started in the normal way and it looked like our planned home birth was going to go ahead. We probably left it a little late to call the midwife though and before we knew it (and before the midwife had arrived) Karen was in the bath and wanting to push. At this point it dawned on me I could well be doing the delivery myself. Needless to say I didn't fancy the idea and called 999. Within 10 minutes an ambulance arrived. Within another 10 minutes we were in the maternity ward. It's amazing how fast you can get somewhere with blue lights flashing and the rush hour traffic parting to make way. Within 10 minutes of being in the hosptital Minnie arrived. Daddy was, yet again, reduced to a babbling fool crying like a little baby. On Saturday night we were next door and the whole of the street was there. We got a sweepstake going on sex and weight. It turns out I was spot on with the weight but got the sex wrong. I'd been convinced it would be another boy. Howlett men just don't have girls. Apparently. Well, I'm glad I did. She's a little beauty and I'm as proud as punch. Things might be a little quiet for the rest of the week although I'll try and post more techy stuff if I can. I need a couple of days paternity to help Karen out. Before I go here's a photo of Felix. I promised 18 months ago not to let this site turn in to a glorifed family album, but have realised I hardly post family info or photos at all now. Well, here he is pretending to be daddy: Isn't he a big boy! You don't realise how much your children have grown until the next sibling arrives... A week earlier than expected little Miss Minnie Howlett decided to make her way in to the big wide world yesterday morning, 23rd June 2008, at 8:08 am. Her entry was a little more dramatic than her big brother's 18 months ago. More on that in a mo. Here's a re-creation of the photo of her brother from the day he was born. See the similarity!? Things started in the normal way and it looked like our planned home birth was going to go ahead. We probably left it a little late to call the midwife though and before we knew it (and before the midwife had arrived) Karen was in the bath and wanting to push. At this point it dawned on me I could well be doing the delivery myself. Needless to say I didn't fancy the idea and called 999. Within 10 minutes an ambulance arrived. Within another 10 minutes we were in the maternity ward. It's amazing how fast you can get somewhere with blue lights flashing and the rush hour traffic parting to make way. Within 10 minutes of being in the hosptital Minnie arrived. Daddy was, yet again, reduced to a babbling fool crying like a little baby. On Saturday night we were next door and the whole of the street was there. We got a sweepstake going on sex and weight. It turns out I was spot on with the weight but got the sex wrong. I'd been convinced it would be another boy. Howlett men just don't have girls. Apparently. Well, I'm glad I did. She's a little beauty and I'm as proud as punch. Things might be a little quiet for the rest of the week although I'll try and post more techy stuff if I can. I need a couple of days paternity to help Karen out. Before I go here's a photo of Felix. I promised 18 months ago not to let this site turn in to a glorifed family album, but have realised I hardly post family info or photos at all now. Well, here he is pretending to be daddy: Isn't he a big boy! You don't realise how much your children have grown until the next sibling arrives... My ThinkPad T42 is broken. It happened just before I moved in to the new office. Like an idiot I balanced it on the top of a pair of step-ladders after I'd been testing the wall sockets for the network. Despite making a mental note to remember it was there I came back later and folded the ladders up - completely forgetting it was on top. It fell 6' on to a concrete floor, although I managed to break the fall half way with my foot. Woops. Testament to the build quality of the ThinkPads is the fact it was relatively unharmed other than a piece of the casing missing on the corner. The only problem is with the screen. It's very, very, very dull. You can just make out the login box if you get to within an inch of the screen. Logging in or using it with its own screen is out of the question. Since I've moved to the new office I've had it permanently on the port replicator with an external screen. It's not been used as a portable laptop since and won't be until it's fixed. Now that a new baby has arrived it would be good if I could work from the house a little more. Hence I really need to get it sorted. I just don't know where to start. Do you? At the weekend I finally got round to taking it apart, as you can see. Believe it or not it's on and running in this shot. I even managed to completely re-assemble it without powering down. In taking it apart I was hoping to find a loose connection and fix the problem. Alas I didn't and it looks like a hardware fault. Having done a little googling I narrowed the problem down to either the LCD inverter or the CCFL backlight. As the CCFL is the cheapest part I'm going to buy one of them and hope that works. If not I'll try the inverter. If neither work I might have to consider a new laptop (it is nearly 3 years old after all). What's the equivalent of the T42 now? Is it the T61? My ThinkPad T42 is broken. It happened just before I moved in to the new office. Like an idiot I balanced it on the top of a pair of step-ladders after I'd been testing the wall sockets for the network. Despite making a mental note to remember it was there I came back later and folded the ladders up - completely forgetting it was on top. It fell 6' on to a concrete floor, although I managed to break the fall half way with my foot. Woops. Testament to the build quality of the ThinkPads is the fact it was relatively unharmed other than a piece of the casing missing on the corner. The only problem is with the screen. It's very, very, very dull. You can just make out the login box if you get to within an inch of the screen. Logging in or using it with its own screen is out of the question. Since I've moved to the new office I've had it permanently on the port replicator with an external screen. It's not been used as a portable laptop since and won't be until it's fixed. Now that a new baby has arrived it would be good if I could work from the house a little more. Hence I really need to get it sorted. I just don't know where to start. Do you? At the weekend I finally got round to taking it apart, as you can see. Believe it or not it's on and running in this shot. I even managed to completely re-assemble it without powering down. In taking it apart I was hoping to find a loose connection and fix the problem. Alas I didn't and it looks like a hardware fault. Having done a little googling I narrowed the problem down to either the LCD inverter or the CCFL backlight. As the CCFL is the cheapest part I'm going to buy one of them and hope that works. If not I'll try the inverter. If neither work I might have to consider a new laptop (it is nearly 3 years old after all). What's the equivalent of the T42 now? Is it the T61? My ThinkPad T42 is broken. It happened just before I moved in to the new office. Like an idiot I balanced it on the top of a pair of step-ladders after I'd been testing the wall sockets for the network. Despite making a mental note to remember it was there I came back later and folded the ladders up - completely forgetting it was on top. It fell 6' on to a concrete floor, although I managed to break the fall half way with my foot. Woops. Testament to the build quality of the ThinkPads is the fact it was relatively unharmed other than a piece of the casing missing on the corner. The only problem is with the screen. It's very, very, very dull. You can just make out the login box if you get to within an inch of the screen. Logging in or using it with its own screen is out of the question. Since I've moved to the new office I've had it permanently on the port replicator with an external screen. It's not been used as a portable laptop since and won't be until it's fixed. Now that a new baby has arrived it would be good if I could work from the house a little more. Hence I really need to get it sorted. I just don't know where to start. Do you? At the weekend I finally got round to taking it apart, as you can see. Believe it or not it's on and running in this shot. I even managed to completely re-assemble it without powering down. In taking it apart I was hoping to find a loose connection and fix the problem. Alas I didn't and it looks like a hardware fault. Having done a little googling I narrowed the problem down to either the LCD inverter or the CCFL backlight. As the CCFL is the cheapest part I'm going to buy one of them and hope that works. If not I'll try the inverter. If neither work I might have to consider a new laptop (it is nearly 3 years old after all). What's the equivalent of the T42 now? Is it the T61? For weeks now I've been promising the details of how you go about downloading the DEXT app. The delay has been due to me not being sure how best to distribute it. My intention has always been to charge a certain (nominal perhaps?) sum of money which goes directly to a charity of my choosing. I even went as far as setting up a page on JustGiving.com where I'd accept the monies and record the generosity of the donors. The target for the fund raising on that page is a (perhaps) overly-ambitious 10 grand. Since then I've been doing quite a bit of thinking and have decided to make the charitable donations optional and the download of the application completely free. There are a few reasons for this. Mainly it's that I don't want to suffer the disappointment of the whole thing falling flat on its face. If this were to happen it would probably make me question my devotion to this site and I don't want that to happen. What I also want to avoid is starting off with a compulsory donation and then moving to an optional one, thus upsetting those who have already shelled out for it. Another reason is that I want to make all the code I share available to as many people as possible. Requiring a payment would just mean that not as many people get their hands on the code as possibly could. Something happened recently which brought home the fact that this site doesn't have the pull it once used to. I probably shouldn't but I use the number of comments posted on blog entries as a (very rough) indicator of the site's popularity. Eighteen months ago when Felix was born the Say Hello to Felix post got 140 odd responses. Last week the Say Hello to Minnie post got a less than half that! While the Minnie post still got a lot of responses and I'm grateful of them all I can't help but feel the difference between the two number indicates that this site's readership has fallen in the 18 months since Felix arrived. It's inevitable that having children means I don't have the time I used to put aside for running codestore. I've tried my best to keep a certain amount of technical postings and code snippets flowing but there have been the odd week of silence here and there and that's bound to have an affect on the popularity of the site. My plan now is to try and kick the site back in to gear. Despite the arrival of another child I should now - in theory - have more spare time. Whereas before most of my spare time (including down time with work) was spent working on the house, that's all over now, save for the odd little job here and there. I should then have more time to spend keeping up with emerging technologies and fresh techniques, as before. There should be some time left to put this knowledge on here in the form of demos and "How To"s. The plan with DEXT is that all new techniques and demos are added to one central database (note that it no longer has anything to do with Ext -- see Ext.nd for that). Each time a new demo is added to DEXT a new release will be made available for download. This will make it easier for you (and me!) to find that demo you knew you saw on here somewhere. I too forget where a demo database is sometimes and the server is becoming a mess of demo databases that can be a nightmare to maintain and follow! Stick with me on this. I need to do some house-cleaning but should be able to make a copy of the database available within a week or so. For weeks now I've been promising the details of how you go about downloading the DEXT app. The delay has been due to me not being sure how best to distribute it. My intention has always been to charge a certain (nominal perhaps?) sum of money which goes directly to a charity of my choosing. I even went as far as setting up a page on JustGiving.com where I'd accept the monies and record the generosity of the donors. The target for the fund raising on that page is a (perhaps) overly-ambitious 10 grand. Since then I've been doing quite a bit of thinking and have decided to make the charitable donations optional and the download of the application completely free. There are a few reasons for this. Mainly it's that I don't want to suffer the disappointment of the whole thing falling flat on its face. If this were to happen it would probably make me question my devotion to this site and I don't want that to happen. What I also want to avoid is starting off with a compulsory donation and then moving to an optional one, thus upsetting those who have already shelled out for it. Another reason is that I want to make all the code I share available to as many people as possible. Requiring a payment would just mean that not as many people get their hands on the code as possibly could. Something happened recently which brought home the fact that this site doesn't have the pull it once used to. I probably shouldn't but I use the number of comments posted on blog entries as a (very rough) indicator of the site's popularity. Eighteen months ago when Felix was born the Say Hello to Felix post got 140 odd responses. Last week the Say Hello to Minnie post got a less than half that! While the Minnie post still got a lot of responses and I'm grateful of them all I can't help but feel the difference between the two number indicates that this site's readership has fallen in the 18 months since Felix arrived. It's inevitable that having children means I don't have the time I used to put aside for running codestore. I've tried my best to keep a certain amount of technical postings and code snippets flowing but there have been the odd week of silence here and there and that's bound to have an affect on the popularity of the site. My plan now is to try and kick the site back in to gear. Despite the arrival of another child I should now - in theory - have more spare time. Whereas before most of my spare time (including down time with work) was spent working on the house, that's all over now, save for the odd little job here and there. I should then have more time to spend keeping up with emerging technologies and fresh techniques, as before. There should be some time left to put this knowledge on here in the form of demos and "How To"s. The plan with DEXT is that all new techniques and demos are added to one central database (note that it no longer has anything to do with Ext -- see Ext.nd for that). Each time a new demo is added to DEXT a new release will be made available for download. This will make it easier for you (and me!) to find that demo you knew you saw on here somewhere. I too forget where a demo database is sometimes and the server is becoming a mess of demo databases that can be a nightmare to maintain and follow! Stick with me on this. I need to do some house-cleaning but should be able to make a copy of the database available within a week or so. For weeks now I've been promising the details of how you go about downloading the DEXT app. The delay has been due to me not being sure how best to distribute it. My intention has always been to charge a certain (nominal perhaps?) sum of money which goes directly to a charity of my choosing. I even went as far as setting up a page on JustGiving.com where I'd accept the monies and record the generosity of the donors. The target for the fund raising on that page is a (perhaps) overly-ambitious 10 grand. Since then I've been doing quite a bit of thinking and have decided to make the charitable donations optional and the download of the application completely free. There are a few reasons for this. Mainly it's that I don't want to suffer the disappointment of the whole thing falling flat on its face. If this were to happen it would probably make me question my devotion to this site and I don't want that to happen. What I also want to avoid is starting off with a compulsory donation and then moving to an optional one, thus upsetting those who have already shelled out for it. Another reason is that I want to make all the code I share available to as many people as possible. Requiring a payment would just mean that not as many people get their hands on the code as possibly could. Something happened recently which brought home the fact that this site doesn't have the pull it once used to. I probably shouldn't but I use the number of comments posted on blog entries as a (very rough) indicator of the site's popularity. Eighteen months ago when Felix was born the Say Hello to Felix post got 140 odd responses. Last week the Say Hello to Minnie post got a less than half that! While the Minnie post still got a lot of responses and I'm grateful of them all I can't help but feel the difference between the two number indicates that this site's readership has fallen in the 18 months since Felix arrived. It's inevitable that having children means I don't have the time I used to put aside for running codestore. I've tried my best to keep a certain amount of technical postings and code snippets flowing but there have been the odd week of silence here and there and that's bound to have an affect on the popularity of the site. My plan now is to try and kick the site back in to gear. Despite the arrival of another child I should now - in theory - have more spare time. Whereas before most of my spare time (including down time with work) was spent working on the house, that's all over now, save for the odd little job here and there. I should then have more time to spend keeping up with emerging technologies and fresh techniques, as before. There should be some time left to put this knowledge on here in the form of demos and "How To"s. The plan with DEXT is that all new techniques and demos are added to one central database (note that it no longer has anything to do with Ext -- see Ext.nd for that). Each time a new demo is added to DEXT a new release will be made available for download. This will make it easier for you (and me!) to find that demo you knew you saw on here somewhere. I too forget where a demo database is sometimes and the server is becoming a mess of demo databases that can be a nightmare to maintain and follow! Stick with me on this. I need to do some house-cleaning but should be able to make a copy of the database available within a week or so. This one is especially for Tim Tripcony and anybody else who prefers to remain in their feed-reader while catching up on new postings on their favourite sites. Until today on codestore you had to actually visit the site if you wanted to read my posting. If you were lucky I'd have remembered to add a one-liner summary to try and tempt you in, but often all you had to go on was the title itself. The trouble with using the title alone is that (at least I find) it's almost impossible to come up with one that summarises it all in a catchy way. I spend way to much time obsessing over the title of a post sometimes - changing words over and over. Well now, due to popular demand (you can probably tell if you've got this far and you're still in Google Reader or the likes) I've supplied the full body of the blog entry via RSS. Unless you want to post a comment (for which I given you a handy "button" to press at the bottom of each item) there's no actual need to visit the site. So, why has it taken me so long to make this change? The answer's in the last paragraph -- that you don't need to visit the site. My concern with full-content RSS feeds is that my visitors never actually, err, visit. This means they never get to see the site I put so much time in to designing. Purely selfish, I know and no reason to force people to visit. The obvious side effect to this is that I lose visitors who don't like taking the gamble that something is worth their time to read based on what the title tells them. Hence my about turn. I might as well get the content I write to as many people as possible hadn't I?! There was another, more practical, reason not to supply full content. All the internal links in my blogs are relative to the BASE href tag in the page's Head. Likewise for inline images. Links start with "http://www.codestore.net/store.nsf/unid/" and images with "http://www.codestore.net/store.nsf/rsrc/" both of which are the names of sorted views. The trouble is that once downloaded to the RSS feed it doesn't know what the BASE href is and so links and inline resource files become broken. Take the link in the last paragraph for example. If you examine it on the site itself you'll see it points to unid/EPSD-52UQZJ?OpenDocument. If you examine the link in the RSS feed you'll see it points directly to http://www.codestore.net/store.nsf/unid/EPSD-52UQZJ?OpenDocument. So how did I got about this without using nasty hard-coded absolute links in the actual stored content? All I did was add an @ReplaceSubstring() to the RSS view. Blog posts on this site are just HTML stored in a plain old text field. All I needed to add to the RSS feed's view was this: @ReplaceSubstring( @Implode(Body; @NewLine); "=\"rsrc/":"=\"unid/"; "=\"http://www.codestore.net/store.nsf/rsrc/":"\"http://www.codestore.net/store.nsf/unid/" ); It seems safe to assume that any occurrence of the strings ="http://www.codestore.net/store.nsf/rsrc/" or ="http://www.codestore.net/store.nsf/unid/" are either a link or an image, respectively. Seems foolproof to me and, more importantly, it works. To prove it here's an image, which just happens to be an image of what the feed now looks like in FeedDemon: Notice the preview image of the laptop that FeedDemon provides when the item is collapsed. All very cool. So I hope we're all happy now? If you have any more requests just ask.
Еще советы: Смотри советы на сайтах: Блоги. Что обсуждают и пишутAuthor: Paul Davies Tags: mail indicator Idea: If you choose to have new mail messages notified by an icon in the system tray, then the icon should disappear if you switch to, or refresh your inbox.
The indicator is fairly useless unless you are in the habit of double-clicking it to open new mail.
I would like to add this idea in conjunction with the linked idea Author: Rainer Brandl Tags: Traveler Idea: Wouldn´t it be great to have a address resolution from the Domino Directory in Lotus Traveler like on Blackberry ???
Or the possibility to sync another address book except the personal contacts like Commontime mNotes/mSuite ?? Author: Nathan Chandler Tags: load balancing clustering home server mail file availability index WAN Idea: Currently load balancing uses the Server availability index and thresholds to determine where to direct users opening a mail file or database. So I have the option to load balance (which is fine if the servers are on the same site), or choose a primary server for all users (100% available) and a secondary (0%) available - which is good for WAN clustering where one site is mainly a DR Site.
It would be great if you could set both servers to 100% available and instead tell domino to 'prefer home mail server' when opening a mail file. That way they will primarily work from the server closest to them (the one designated as their home server) but still be able to fail-over to the remote server and will try to switch back when next the mail file is opened.
I'm fairly sure the switch-back is mainly controlled by the server availability index but the above would help where you have a small population working in the DR Site. Currently they would have to access the Prod site via the WAN and they might be better served using the server closest to them. Domino Server / Other: Add Domino program directory to path on Windows platform automatically Перевод [RU] Author: David Killingsworth Tags: install windows pathstatement path Idea: When you install Domino on a Windows platform machine, the Domino program directory is not added to the server's path statement.
It would make it alot easier to run nsd.exe, and nserver -c commands (for batch files) if the program directory was already in the path already.
Of course, it doesn't take much to go and add it manually after installing Domino, but please give me a reason why it should not be added to the path automatically during the install?
Notes Client / Core/Frameworks (Incl. sidebar, rich text editor): Document Locking Reliability Перевод [RU] Author: Peter Presnell Tags: documentlocking Idea: Ever since Document Locking was added as an option for Notes databases there have been a number of limitations in how this works. Because of the ease with which Notes applications can be replicated to multiple servers I think it is important that IBM provide a document locking mechanism that is almost foolproof in a mult-server environment.
e.g.
Author: Peter Presnell Tags: designer Idea: One of the downsides to developing Notes client applications is that as a developer I am usually tied to using the same version of Notes/Designer that is deployed across the company. This means I am unable to take advantage of many of the new features in Domino Designer until my company upgrades to a newwer version of Notes. Even though some of the new features in designer are not specific to a pareticular version of Notes. This is not the case for Web development.
My suggestion would be to have the deigner client capable of recognising the capabilities of each version of the Notes client so that it is possible to develop a Notes application for a specific version of Notes. The same would hold true for Web client development in which HTML, JavaScript could be validated for a specific browser etc.
Example:. It would be great if I could use the new Eclipse LotuScript browser when it becomes available before my company upgrades to that release of Notes. Еще записи: Интересные блоги специалистов: Статьи и ДокументацияDomino 8.0.1 server can crash every 80 minutes. After upgrading a Domino server to release 8, you may notice that some Desktop Policy settings are unexpectedly being pushed out to the clients, despite not being configured to do so. Information about troubleshooting the Domino server message "Warning: Cannot record event - cannot keep up with event occurrence rate!" Deletion of explicit policies not working correctly from People & Groups tab of Domino administrator Перевод [RU] Deletion of explicit policies not working correctly from People & Groups tab of Domino Administrator 6, depending on what method is used. The function @ToNumber("") returns a zero value instead of the expected error message when passed an empty string. "Restore as last viewed by user" does not work when opening application (.NSF) using bookmark Перевод [RU] You utilize the IBM® Lotus Notes® Client to open a database (.NSF) but the does not open the last view of folder previously accessed even though the "Restore as last viewed by user" is enabled. This problem only occurs when the database is launched using a bookmark, and affects both custom databases as well as databases based on Notes/Domino® templates, such as a mail database. A Domino server running on IBM i will not restart after a hard shut down. The server console displays the error: "Server exiting: Could not open ID file." Where does the value in the "Internet Domain" field come from when registering new users? Перевод [RU] From where does the Internet Domain get set when you are registering new Notes users? The Domino Configuration Tuner (DCT) evaluates server settings according to a growing catalog of best practices. All servers in a single domain can be evaluated together. DCT generates reports that e A Domino server crashes and PANICs on nprocmon while running on a Windows 2003 system. Также почитатай: Найти документацию можно на сайтах:
|
В избранное | ||