Today I decided to add 'Google Analytics' to my blog, so I looked around and found couple articles that describes how to do it.
I would like to share it to all who probably think about it
click here
Wednesday, November 04, 2009
Would you like to add google analytics to your blog (blogspot)?
Tuesday, November 03, 2009
How @UserAccess can determine No Access level?
One my fellow asked me how to determine that user don't have access to database using only @formula. So I want to share how it can be done.
Monday, November 02, 2009
How to show image in LN using HTML
I had trouble with displaying image using html in LN. I did everything correctly, but the image did not appear. So I looked around and found that there is a special field
Monday, October 05, 2009
process image in LN (JPEG and PNG)
I was facing with problem when I got task to process image *.jpg and *.png (get their size and resize big image).
So let me put some code here to show my approach (it is only first version and it means that there are still many issues).
I used LS2J approach.
So here is my Java Library (core):
Options:
Option Public
Option Declare
Use "ImageLib"
Initialize:
import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class JpgImage {
BufferedImage originalImage = null;
String fileName = "";
int type = 0;
public JpgImage (String m_fileName) throws IOException {
try{
fileName = m_fileName;
originalImage = ImageIO.read(new File(fileName));
type = originalImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
}catch(IOException e){
System.out.println(e.getMessage());
}
}
public int ImgResize (int w, int h)
{
String newFileName = "";
String imgFormat = "";
try{
newFileName = fileName.replace(".", "-thumb.");
if(type == 5) {
imgFormat = "jpg";
}
else {
imgFormat = "png";
}
BufferedImage resizeImage = resizeImage(originalImage, type, w, h);
ImageIO.write(resizeImage, imgFormat, new File(newFileName));
}catch(IOException e){
System.out.println(e.getMessage());
}
return 0;
}
public int getWidth (){
return originalImage.getWidth();
}
public int getHeight () {
return originalImage.getHeight();
}
private static BufferedImage resizeImage(BufferedImage originalImage, int type, int w, int h){
BufferedImage resizedImage = new BufferedImage(w, h, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, w, h, null);
g.dispose();
return resizedImage;
}
}
LS code.
Options
Option Public
Option Declare
Use "ImageTest "
Uselsx "*javacon"
function add/change image (it creates Thumbnail version of original image with max size 120x120)
%REM
add image to Body and BodyThumbnail fields
%END REM
On Error Goto processError
Dim jpgClass As JavaClass
Dim jpgImage As JavaObject
Dim jpgImageThumbnail As JavaObject
Dim jError As JavaError
Dim w As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim uidocnew As NotesUIDocument
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Dim bodyThumbnail As NotesRichTextItem
Dim filepath As Variant
Dim vFileNameThumbnail As Variant
Dim tmp As String
Dim filename As String
Dim filenameThumbnail As String
Dim picH As Integer, picW As Integer
Dim picHT As Integer, picWT As Integer
Dim debug As Boolean
debug = True
If debug Then Print Lsi_info(2) & " starts at: " & Now
Set uidoc = w.CurrentDocument
Set doc = uidoc.Document
filepath = w.OpenFileDialog(False, "Please select iamge", "JPG|*.jpg|GIF|*.gif|PNG|*.png|", "", "")
If Not Isarray(filepath) Then Exit Sub
filename = filepath(0)
'** everything we'll need to access our Java classes
Dim jSession As New JavaSession
'** get the JpgImage class and instantiate an instance of it
Set jpgClass = jSession.GetClass("JpgImage")
Set jpgImage = jpgClass.CreateObject("(Ljava/lang/String;)V", fileName)
'get width and height of images
picH = jpgImage.getHeight()
picW = jpgImage.getWidth()
Call doc.ReplaceItemValue("picH", picH)
Call doc.ReplaceItemValue("picW", picW)
'attach image to as it is to body field
Call doc.RemoveItem("Body")
Set body = New NotesRichTextItem(doc, "Body")
Call body.EmbedObject (EMBED_ATTACHMENT, "", filename)
' new image
If picH > 120 Then
picHT = 120
Else
picHT = picH
End If
If picW > 120 Then
picWT = 120
Else
picWT = picW
End If
Call jpgImage.imgResize(picWT, picHT) '** shrink to 50% of the original size
If Instr(filename, ".gif") Then
Dim original_name As String
original_name = Replace(filename, ".", "-thumb.")
fileNameThumbnail = Replace(filename, ".gif", "-thumb.png")
Name original_name As fileNameThumbnail
Else
fileNameThumbnail = Replace(filename, ".", "-thumb.")
End If
Call doc.ReplaceItemValue("picHT", picHT)
Call doc.ReplaceItemValue("picWT", picWT)
'attach thumbnail version of image
Call doc.RemoveItem("bodyThumbnail")
Set body = New NotesRichTextItem(doc, "bodyThumbnail")
Call body.EmbedObject (EMBED_ATTACHMENT, "", fileNameThumbnail)
Kill fileNameThumbnail
doc.SaveOptions = "0"
Call uidoc.Close(True)
Set uidocNew = w.EditDocument(True, doc, , , , True)
Delete uidoc
Call uidocNew.Document.RemoveItem("SaveOptions")
Call uidocnew.Refresh
basta:
If debug Then Print Lsi_info(2) & " starts at: " & Now
Exit Sub
processError:
'** report any errors we get and keep on going
Set jError = jSession.getLastJavaError()
If (jError.errorMsg = "") Then
Print "Notes Error at line " & Erl & ": " & Error$
Else
Print "Error at line " & Erl & ": " & jError.errorMsg
jSession.ClearJavaError
End If
Msgbox Error$
Resume basta
End Sub
Wednesday, August 19, 2009
Gurus of Lotus: DOS Window appear when I run agent using C++ application
Hello guys,
This window appears each time when I run agent in my database (via external application) and this agent create document in mail database. I don't have any idea how it is possible to hide this window. It is non-friendly for user. This window allows to create document in mail database. Looks like just notification. But I don't want to show it to user.
Any ideas?
I tried to find solution and no luck, just one post at IBM
http://www-10.lotus.com/ldd/nd6forum.nsf/ReleaseAllThreadedweb/7b961338e87735ec85256f4700389b74?OpenDocument
Thanks
Saturday, July 25, 2009
Error processing calendar profile document (NoteID: NT00000906) in database mail\xxx.nsf: User's mail is being forwarded to another location
Amgr_DisableMailLookup = 1
Tuesday, July 14, 2009
how to kill process from LN
I found this approach as very good for my purposes. It works at least . I suppose that there are another couple even better appraoch, so if you know them share please.
Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szexeFile As String * 260
End Type
'-------------------------------------------------------
Declare Function OpenProcess Lib "kernel32.dll" (Byval dwDesiredAccess As Long, Byval blnheritHandle As Long, Byval dwAppProcessId As Long) As Long
Declare Function ProcessFirst Lib "kernel32.dll" Alias "Process32First" (Byval hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function ProcessNext Lib "kernel32.dll" Alias "Process32Next" (Byval hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function CreateToolhelpSnapshot Lib "kernel32.dll" Alias "CreateToolhelp32Snapshot" (Byval lFlags As Long, lProcessID As Long) As Long
Declare Function TerminateProcess Lib "kernel32.dll" (Byval ApphProcess As Long, Byval uExitCode As Long) As Long
Declare Function CloseHandle Lib "kernel32.dll" (Byval hObject As Long) As Long
Public Sub KillProcess(NameProcess As String)
Const PROCESS_ALL_ACCESS = &H1F0FFF
Const TH32CS_SNAPPROCESS = 2&
Dim uProcess As PROCESSENTRY32
Dim RProcessFound As Long
Dim hSnapshot As Long
Dim SzExename As String
Dim ExitCode As Long
Dim MyProcess As Long
Dim AppKill As Boolean
Dim AppCount As Integer
Dim i As Integer
Dim WinDirEnv As String
If NameProcess <> "" Then
AppCount = 0
uProcess.dwSize = Len(uProcess)
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
RProcessFound = ProcessFirst(hSnapshot, uProcess)
Do
i = Instr(1, uProcess.szexeFile, Chr(0))
SzExename = Lcase$(Left$(uProcess.szexeFile, i - 1))
WinDirEnv = Environ("Windir") + "\"
WinDirEnv = Lcase$(WinDirEnv)
If Right$(SzExename, Len(NameProcess)) = Lcase$(NameProcess) Then
AppCount = AppCount + 1
MyProcess = OpenProcess(PROCESS_ALL_ACCESS, False, uProcess.th32ProcessID)
AppKill = TerminateProcess(MyProcess, ExitCode)
Call CloseHandle(MyProcess)
End If
RProcessFound = ProcessNext(hSnapshot, uProcess)
Loop While RProcessFound
Call CloseHandle(hSnapshot)
End If
End Sub
Tuesday, June 09, 2009
'Input Enabled' formula does not export in DXL using native exporter
Today we faced with funny problem in LN 6.5.4 (I'm sure the same behavior in any another version of 6.5.X)
We do export of some LN elements and when we import it back we discovered that Input Enabled formula disappear. I checked our DXL file and found that formula was non there. Then I used simple way to check where was the problem, I create simple form, put there 1 field with Input Enabled formula and using Tools\DXL Utilities\Exporter export it to file. There was no Input Enabled formula at all. Funny issues but now we have to rewrite some places.
FYI: This works correct in R7 and ++
Monday, June 08, 2009
JavaScript libraries and reference sites
Got it from BestPracticesWebAppDevDomino8.pdf
Ajaxian.com
a site dedicated to improving Web development
devguru.com - A another site for Web development information
Dojo
http://www.dojotoolkit.org/
jQuery
http://jquery.com
A fast, concise, JavaScript Library that simplifies working with HTML documents
JSON.org
http://json.org
The home page for JSON information
MooTools
http://mootools.net
A compact, modular, OO JavaScript framework that is designed for the intermediate to advanced JavaScript developer
Prototype
http://www.prototypejs.org/
script.aculo.us
script.aculo.us
Provides an easy-to-use, cross-browser user interface
Yahoo UI
http://developer.yahoo.com/yui
Provides a set of utilities and controls, written in JavaScript
EXT
http://extjs.com
Provides for a cross-browser UI libraries
Some useful links:
Web development tools
http://www.ibm.com/developerworks/wikis/display/dominoappdev/Web+development+tools
Web development resources
http://www.ibm.com/developerworks/wikis/display/dominoappdev/Web+development+resources
Domino resources
http://www.ibm.com/developerworks/wikis/display/dominoappdev/Domino+resources