<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0MBSH4ycSp7ImA9WhBaFEo.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400</id><updated>2013-05-25T10:44:19.099+02:00</updated><category term="calendar" /><category term="rational" /><category term="installation" /><category term="document management" /><category term="smb" /><category term="development" /><category term="red hat" /><category term="BES" /><category term="events" /><category term="quickr" /><category term="symphony" /><category term="windows 7" /><category term="troubleshooting" /><category term="sharepoint" /><category term="ldap" /><category term="PowerShell" /><category term="ibm" /><category term="css" /><category term="LotusScript" /><category term="configuration" /><category term="aws" /><category term="exchange" /><category term="traveler" /><category term="notes" /><category term="linux" /><category term="lotus" /><category term="apache" /><category term="gtd" /><category term="OffTopic" /><category term="sametime" /><category term="Internet" /><category term="java" /><category term="connections" /><category term="vmware" /><category term="teamstudio" /><category term="programming" /><category term="deployment" /><category term="web services" /><category term="BlackBerry" /><category term="book" /><category term="chart" /><category term="dms" /><category term="requirement management" /><category term="ui" /><category term="ApplicationIsBorn" /><category term="Firefox" /><category term="scrum" /><category term="domino" /><category term="oo" /><category term="administration" /><category term="microsoft" /><category term="errata" /><category term="bootstrap" /><category term="framework" /><category term="JavaScript" /><category term="mercurial" /><category term="xpages" /><title>Lotus Shade of Yellow</title><subtitle type="html">some things IBM - many things Lotus - work - life - family</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.squareone.ba/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.squareone.ba/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Saša Brkić</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>80</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/lsoy" /><feedburner:info uri="lsoy" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUQERXozfip7ImA9WhBUGE4.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-111399529032033228</id><published>2013-05-06T12:27:00.000+02:00</published><updated>2013-05-06T12:48:24.486+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-06T12:48:24.486+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="bootstrap" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>XPages, Bootstrap and links pretending to be buttons</title><content type="html">In &lt;a href="http://blog.squareone.ba/2013/05/xpages-twitter-bootstrap-and-button.html"&gt;a recent post&lt;/a&gt;, I wrote about how I used Twitter Bootstrap to style an XPages application and what challenges I faced when using &lt;code&gt;Button&lt;/code&gt; core control.
&lt;br /&gt;
Twitter Bootstrap is very flexible and it allows you to visually turn a link into a button. All you need to do is to apply the same style classes to a link, as you would do with a button. For example, this:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;a class="btn" href="#"&amp;gt;Approve&amp;lt;/a&amp;gt;&lt;/pre&gt;
will be rendered as this:&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-Uzcuf0yI30A/UYOcYHmf43I/AAAAAAAABHI/bC-MLZ1WviE/s1600/bootstrap_button_1.PNG" imageanchor="1"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-Uzcuf0yI30A/UYOcYHmf43I/AAAAAAAABHI/bC-MLZ1WviE/s1600/bootstrap_button_1.PNG" /&gt;&lt;/a&gt;
&lt;br /&gt;
And, just as easily as with the buttons, you can add additional styles or icons:
&lt;pre class="brush: xml"&gt;&amp;lt;a class="btn btn-primary" href="#"&amp;gt;&amp;lt;i class="icon-upload-alt"&amp;gt;&amp;lt;/i&amp;gt; Upload&amp;lt;/a&amp;gt;&lt;/pre&gt;
The result is this button:&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-VpOHEsGQAEc/UYd8HJJcmeI/AAAAAAAABII/zhgpQdnADng/s1600/link_button1.png" imageanchor="1" &gt;&lt;img border="0" src="http://2.bp.blogspot.com/-VpOHEsGQAEc/UYd8HJJcmeI/AAAAAAAABII/zhgpQdnADng/s320/link_button1.png" /&gt;&lt;/a&gt;
&lt;br /&gt;
The basic styling can be easily applied using the XPages &lt;code&gt;Link&lt;/code&gt; core control. The code corresponding to the first example looks like this:
&lt;pre class="brush: xml"&gt;&amp;lt;xp:link text="Approve" id="buttonLink1" styleClass="btn"&amp;gt;&amp;lt;/xp:link&amp;gt;&lt;/pre&gt;
When it comes to adding icons, there are two choices. The first is to use an approach similar to the one we used with buttons: use the &lt;code&gt;Computed Field&lt;/code&gt; core control to inject the necessary &lt;code&gt;&amp;lt;i&amp;gt;&lt;/code&gt; tag:
&lt;pre class="brush: xml"&gt;&amp;lt;xp:link text=" Upload" id="buttonLink2" styleClass="btn btn-primary"&amp;gt;
&amp;#160;&amp;#160;&amp;lt;xp:text id="uploadIcon" tagName="i" styleClass="icon-upload-alt"&amp;gt;&amp;lt;/xp:text&amp;gt;
&amp;lt;/xp:link&amp;gt;
&lt;/pre&gt;
But, there is also another approach that, depending on your preferences and requirement, you might find easier. The &lt;code&gt;Link&lt;/code&gt; core control contains &lt;code&gt;escape&lt;/code&gt; property which, when set to &lt;code&gt;false&lt;/code&gt; enables us to output the necessary &lt;code&gt;&amp;lt;i&amp;gt;&lt;/code&gt; tag as a part of the link's &lt;code&gt;text&lt;/code&gt; property:
&lt;pre class="brush: xml"&gt;&amp;lt;xp:link escape="false" id="link1" styleClass="btn btn-danger"&amp;gt;
&amp;#160;&amp;#160;&amp;lt;xp:this.text&amp;gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;![CDATA[&amp;lt;i class='icon-remove'&amp;gt;&amp;lt;/i&amp;gt; Delete]]&amp;gt;
&amp;#160;&amp;#160;&amp;lt;/xp:this.text&amp;gt;
&amp;lt;/xp:link&amp;gt;
&lt;/pre&gt;
The second approach might be especially handy if you want to dynamically change the look of the button, as it will require less code.
&lt;br /&gt;
&lt;br /&gt;
You can see both approaches in &lt;a href="http://web1.cs-computing.com/apps/demo/bootstrap/bootstrap_demo.nsf/links.xsp" target="_blank"&gt;the demo application&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;
&lt;script type="text/javascript"&gt;SyntaxHighlighter.highlight();&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=TGfc4hNkaU4:4wVV1lyiJVI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=TGfc4hNkaU4:4wVV1lyiJVI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=TGfc4hNkaU4:4wVV1lyiJVI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/TGfc4hNkaU4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/111399529032033228/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2013/05/xpages-bootstrap-and-links-pretending.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/111399529032033228?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/111399529032033228?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/TGfc4hNkaU4/xpages-bootstrap-and-links-pretending.html" title="XPages, Bootstrap and links pretending to be buttons" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Uzcuf0yI30A/UYOcYHmf43I/AAAAAAAABHI/bC-MLZ1WviE/s72-c/bootstrap_button_1.PNG" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.squareone.ba/2013/05/xpages-bootstrap-and-links-pretending.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQCQH0yeip7ImA9WhBUFko.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-6781693267188684492</id><published>2013-05-04T16:39:00.002+02:00</published><updated>2013-05-04T16:39:21.392+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-04T16:39:21.392+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OffTopic" /><title>Google+ Comments now turned off on this blog</title><content type="html">&lt;br /&gt;
For some time I had Google+ comments enabled on this blog. I thought it would be a good idea, having both blog and Google+ conversation collected in one place. However, I failed to understand that only those with Google+ accounts would be allowed to comment.&lt;br /&gt;
&lt;br /&gt;
This mistake has now been fixed - I switched back to the old comments system that allows for anonymous comments as well.&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=Znd02Lckq1Q:KJg1BsrgEjs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=Znd02Lckq1Q:KJg1BsrgEjs:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=Znd02Lckq1Q:KJg1BsrgEjs:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/Znd02Lckq1Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/6781693267188684492/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2013/05/google-comments-now-turned-off-on-this.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/6781693267188684492?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/6781693267188684492?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/Znd02Lckq1Q/google-comments-now-turned-off-on-this.html" title="Google+ Comments now turned off on this blog" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2013/05/google-comments-now-turned-off-on-this.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEENQns-cCp7ImA9WhBUGE4.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-378639641057335335</id><published>2013-05-03T12:52:00.000+02:00</published><updated>2013-05-06T11:31:33.558+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-06T11:31:33.558+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="bootstrap" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>XPages, Twitter Bootstrap and button decorations</title><content type="html">This is a follow-up post to &lt;a href="http://stackoverflow.com/q/16245230/1510606" target="_blank"&gt;my question&lt;/a&gt; at the Stack Overflow.&lt;br /&gt;
&lt;br /&gt;
I am trying to switch completely to &lt;a href="http://twitter.github.io/bootstrap/index.html" target="_blank"&gt;Twitter Bootstrap&lt;/a&gt; for our XPages applications. I find it easy to work with, with lean and understandable CSS that is easy to modify should the need arise. There are so many different resources on the Internet dedicated to Bootstrap, including the marvelous &lt;a href="https://wrapbootstrap.com/" target="_blank"&gt;{wrap}bootstrap&lt;/a&gt; with ready-to-use themes.&lt;br /&gt;
&lt;br /&gt;
Using the Boostrap is easy as long as you use static elements, like &lt;code class="prettyprint"&gt;&amp;lt;div&amp;gt;&lt;/code&gt; or &lt;code class="prettyprint"&gt;&amp;lt;p&amp;gt;&lt;/code&gt;. It gets a little tougher when you start using XPages core controls, like Button and Link.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
I'll show you on an example. This is the static code you would use when defining a button:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;button class="btn" type="button"&amp;gt;Approve&amp;lt;/button&amp;gt;
&lt;/pre&gt;
This code results in a button similar to this:&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/-Uzcuf0yI30A/UYOcYHmf43I/AAAAAAAABHE/b0sy4rB1oYo/s1600/bootstrap_button_1.PNG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Uzcuf0yI30A/UYOcYHmf43I/AAAAAAAABHE/b0sy4rB1oYo/s1600/bootstrap_button_1.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The button can easily be styled by adding additional classes like this:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;button class="btn btn-success btn-large" type="button"&amp;gt;Approve&amp;lt;/button&amp;gt;
&lt;/pre&gt;
which turns into:&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-Iy7_efffcrI/UYOcxqE1BEI/AAAAAAAABHM/czk085TdwZk/s1600/bootstrap_button_2.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-Iy7_efffcrI/UYOcxqE1BEI/AAAAAAAABHM/czk085TdwZk/s1600/bootstrap_button_2.png" /&gt;&lt;/a&gt;
&lt;br /&gt;
These styles are easily repeatable using the XPages Button core control. You simply specify the necessary class(es), like this:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;xp:button value="Approve" id="button1" styleClass="btn btn-success btn-large"&amp;gt;
&amp;lt;/xp:button&amp;gt;
&lt;/pre&gt;
Now, the really neat feature is the easy way of adding decorations (icons) to buttons. So for example, if you want to add a tick mark to your button you use the following code:
&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;button class="btn" type="button"&amp;gt;&amp;lt;i class="icon-ok"&amp;gt;&amp;lt;/i&amp;gt; Approve&amp;lt;/button&amp;gt;
&lt;/pre&gt;
resulting in this:&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-SPWWdsrXOfo/UYOjcVgvl2I/AAAAAAAABHg/o75WF7xX-Vo/s1600/bootstrap_button_3.png" imageanchor="1"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-SPWWdsrXOfo/UYOjcVgvl2I/AAAAAAAABHg/o75WF7xX-Vo/s320/bootstrap_button_3.png" /&gt;&lt;/a&gt;
&lt;br /&gt;
But, when I tried using this technique with the button core control, I realized that I didn't know how to inject the necessary &lt;code class="prettyprint"&gt;&amp;lt;i&amp;gt;&lt;/code&gt; tag inside the generated button code. At first, I tried all possible and impossible ways of calculating the value of the button. But it wouldn't work as the html code would always get escaped.&lt;br /&gt;
I then came up with a client-side script that would execute on page load, find the button and inject the necessary tags (see my &lt;a href="http://stackoverflow.com/q/16245230/1510606" target="_blank"&gt;Stack Overflow question&lt;/a&gt;). But this was not an elegant solution and it would be difficult to programatically change the icon.
&lt;br /&gt;
Thankfully,&amp;nbsp;&lt;a class="g-profile" href="https://plus.google.com/103119335037606490151" target="_blank"&gt;+Stephan Wissel&lt;/a&gt; showed that I could easily include html tags in the XPages markup. So, the solution to the icon problem was as easy as this:
&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;xp:button value="Approve" id="button1" styleClass="btn"&amp;gt;
    &amp;lt;i class="icon-ok"&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/xp:button&amp;gt;
&lt;/pre&gt;
But wait, there is more! In XPages you can use property &lt;code class="prettyprint"&gt;tagName&lt;/code&gt; to control what html tag is output when the control is rendered. So, I used the Computed Field core control and told it to output the &lt;code class="prettyprint"&gt;&amp;lt;i&amp;gt;&lt;/code&gt; tag:
&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;xp:button value="Approve" id="button1" styleClass="btn"&amp;gt;
    &amp;lt;xp:text id="buttonIcon1" tagName="i" styleClass="icon-ok"&amp;gt;&amp;lt;/xp:text&amp;gt;
&amp;lt;/xp:button&amp;gt;
&lt;/pre&gt;
Why would you do that? Well, now you can easily change the value of the &lt;code class="prettyprint"&gt;styleClass&lt;/code&gt; property and thus the icon. Which means that you can completely change the look of the button, based on some condition in the application.
&lt;br /&gt;
&lt;br /&gt;
This approach is easy to use and completely controllable using the server-side script. I created a small demo application where you can &lt;a href="http://web1.cs-computing.com/apps/demo/bootstrap/bootstrap_demo.nsf/buttons.xsp" target="_blank"&gt;see this technique in action&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;
Instead of the default Glyphicons, I use &lt;a href="http://fortawesome.github.io/Font-Awesome/" target="_blank"&gt;Font Awesome&lt;/a&gt; for displaying icons. Font Awesome has more symbols, is smaller and easier to use. And it uses exactly the same style names as Bootstrap, so you won't need to change your existing code. Warmly recommended!
&lt;br /&gt;
&lt;br /&gt;
And lastly, to demonstrate why I needed this in first place: we are planning an event and I wanted to ask our customers and partners where we should organize it. So I created a simple XPage and provided four alternatives that they can choose from. It is made using Twitter Bootstrap and the techniques described in this blog post. I haven't translated it, but you'll get the idea. Feel free to &lt;a href="http://web1.cs-computing.com/apps/demo/bootstrap/bootstrap_demo.nsf/survey.xsp" target="_blank"&gt;submit your choices&lt;/a&gt;!&lt;br /&gt;
&lt;h3&gt;
Update&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
I just found another way to display icons using the &lt;code&gt;Link&lt;/code&gt; core control. When you set &lt;code&gt;escape="false"&lt;/code&gt; you can inject the &lt;code&gt;i&lt;/code&gt; tag directly into the &lt;code&gt;text&lt;/code&gt; property. Depending on your needs, this could be easier than using computed fields. But, there are caveats. I'll update the demo database and write a blog post about this.&lt;/div&gt;
&lt;style type='text/css'&gt;
   .syntaxhighlighter { 
       overflow-y: hidden !important; 
       overflow-x: auto !important; 
    }
&lt;/style&gt;
&lt;script type="text/javascript"&gt;SyntaxHighlighter.highlight();&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=i_ZqJr_-3UE:JGblpuCyoS4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=i_ZqJr_-3UE:JGblpuCyoS4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=i_ZqJr_-3UE:JGblpuCyoS4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/i_ZqJr_-3UE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/378639641057335335/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2013/05/xpages-twitter-bootstrap-and-button.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/378639641057335335?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/378639641057335335?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/i_ZqJr_-3UE/xpages-twitter-bootstrap-and-button.html" title="XPages, Twitter Bootstrap and button decorations" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-Uzcuf0yI30A/UYOcYHmf43I/AAAAAAAABHE/b0sy4rB1oYo/s72-c/bootstrap_button_1.PNG" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.squareone.ba/2013/05/xpages-twitter-bootstrap-and-button.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEBR3c5fCp7ImA9WhBVGE4.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-2809063242352549448</id><published>2013-04-24T23:09:00.002+02:00</published><updated>2013-04-24T23:24:16.924+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-24T23:24:16.924+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><category scheme="http://www.blogger.com/atom/ns#" term="ldap" /><category scheme="http://www.blogger.com/atom/ns#" term="administration" /><category scheme="http://www.blogger.com/atom/ns#" term="sametime" /><title>User's login ID, LDAP and Sametime</title><content type="html">&lt;div style="text-align: center;"&gt;
&lt;br /&gt;
Or, when too much RTFM is not a good thing.&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Each time we perform a new installation, we try to make it better than the one before. We tighten security, we make it more robust and scalable. We read manuals and check best practices an extra time.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
When we were installing Sametime at a new customer some time ago, we did just that - we read the documentation one extra time.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
And we noticed that the documentation recommended use of a unique, non-changing, identifier as the user's login ID. For example, the section &lt;a href="http://www-10.lotus.com/ldd/stwiki.nsf/xpDocViewer.xsp?lookupName=Administering+Sametime+Standard+8.5.2+documentation#action=openDocument&amp;amp;res_title=Specifying_a_users_login_ID_st852&amp;amp;content=pdcontent" target="_blank"&gt;Specifying a user's login ID&lt;/a&gt; states:&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;i&gt;To avoid running the name change tool in the future, you can select an LDAP attribute that is not likely to change when users change their name or relocate. Here are examples of stable attributes in some well-known LDAP servers:&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li style="text-align: left;"&gt;&lt;i&gt;IBM Directory Server: ibm-entryUUID&lt;/i&gt;&lt;/li&gt;
&lt;li style="text-align: left;"&gt;&lt;i&gt;Domino® LDAP: dominounid&lt;/i&gt;&lt;/li&gt;
&lt;li style="text-align: left;"&gt;&lt;i&gt;Novell Directory Server (NDS): guid&lt;/i&gt;&lt;/li&gt;
&lt;li style="text-align: left;"&gt;&lt;i&gt;SunOne: nsuniqueid&lt;/i&gt;&lt;/li&gt;
&lt;li style="text-align: left;"&gt;&lt;i&gt;Active Directory: objectGUID&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;/div&gt;
So, we did exactly as recommended and changed the login ID to dominounid. And everything was fine with the Sametime client (both embedded and standalone), but we could no longer log in using the web client (e.g. via ST Proxy). Attempts to log in using the web client would time out, but the funny thing was that if the user first logged in to the iNotes and then opened the web client, it would work.&lt;br /&gt;
&lt;br /&gt;
So, we contacted the IBM support and started checking all the standard things - SSO configuration in both WAS and Domino, LDAP settings, trusted IPs... And everything was fine. The PMR got escalated all the way until it reached the SWAT (cool name, isn't it?). And then, after going through a massive amount of logs, they found the cause - it was our change of the login ID to dominounid.&lt;br /&gt;
&lt;br /&gt;
The thing is, if you change the login ID, you also need to change the search filter used when resolving a user name to a distinguished name. This can be changed in STSC or directly in stconfig.nsf. So instead of &lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;(&amp;amp;(objectclass=inetOrgPerson)(|(mail=%s)(cn=%s)(uid=%s))) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
it should be: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;(&amp;amp;(objectclass=inetOrgPerson)(|(mail=%s)(cn=%s)(uid=%s)(dominounid=%s)))&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
After this change, everything started working as it should. Such a small change, so difficult to find (it took over a month to get this sorted!), so big an impact. I felt quite dumb after this was over: "Did I miss this in the manual?" I double checked, but I couldn't find a reference to the search filter change anywhere.&lt;br /&gt;
&lt;br /&gt;
The moral of this story is thus: reading too much manual is sometimes as bad as not reading it at all. Especially if the manual is missing some very important information. :-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=q14rBr5UVos:bWIHtAK6XdQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=q14rBr5UVos:bWIHtAK6XdQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=q14rBr5UVos:bWIHtAK6XdQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/q14rBr5UVos" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/2809063242352549448/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2013/04/users-login-id-ldap-and-sametime.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/2809063242352549448?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/2809063242352549448?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/q14rBr5UVos/users-login-id-ldap-and-sametime.html" title="User's login ID, LDAP and Sametime" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Banja Luka, Bosnia and Herzegovina</georss:featurename><georss:point>44.76666669999999 17.18333329999996</georss:point><georss:box>44.40637719999999 16.537886299999958 45.12695619999999 17.82878029999996</georss:box><feedburner:origLink>http://blog.squareone.ba/2013/04/users-login-id-ldap-and-sametime.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUDRXg6fSp7ImA9WhBVF0g.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-7938785405408108829</id><published>2013-04-23T23:24:00.001+02:00</published><updated>2013-04-23T23:24:34.615+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-23T23:24:34.615+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="notes" /><category scheme="http://www.blogger.com/atom/ns#" term="connections" /><title>Connections Business Cards in Notes 9.0</title><content type="html">I really don't know how old this is - I only noticed it yesterday.

&lt;br /&gt;
&lt;br /&gt;
When one hovers over a name in Notes 9.0, a Connections business card appears:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-pxCKffYqV2g/UXb6mZgMeOI/AAAAAAAABF8/1LAWjEZqluw/s1600/notes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-pxCKffYqV2g/UXb6mZgMeOI/AAAAAAAABF8/1LAWjEZqluw/s1600/notes.png" height="152" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
We haven't done any integration between our Domino / Connections environments, apart for installing Connections plug-ins for Notes. So I guess that this function is a part of the plug-ins.&lt;br /&gt;
&lt;br /&gt;
Really nice touch, it simply works out of box. No manual configuration of any sort. I wish I could say the same for other aspects of Domino / Connections interaction, such as Embedded Experience and Activity Streams.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=jJO8NqGnOBQ:Klr36do4Yj8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=jJO8NqGnOBQ:Klr36do4Yj8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=jJO8NqGnOBQ:Klr36do4Yj8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/jJO8NqGnOBQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/7938785405408108829/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2013/04/connections-business-cards-in-notes-90.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/7938785405408108829?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/7938785405408108829?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/jJO8NqGnOBQ/connections-business-cards-in-notes-90.html" title="Connections Business Cards in Notes 9.0" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-pxCKffYqV2g/UXb6mZgMeOI/AAAAAAAABF8/1LAWjEZqluw/s72-c/notes.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2013/04/connections-business-cards-in-notes-90.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ECSXY7eSp7ImA9WhBVF0k.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-6449855635180729878</id><published>2013-04-23T21:29:00.002+02:00</published><updated>2013-04-23T22:41:08.801+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-23T22:41:08.801+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="administration" /><category scheme="http://www.blogger.com/atom/ns#" term="traveler" /><title>Installing Traveler 9.0 on Linux - watch out for this inconsistency</title><content type="html">&lt;style type='text/css'&gt;
   .syntaxhighlighter { 
       overflow-y: hidden !important; 
       overflow-x: auto !important; 
    }
&lt;/style&gt;
I don't know if I am the only one to encounter this. I'll share it, maybe it saves some headache.&lt;br /&gt;
&lt;br /&gt;
Prior to Domino 9.0, the default program directory on Linux was:&lt;br /&gt;
&lt;pre class="brush: bash"&gt;/opt/ibm/lotus&lt;/pre&gt;
With version 9.0, it has been changed, as seen in this excerpt from the installation procedure:&lt;br /&gt;
&lt;pre class="brush: plain"&gt;Please specify a directory or press Enter to accept the default directory.
Program Files Directory Name [/opt/ibm/domino]&lt;/pre&gt;
However, it seems that Traveler 9.0 is not completely aware of this change. It will install just fine, but when you try to run it, it will crash with all sorts of nasty errors, such as:&lt;br /&gt;
&lt;pre class="brush: plain"&gt;
HTTP JVM: IBM Notes Traveler: cannot load allpackages - could not find /local/data/web1/../../../traveler.jar
HTTP JVM: Unable to load /opt/ibm/lotus/notes/90000/linux/travelerca. For more detailed information, please consult error-log-0.xml located in /local/data/web1/domino/workspace/logs
HTTP JVM: java.lang.UnsatisfiedLinkError: com/lotus/sync/dca/access/NativeAccess.jniInitThread()I
HTTP JVM:  at com.lotus.sync.dca.access.NativeAccess.initThread(NativeAccess.java:1133)
HTTP JVM:  at com.lotus.sync.dca.dispatch.DispatchThreadData.ensureJNIThreadInited(DispatchThreadData.java:478)
&lt;/pre&gt;
The second error is actually the clue to the cause and to the solution - for some reason, the Traveler is looking for travelerca (actually&amp;nbsp;libtravelerca.so) in &lt;span style="font-family: Courier New, Courier, monospace;"&gt;/opt/ibm/lotus&lt;/span&gt; - the pre-9.0 installation location.&lt;br /&gt;
&lt;br /&gt;
It is an easy one to fix though, one just needs to make a symbolic link (as root), like this :&lt;br /&gt;
&lt;pre class="brush: bash"&gt;# cd /opt/ibm
# ln -s domino lotus
# ll
total 4
drwxr-xr-x 4 root root 4096 Mar 27 00:34 domino
lrwxrwxrwx 1 root root &amp;nbsp; &amp;nbsp;6 Apr 23 20:56 lotus -&amp;gt; domino
&lt;/pre&gt;
&lt;div&gt;
I think this problem only occurs in new Domino 9.0 installations. If you upgrade from 8.5.x, the program directory is &lt;span style="font-family: Courier New, Courier, monospace;"&gt;/opt/ibm/lotus&lt;/span&gt; and this error does not happen.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
As a side note, if you are using&amp;nbsp;&lt;a class="g-profile" href="https://plus.google.com/100379994261840402776" target="_blank"&gt;+Daniel Nashed&lt;/a&gt;'s &lt;a href="http://www.nashcom.de/nshweb/pages/startscript.htm" target="_blank"&gt;start/stop scripts&lt;/a&gt;, you'll also need to edit them as they have &lt;span style="font-family: Courier New, Courier, monospace;"&gt;/opt/ibm/lotus&lt;/span&gt; hard-coded in few places.&lt;/div&gt;
&lt;br /&gt;
&lt;script type="text/javascript"&gt;SyntaxHighlighter.highlight();&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=5yWB9Ya2BIc:lQg2dpXi_ss:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=5yWB9Ya2BIc:lQg2dpXi_ss:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=5yWB9Ya2BIc:lQg2dpXi_ss:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/5yWB9Ya2BIc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/6449855635180729878/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2013/04/installing-traveler-90-on-linux-watch.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/6449855635180729878?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/6449855635180729878?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/5yWB9Ya2BIc/installing-traveler-90-on-linux-watch.html" title="Installing Traveler 9.0 on Linux - watch out for this inconsistency" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2013/04/installing-traveler-90-on-linux-watch.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYFSH8-eip7ImA9WhNbEkU.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-8513081718106446408</id><published>2013-01-15T10:15:00.000+01:00</published><updated>2013-01-15T22:08:39.152+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-15T22:08:39.152+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="red hat" /><category scheme="http://www.blogger.com/atom/ns#" term="ibm" /><title>A Success Story - IBM, Red Hat (and Domino)</title><content type="html">&lt;img alt="COMPUTING systems d.o.o." border="0" src="http://2.bp.blogspot.com/-oOHbNDKaz-A/UPUaVabAMpI/AAAAAAAABBA/Bmz_N4bqa3k/s1600/cs_h.png" height="50" style="border: 0; box-shadow: none;" title="COMPUTING systems d.o.o." width="400" /&gt;&lt;br /&gt;
&lt;br /&gt;
I feel proud to share with you &lt;a href="http://www-01.ibm.com/software/success/cssdb.nsf/CS/KFIN-93KQ8V?OpenDocument&amp;amp;Site=corp&amp;amp;cty=en_us" target="_blank"&gt;this success story&lt;/a&gt; that IBM has recently published. It details the work that we (&lt;a href="http://www.cs-computing.com/" target="_blank"&gt;COMPUTING systems d.o.o.&lt;/a&gt;) did on a complete infrastructure overhaul for one of our customers.&lt;br /&gt;
&lt;br /&gt;
While it focuses on IBM System x servers, System Storage and Red Hat Enterprise Virtualization, it does mention Domino / Notes as well.&lt;br /&gt;
&lt;br /&gt;
Sometime this year, when the complete collaboration infrastructure - including Notes / Domino, Sametime and Connections - is in place and operational, I hope that we shall be able to write a success story about it as well.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;img border="0" src="http://1.bp.blogspot.com/-XcAA0uSQFhM/UPUbGd0bBAI/AAAAAAAABBQ/4a5yR9_Oieg/s1600/sasabrkic_BPMark_web_list.jpg" style="border: 0; box-shadow: none;" /&gt;&amp;nbsp;&amp;nbsp;&lt;img border="0" src="http://2.bp.blogspot.com/-5VFrDDLm8O4/UPUayMeEefI/AAAAAAAABBI/4-C7PtvdUvM/s1600/RHBusReadyLogo_RGB.png" style="border: 0; box-shadow: none;" /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=2AvHN21Pqfs:PKN6gu9N_ms:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=2AvHN21Pqfs:PKN6gu9N_ms:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=2AvHN21Pqfs:PKN6gu9N_ms:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/2AvHN21Pqfs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/8513081718106446408/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2013/01/a-success-story-ibm-red-hat-and-domino.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8513081718106446408?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8513081718106446408?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/2AvHN21Pqfs/a-success-story-ibm-red-hat-and-domino.html" title="A Success Story - IBM, Red Hat (and Domino)" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-oOHbNDKaz-A/UPUaVabAMpI/AAAAAAAABBA/Bmz_N4bqa3k/s72-c/cs_h.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2013/01/a-success-story-ibm-red-hat-and-domino.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIEQ38_eCp7ImA9WhNbFUU.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-1079063508789363949</id><published>2013-01-08T14:39:00.000+01:00</published><updated>2013-01-19T09:01:42.140+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-19T09:01:42.140+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="notes" /><category scheme="http://www.blogger.com/atom/ns#" term="symphony" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="administration" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>IBM Notes / Domino 9.0 Beta - initial impressions</title><content type="html">I've spent the last few weeks playing with and testing Notes / Domino 9 Social Edition Beta. In &lt;a href="http://lotusshadeofyellow.blogspot.com/2012/12/notes-domino-90-linux-64-bit-symphony_18.html"&gt;the last post&lt;/a&gt;, I highlighted a few issues that I saw as possibly being problematic. I am glad to say that my fears have been unfounded. This is what I have discovered so far:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Domino 64-bit on Linux&lt;/b&gt; - works like a charm. I installed one Domino 64-bit server from the scratch and I even upgraded an existing 32-bit 8.5.3 FP3 server. I don't know what official recommendations will be regarding upgrading 32-bit servers, but everything seems to work perfectly. Even though the Domino is 64-bit, you'll still need a few 32-bit libraries (I think they are for GUI installer). The good thing is that installer is very kind and will list all of the missing dependencies.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Symphony&lt;/b&gt; - I haven't played with the widget that's supposed to enable Notes applications to use stand-alone Symphony, but judging by the comments elsewhere it doesn't work very well (yet). I have gone through our applications and only one uses the LotusScript&amp;nbsp;Symphony API and is therefore affected by the removal of the embedded Symphony. The rest uses the UNO API and works perfectly with the latest version of the OpenOffice. Some templates will need minor adjustments, but no code change will be necessary. Which is very positive.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;XPages Extension Library&lt;/b&gt; is integrated in the product and it works flawlessly. I disabled OSGi bundles that I set up previously on the 8.5.3 server and everything just worked. The Domino Designer works properly and recognizes and builds all code written in the previous versions.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Activity Stream and Embedded Experience&lt;/b&gt; - this is the most exciting part. In a way, it embeds a part of Connections in the Notes client. You get to see updates from your network and you can interact with some posts directly - I assume that third-party applications will be able to post to the activity stream as well. (I already envision our support application posting tickets or our time tracker posting leave requests to the stream. And users acting on them directly from the stream.)&lt;br /&gt;At the moment, the integration is complicated and hard to get working. I hope that some parts of the integration will be simplified and the rest properly described in the documentation by the time version 9 is released.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Upgrading &lt;/b&gt;- I upgraded few servers from 8.5.3 and there is no need to waste words: it just works, without a single problem. Pure excellence!&lt;/li&gt;
&lt;/ul&gt;
Those were the initial findings, more testing to come...&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=dwfgvYX8hgg:krnit6QZgMY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=dwfgvYX8hgg:krnit6QZgMY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=dwfgvYX8hgg:krnit6QZgMY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/dwfgvYX8hgg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/1079063508789363949/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2013/01/ibm-notes-domino-90-beta-initial.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/1079063508789363949?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/1079063508789363949?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/dwfgvYX8hgg/ibm-notes-domino-90-beta-initial.html" title="IBM Notes / Domino 9.0 Beta - initial impressions" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>6</thr:total><georss:featurename>Banja Luka, Bosnia and Herzegovina</georss:featurename><georss:point>44.76666669999999 17.18333329999996</georss:point><georss:box>44.40637619999999 16.537886299999958 45.126957199999985 17.82878029999996</georss:box><feedburner:origLink>http://blog.squareone.ba/2013/01/ibm-notes-domino-90-beta-initial.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQBQ3s8eip7ImA9WhNUE00.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-4835931809034714616</id><published>2012-12-18T10:08:00.001+01:00</published><updated>2013-01-04T14:49:12.572+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-04T14:49:12.572+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="notes" /><category scheme="http://www.blogger.com/atom/ns#" term="symphony" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="administration" /><category scheme="http://www.blogger.com/atom/ns#" term="sametime" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>Notes / Domino 9.0, Linux 64-bit, Symphony and other stuff</title><content type="html">So, the first ever public beta of a Lotus Notes / Domino release is upon us. Like many others, I rushed to download and install it.&lt;br /&gt;&lt;br /&gt; It became obvious immediately that this update will require much more thought, planning and testing than the previous ones. Here are some of the reasons:&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Domino 64-bit on Linux&lt;/b&gt; - Linux users now have access to a 64-bit version of the Domino server. That is good - no more installing 32-bit libraries, fiddling with memory settings and the like. But, can we do an in-place upgrade of existing 32-bit Domino servers? Are there any restriction to the 64-bit version, which seems to be the case with other OSes?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Supported Linux releases&lt;/b&gt; - I tried upgrading one of our Domino servers running on Red Hat 5.7. The installation went smoothly, but the Domino wouldn't run. It requires glibc version 2.7 and RHEL 5.7 ships with glibc 2.5. Which means that I must upgrade to RHEL 6.x that ships with glibc 2.12. Which, in turn, means that when the 9.0 is released there will be quite a lot Linux servers needing upgrade, which may or may not be possible.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Symphony&lt;/b&gt; - Symphony is no longer included with the Notes client. As a matter of fact, IBM no longer does any new development of the Symphony, the efforts are instead switched to fully supporting the Apache OpenOffice. We, like many others, have invested in the Symphony: we are using it as the only office suite and we are counting on it in numerous applications for creating reports and outputting (nicely) formatted PDFs. According to &lt;a href="http://www.johndavidhead.com/jhead/johnhead.nsf/dx/ibm-notes-9-embedded-lotus-symphony-is-gone-but-application-developers-should-not-fret"&gt;a blog post by John Head&lt;/a&gt;, there will be a plug-in that will enable applications to seamlessly use the stand-alone version of the Symphony. However, at this moment it it unclear whether this plug-in will be officially supported by IBM and how well it will work. And we'll still need to use the Symphony, which no longer is being developed.&lt;br /&gt;So, for our part, we will bid farewell to the Symphony when Notes / Domino 9.0 is released. We'll switch to either OpenOffice or LibreOffice. And, during this next few months we'll perform a major overhaul of our applications and get rid of the Symphony-related code. Instead of it we plan to use the &lt;a href="http://incubator.apache.org/odftoolkit/simple/index.html"&gt;Apache ODF Toolkit&lt;/a&gt; and the &lt;a href="http://poi.apache.org/"&gt;Apache POI&lt;/a&gt;, which will allow us to create documents on server (adding an additional bonus of being reusable in our XPages applications).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Sametime&lt;/b&gt; - at this point it is still unclear how Sametime, Quickr and other products will be affected by upgrade to version 9.0. Judging by the beta forums, the Sametime seems to work. But, the question is whether it is going to be supported and on which platforms: e.g. Sametime Community Server 8.5.2 IFR1 is officially supported on RHEL 5.4, but not on RHEL 6.x that is required for Domino 9.0.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;XPages Extension Library&lt;/b&gt; - the Extension Library is now included with the Notes / Domino. So far, we used the "stand-alone" version of the Extension Library. The switch to the integrated version will probably be painless, but there is still need to clean the servers and remove the OSGi bundles. As a side note - how and how often is this integrated version updated? Can it be updated independently or must we wait for fix packs for updates?&lt;/li&gt;
&lt;/ul&gt;
So, at the moment there are lot of questions. Some of them could be answered immediately if IBM had produced any kind of documentation. I know this is a beta, but I still expect (draft) documentation to be available. In this way, there will be more job for us - but in the end, I am sure, we'll all end up running version 9.0 :-)&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=ZQm9YKljpIk:Yjk5CiRaMvM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=ZQm9YKljpIk:Yjk5CiRaMvM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=ZQm9YKljpIk:Yjk5CiRaMvM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/ZQm9YKljpIk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/4835931809034714616/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2012/12/notes-domino-90-linux-64-bit-symphony_18.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/4835931809034714616?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/4835931809034714616?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/ZQm9YKljpIk/notes-domino-90-linux-64-bit-symphony_18.html" title="Notes / Domino 9.0, Linux 64-bit, Symphony and other stuff" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.squareone.ba/2012/12/notes-domino-90-linux-64-bit-symphony_18.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUGRXwzeCp7ImA9WhNUE00.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-4513692860847127970</id><published>2012-11-30T09:26:00.001+01:00</published><updated>2013-01-04T14:47:04.280+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-04T14:47:04.280+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell" /><category scheme="http://www.blogger.com/atom/ns#" term="ibm" /><category scheme="http://www.blogger.com/atom/ns#" term="administration" /><category scheme="http://www.blogger.com/atom/ns#" term="aws" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>Backup Domino to Amazon S3 Cloud Storage</title><content type="html">I can't believe it's been 9 months since the last post!&lt;br /&gt;
&lt;br /&gt;
A lot has happened during that time: there has been a lot of XPages programming, great time time with Scrum, frustration with source code management and administration of some old (Sametime) and some new (Connections) applications. More about thatt some other time.&lt;br /&gt;
&lt;br /&gt;
What I wanted to share with you this time is a way to cheaply and reliably backup your Domino server(s) to cloud.&lt;br /&gt;
&lt;h3&gt;
 The Need&lt;/h3&gt;
We have a few small customers running Domino. They run it on Microsoft Windows servers, use it for mail and a custom application or two. The hardware is often redundant and reliable, but they still want to backup their Domino environment. For, no matter how your hardware is reliable, it won't help when you delete that important e-mail (and it expires from the Trash).&lt;br /&gt;
&lt;br /&gt;
Backup solutions that are able to backup Domino online are expensive and require expensive supporting hardware (dedicated backup servers, tape libraries). Nothing a small customer is ready to purchase.&lt;br /&gt;
&lt;br /&gt;
In the past, we used to write batch files to shut-down server, wait predefined time for a server to stop, than copy files from the Domino data directory to a network share or external disk and then start server again. It worked, but there is a better solution.&lt;br /&gt;
&lt;h3&gt;
 The Solution&lt;/h3&gt;
The solution we are using now involves using Windows PowerShell and Amazon S3 Storage.&lt;br /&gt;
&lt;br /&gt;
PowerShell is an extremely powerful administration tool and makes tasks such as starting and stopping services (such as Domino server) and invoking other applications reliable and easy.&lt;br /&gt;
&lt;br /&gt;
Backup to Amazon S3 has always been an option, but here in Bosnia until recently, the cost of obtaining sufficient upload speeds precluded any practical use of this service.&lt;br /&gt;
&lt;br /&gt;
Thankfully, our ISPs have shown some mercy and, while still snail-paced comparing to the developed countries, the upload speeds are high enough to finish majority of backup uploads during a nightly backup window.&lt;br /&gt;
&lt;br /&gt;
Another important development is the introduction of the Amazon Glacier storage, costing next to nothing. The catch with the Glacier is that your files are not immediately available for download / restore as is the case with the standard S3 storage. Instead, you need to wait some 3 - 5 hours for your data to get ready. The data is still covered by the astonishing 99.999999999% durability guarantee, just like the standard S3 storage.&lt;br /&gt;
&lt;br /&gt;
Amazon has provided seamless integration between S3 and Glacier, so you can simply and completely transparently move data from S3 to Glacier. We usually recommend our customers to keep 1 - 2 weeks of backups in the S3 (for quick and easy restores) and move older backups to Glacier. It is also easy to configure automatic data expiration, so you don't end up paying for obsolete data.&lt;br /&gt;
&lt;br /&gt;
All of our customers fall in the first 1 TB tier, so according to &lt;a href="http://aws.amazon.com/s3/pricing-effective-december-2012/"&gt;the just reduced prices&lt;/a&gt;, they pay only $0.095 per GB per month for standard S3 storage and $0.010 per GB per month for Glacier storage (there is also the Reduced Redundancy Storage at $0.076 per GB per month, which is similar to the standard S3 storage but with "only" 99.99% durability). So a customer with some 100 GB of backup will pay no more than $10 per month. And that is cheap!&lt;br /&gt;
&lt;br /&gt;
I have written a PowerShell script that automates the whole process: it stops the Domino server, copies predefined files from the Domino data directory to a temporary directory, starts the Domino server, zips the files and uploads them to the S3 storage.&lt;br /&gt;
&lt;br /&gt;
By using the PowerShell we can precisely detect when Domino server shuts down so file copy operation can commence immediately afterwards. As soon as files are copied, the Domino server is started again. This means that the downtime is minimal, usually less than 2 minutes.&lt;br /&gt;
&lt;br /&gt;
Once the Domino server is started, the script proceeds with zipping (we use 7-Zip at maximum compression setting) and uploading the data.&lt;br /&gt;
&lt;h3&gt;
 The Implementation&lt;/h3&gt;
If you are interested in this solution, you will need the script, which you can get from the &lt;a href="https://github.com/sasabrkic/domino-backup-to-s3"&gt;GitHub&lt;/a&gt; (I would think that the script is too big for &lt;a href="http://openntf.org/XSnippets.nsf/home.xsp"&gt;XSnippets&lt;/a&gt;, what do you think?). I have also attached the current version to this post.&lt;br /&gt;
&lt;br /&gt;
Apart from the script, you will also need: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;PowerShell 2.0 environment. If you are using Windows 7 or Windows Server 2008 R2 you already have it. For older systems &lt;a href="http://support.microsoft.com/kb/968929"&gt;head over to Microsoft&lt;/a&gt; and download the Windows Management Framework Core for your platform.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;7-Zip, which is used for compressing the backup files. The free download is available at &lt;a href="http://7-zip.org/"&gt;7-Zip.org&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;S3Sync, which is used to upload files to Amazon S3 Storage service. S3Sync is available for free download at &lt;a href="http://sprightlysoft.com/S3Sync/"&gt;SprightlySoft's website&lt;/a&gt;. No installation is necessary, simply extract it to a suitable location (remember the location, you will need to enter it into the script).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Amazon S3 account, if you don't have one. Simply head to the &lt;a href="http://aws.amazon.com/"&gt;Amazon AWS&lt;/a&gt; site and sign up for the account.There is a &lt;a href="http://aws.amazon.com/free/"&gt;Free Usage Tier&lt;/a&gt; that will give you 5 GB of free S3 storage, so you can test it for free.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
Once you have created your account and logged in into the &lt;a href="https://console.aws.amazon.com/console/home"&gt;AWS console&lt;/a&gt;, choose to manage S3 storage and create a bucket. The bucket is a place where your files will go. You can create multiple buckets if they are used for different things (you can serve a web site directly from a bucket) or if you want them to have different lifecycle policy.&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-NhzYnDHZvIk/UOac6kBtjAI/AAAAAAAAA2Y/jYS-28TPziw/s1600/s3backup_1.gif"&gt;&lt;img border="0" height="219" src="http://2.bp.blogspot.com/-NhzYnDHZvIk/UOac6kBtjAI/AAAAAAAAA2Y/jYS-28TPziw/s400/s3backup_1.gif" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
In the bucket, you can create folders to further organize things.&lt;br /&gt;
&lt;br /&gt;
If you select a bucket and click Actions &amp;gt; Properties you will see properties for that bucket and be able to set, among other things, lifecycle policies:&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-7Y9ER073TZ8/UOac6gwZTPI/AAAAAAAAA2c/0vmsEGxe17E/s1600/s3backup_2.gif"&gt;&lt;img border="0" height="210" src="http://1.bp.blogspot.com/-7Y9ER073TZ8/UOac6gwZTPI/AAAAAAAAA2c/0vmsEGxe17E/s400/s3backup_2.gif" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
Click Add rule and you will be able to specify when the data is to be moved to Glacier and if and when it is going to be removed. You can specify the time as either an exact date or as number of days since the creation of an object. The rule can apply to the entire bucket or a single folder:&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/-lnKJq8MBEMI/UOac6qdFPzI/AAAAAAAAA2U/8WbB7HIXkDY/s1600/s3backup_3.gif"&gt;&lt;img border="0" height="293" src="http://4.bp.blogspot.com/-lnKJq8MBEMI/UOac6qdFPzI/AAAAAAAAA2U/8WbB7HIXkDY/s400/s3backup_3.gif" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
Lastly, you will need your security credentials for accessing your S3 storage. Click on your name in the upper right corner and choose Security Credentials:&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-COE0z2fk_PU/UOac7PiYFaI/AAAAAAAAA2g/uSPWGEhogbI/s1600/s3backup_4.gif"&gt;&lt;img border="0" height="290" src="http://2.bp.blogspot.com/-COE0z2fk_PU/UOac7PiYFaI/AAAAAAAAA2g/uSPWGEhogbI/s400/s3backup_4.gif" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
You will be presented with a page where you can manage all sorts of security credentials for accessing AWS. You are interested in Access Keys - copy your Access Key ID and Secret Access Key, you will need them in the script.&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-vIXvu5YdwVQ/UOac7WIBdQI/AAAAAAAAA2k/FqRS5XdJsw0/s1600/s3backup_5.gif"&gt;&lt;img border="0" height="256" src="http://2.bp.blogspot.com/-vIXvu5YdwVQ/UOac7WIBdQI/AAAAAAAAA2k/FqRS5XdJsw0/s400/s3backup_5.gif" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
You can use AWS console for managing and accessing your files, or you can use dedicated a application like CloudBerry's free &lt;a href="http://www.cloudberrylab.com/free-amazon-s3-explorer-cloudfront-IAM.aspx"&gt;Explorer for Amazon S3&lt;/a&gt;, that will let you do more things easily.&lt;br /&gt;
&lt;br /&gt;
And that is all that you need to know about the Amazon S3 for this purpose. Refer to the online help (it is good) if you want to know more, or let me know in the comments and I'll try to help.&lt;br /&gt;
&lt;h3&gt;
 The script&lt;/h3&gt;
The script is actually fairly easy. The whole work is done by some ten lines of code. The rest of the code is there to provide meaningful logging - it will let you know how long it took to shut down your Domino server, what files have been copied and how long it took to upload the files. It will also let you know about eventual problems.&lt;br /&gt;
&lt;br /&gt;
Before you start using the script, you will need to set some variables, they are all located at the beginning of the script. Among other things you will need to set Domino server service name, location of the data folder and what files to back-up. You will also need to set your Amazon S3 details. Check also that the default locations for 7-Zip and S3Sync are valid for your environment.&lt;br /&gt;
&lt;br /&gt;
Please make sure to end all Windows directory paths with a backslash (). Also, if you are specifying an S3 folder, it needs to end with a forward slash (/).&lt;br /&gt;
&lt;br /&gt;
Currently, the script compresses the files with 7-Zip algorithm and uses the strongest compression. If that is not suitable for your needs, let me know and I'll let you know what to change to set one of the supported algorithms.&lt;br /&gt;
&lt;br /&gt;
The upload to S3 is secured by SSL, but the 7-Zip file is not encrypted. 7-Zip has support for strong encryption - once again, let me know if you need that and I'll help you fix it.&lt;br /&gt;
&lt;h3&gt;
 Running the script&lt;/h3&gt;
Once you downloaded the script open it in a text editor or PowerShell ISE , which is a PowerShell script editor. (If you plan to spend more time with PowerShell, &lt;a href="http://www.powergui.org/index.jspa"&gt;PowerGUI&lt;/a&gt; might be a good alternative. Then you might also find this book interesting: &lt;a href="http://powershell.com/Mastering-PowerShell.pdf"&gt;Mastering PowerShell by Tobias Weltner&lt;/a&gt;.)&lt;br /&gt;
&lt;br /&gt;
Edit the script variables as described in the file and save the script.&lt;br /&gt;
&lt;br /&gt;
By default, Windows will not allow you to run scripts. To change this, you need to open a PowerShell console (with alleviated privileges (Run as Administrator) if you are on Vista / 7 / 2008) and enter following:&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: ps"&gt;Set-ExecutionPolicy RemoteSigned&lt;/pre&gt;
&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/-E_ezDcPr0gg/UOac7qLClKI/AAAAAAAAA2o/9S2PZL7oBmY/s1600/s3backup_6.gif"&gt;&lt;img border="0" height="75" src="http://4.bp.blogspot.com/-E_ezDcPr0gg/UOac7qLClKI/AAAAAAAAA2o/9S2PZL7oBmY/s400/s3backup_6.gif" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
This will change the execution policy to allow local scripts. You can check if it applied correctly by issuing command:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: ps"&gt;Get-ExecutionPolicy&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
You can now simply navigate to the directory where you saved the script and execute it by entering:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: ps"&gt;.domino_backup.ps1&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You can run the script manually or you can schedule it using Windows Task Manager.&lt;br /&gt;
&lt;br /&gt;
That's it, I hope you find it useful. Let me know if you use the script - how it works, what would you like to improve or what needs to be fixed.&lt;/div&gt;
&lt;script type="text/javascript"&gt;SyntaxHighlighter.highlight();&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=vdYXfJJus9o:n_rwJDqjT78:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=vdYXfJJus9o:n_rwJDqjT78:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=vdYXfJJus9o:n_rwJDqjT78:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/vdYXfJJus9o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/4513692860847127970/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2012/11/backup-domino-to-amazon-s3-cloud-storage_30.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/4513692860847127970?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/4513692860847127970?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/vdYXfJJus9o/backup-domino-to-amazon-s3-cloud-storage_30.html" title="Backup Domino to Amazon S3 Cloud Storage" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-NhzYnDHZvIk/UOac6kBtjAI/AAAAAAAAA2Y/jYS-28TPziw/s72-c/s3backup_1.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2012/11/backup-domino-to-amazon-s3-cloud-storage_30.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8ARHs5fSp7ImA9WhNUE00.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-8251778405842522653</id><published>2012-03-01T13:15:00.001+01:00</published><updated>2013-01-04T14:57:25.525+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-04T14:57:25.525+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><category scheme="http://www.blogger.com/atom/ns#" term="errata" /><title>Update: XPages, Directory Assistance and context.getUser()</title><content type="html">A few days ago &lt;a href="http://lsoy.posterous.com/xpages-directory-assistance-and-contextgetuse"&gt;I wrote about my problems&lt;/a&gt;&amp;nbsp;with the Directory Assistance and getting user roles with context.getUser().&lt;br /&gt;
Prompted by Mark Leusink's comment, I decided to take a look at our Directory Assistance settings. I started changing settings and... context.getUser().getRoles() started to work!&lt;br /&gt;
The setting that made all the difference was "Use exclusively for group authorization or credential authentication".&lt;br /&gt;
&lt;div class="p_embed p_image_embed"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-SuSwXH-z3Cc/UObfmtr2l2I/AAAAAAAAA3Y/YanlN2Ctjq8/s1600/da_4.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="208" src="http://1.bp.blogspot.com/-SuSwXH-z3Cc/UObfmtr2l2I/AAAAAAAAA3Y/YanlN2Ctjq8/s320/da_4.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
If you set this to Yes, as it was originally set in our case, context.getUser().getRoles() will not work. Setting this to No makes it work. No other settings have any influence on context.getUser().&lt;/div&gt;
So, whether you have access to Directory Assistance settings and / or are allowed to change them will decide what implementation you choose. context.getUser().getRoles() is shorter and more elegant, session.getCurrentDatabase().getACL().getEntry(session.getEffectiveUserName()).getRoles() seems to be safer in the long run. The choice is yours.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=wR7M-4EV-IE:192Y6GbxH7U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=wR7M-4EV-IE:192Y6GbxH7U:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=wR7M-4EV-IE:192Y6GbxH7U:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/wR7M-4EV-IE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/8251778405842522653/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2012/03/update-xpages-directory-assistance-and_1.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8251778405842522653?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8251778405842522653?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/wR7M-4EV-IE/update-xpages-directory-assistance-and_1.html" title="Update: XPages, Directory Assistance and context.getUser()" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-SuSwXH-z3Cc/UObfmtr2l2I/AAAAAAAAA3Y/YanlN2Ctjq8/s72-c/da_4.gif" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.squareone.ba/2012/03/update-xpages-directory-assistance-and_1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkABSXw-cSp7ImA9WhNUE00.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-2237275921142172376</id><published>2012-03-01T12:01:00.001+01:00</published><updated>2013-01-04T15:12:38.259+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-04T15:12:38.259+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>Formatting dates in XPages links - the Java way</title><content type="html">As many of you have experienced, date and number formatting of the link text in xp:link does not work. Sure, you can assign a data converter, just as you would for a field or a computed text, but it won't work. &lt;a href="http://www.intec.co.uk/formatting-dates-on-link/"&gt;Paul Withers&lt;/a&gt; and &lt;a href="http://www.fdehedin.ch/168/format-a-number-in-xplink"&gt;Frédéric Dehédin&lt;/a&gt;, among others, have offered nice SSJS solutions to this problem.&lt;br /&gt;
&lt;br /&gt;
When I encountered the same problem, I took a somewhat different approach. I didn't like the idea of creating SSJS libraries for something that is essentially a hack and which can be easily solved with a single line (albeit long) of Java code.&lt;br /&gt;
&lt;br /&gt;
So here is your one-liner that will let you format dates in xp:links:&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;java.text.DateFormat.getDateInstance().format(yourDateValue);&lt;/pre&gt;
&lt;br /&gt;
What happens here is that you use the DateFormat class (you must call it by its full name java.text.DateFormat) which knows how to format dates. Using DateFormat, you first get dateInstance which knows everything about dates and their formatting and then you call format with the date value that you want to format.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Let's first take a look at the date value. This value needs to be of type java.util.Date.&lt;/div&gt;
&lt;div&gt;
If you already have this value in a field on your xpage, you simply need to call&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;getComponent("elementID").getValue()&lt;/pre&gt;
&lt;br /&gt;
The complete code would look something like this:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;java.text.DateFormat.getDateInstance().format(getComponent("elementID").getValue());&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
You can also read a date value from the Notes back-end, a Notes document for example. Say you have a Notes document as the data source and you call it doc. You'll get your date value by calling:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;doc.getItemValueDate("fieldName")&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
which translates to:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;java.text.DateFormat.getDateInstance().format(doc.getItemValueDate("fieldName"));&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
The method getItemValueDate returns java.util.Date, so you are OK there. If you, however, have a Notes DateTime item, you need to convert it to Java Date first. You do so by calling the method toJavaDate(). For example:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;doc.getItemValueDateTime("fieldName").toJavaDate()&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
getItemValueDateTime returns Notes DateTime and by calling toJavaDate you transform it to Java Date that you can use.&lt;br /&gt;
&lt;br /&gt;
That was the date value. Now, let's look at the format options. Calling:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;java.text.DateFormat.getDateInstance().format(doc.getItemValueDate("fieldName"));&lt;/pre&gt;
&lt;br /&gt;
will return you a string formatted using the default date format and the default locale for the JVM running your application. Most likely, this is not what you want. Fortunately, you can change this easily. getDateInstance accepts arguments that tell it what date format and what locale you want to use in the form of getDateInstance(int style, Locale aLocale). For example, you could do something like this:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;java.text.DateFormat.getDateInstance(java.text.DateFormat.SHORT, Locale.US).format(doc.getItemValueDate("fieldName"));&lt;/pre&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;java.text.DateFormat.getDateInstance(java.text.DateFormat.LONG, Locale.GERMANY).format(doc.getItemValueDate("fieldName"));&lt;/pre&gt;
&lt;br /&gt;
As you can see, you can use predefined constants for format and locale. The format constants are: FULL, LONG, MEDIUM and SHORT. Just don't forget you need to call them by the full name, e.g. java.text.DateFormat.FULL.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
There are many predefined locales as well, you should check &lt;a href="http://docs.oracle.com/javase/6/docs/api/java/util/Locale.html"&gt;Java API documentation&lt;/a&gt; (look under Field Summary) to find out more. If your locale is not predefined, don't despair - it is easy to define it. What you would need to know are the &lt;a href="http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes"&gt;lowercase two-letter ISO-639 code&lt;/a&gt; for the language and the &lt;a href="http://en.wikipedia.org/wiki/ISO_3166-1"&gt;uppercase two-letter ISO-3166 code&lt;/a&gt; for the country. So, if you want to specify locale for the Italian speaking part of Switzerland, you would use:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;new Locale("it", "CH")&lt;/pre&gt;
&lt;br /&gt;
which in turn would give something like this:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;java.text.DateFormat.getDateInstance(java.text.DateFormat.LONG, new Locale("it", "CH")).format(doc.getItemValueDate("fieldName"));&lt;/pre&gt;
&lt;br /&gt;
Of course, you could read language and country from some sort of settings document, making your display fully customizable.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Finally, you can also read the locale from the user's browser by calling:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;context.getLocale()&lt;/pre&gt;
&lt;br /&gt;
resulting in:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: java"&gt;java.text.DateFormat.getDateInstance(java.text.DateFormat.MEDIUM, context.getLocale()).format(doc.getItemValueDate("fieldName"));&lt;/pre&gt;
&lt;br /&gt;
And that's all. Let me know if something is unclear. And for your homework you do similar conversion for numbers using either the &lt;a href="http://docs.oracle.com/javase/6/docs/api/java/text/NumberFormat.html"&gt;NumberFormat&lt;/a&gt; class or the &lt;a href="http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#format(java.util.Locale,%20java.lang.String,%20java.lang.Object...)"&gt;String.format&lt;/a&gt; method.&lt;/div&gt;
&lt;script type="text/javascript"&gt;SyntaxHighlighter.highlight();&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=lc5oDzhR6A8:7bhZ-3ydA_k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=lc5oDzhR6A8:7bhZ-3ydA_k:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=lc5oDzhR6A8:7bhZ-3ydA_k:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/lc5oDzhR6A8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/2237275921142172376/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2012/03/formatting-dates-in-xpages-links-java_1.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/2237275921142172376?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/2237275921142172376?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/lc5oDzhR6A8/formatting-dates-in-xpages-links-java_1.html" title="Formatting dates in XPages links - the Java way" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2012/03/formatting-dates-in-xpages-links-java_1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YCQH87eCp7ImA9WhNUE00.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-1254190525382663042</id><published>2012-02-28T14:42:00.001+01:00</published><updated>2013-01-04T15:19:21.100+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-04T15:19:21.100+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>XPages, Directory Assistance and context.getUser()</title><content type="html">It often happens that some parts of the GUI should be hidden, based on the current users authorizations. For that purpose, we have been using ACL roles and a short line of code to evaluate whether the current user is assigned to a specific role:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java"&gt;context.getUser().getRoles().contains("[RoleName]");&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
And this had worked very well until we recently introduced Directory Assistance and allowed users from the secondary directory to log in and use the application. For users from the secondary directory, the above procedure did not work - they could never see parts of the GUI requiring a role membership, i.e. the above line of code never evaluated to true. At the same time, users from the primary directory had no problem at all.&lt;br /&gt;
&lt;br /&gt;
I have recently read &lt;a href="http://xmage.gbs.com/blog.nsf/d6plinks/TTRY-8QWBBU"&gt;Tim Tripcony's post&lt;/a&gt; on problems with page ACL and Directory Assistance and suspected a similar problem here.&lt;br /&gt;
&lt;br /&gt;
This is what a simple test reveals. If a user from the primary directory logs in, context.getUser() will return a wealth of information:&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-GY4U0LesOus/UObfl_c9gtI/AAAAAAAAA3U/FS0Khddojsw/s1600/da_1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="112" src="http://2.bp.blogspot.com/-GY4U0LesOus/UObfl_c9gtI/AAAAAAAAA3U/FS0Khddojsw/s400/da_1.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
context.getUser().getRoles() returns all roles assigned to the user and hence checking for a specific role works as expected.&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
But, this is what happens when a user from a secondary  directory logs in:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-jPYL8UuY42U/UObfl8u8ugI/AAAAAAAAA3M/tyfHzKhnI_8/s1600/da_2.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="111" src="http://3.bp.blogspot.com/-jPYL8UuY42U/UObfl8u8ugI/AAAAAAAAA3M/tyfHzKhnI_8/s400/da_2.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The context.getUser() is all by empty, no roles are returned and check for a role name will always return false.&lt;br /&gt;
&lt;br /&gt;
And that is not good. I don't know if this is intended or not (feature or bug), but I needed to fix it. The first idea that occurred to me was to define roles for each user in a settings document, but that was too much of a hack for my liking. So I tested different ways to get the information about a user's roles and found that this one works:&lt;br /&gt;
&lt;br /&gt;
session.getCurrentDatabase().getACL().getEntry(session.getEffectiveUserName()).getRoles()&lt;br /&gt;
&lt;br /&gt;
This is how it looks if a user from the secondary directory logs in now:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-TVY5mzqdKDk/UObfmMUtIjI/AAAAAAAAA3Q/aieaXMeHEkM/s1600/da_3.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="98" src="http://3.bp.blogspot.com/-TVY5mzqdKDk/UObfmMUtIjI/AAAAAAAAA3Q/aieaXMeHEkM/s400/da_3.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The assigned roles are correctly recognized and it is easy to check for them by calling the isRoleEnabled() method. It also works correctly with users from the primary directory.&lt;br /&gt;
&lt;br /&gt;
So, if you are using or planning to use Directory Assistance and need to check assigned roles, this is the code that you can use.&lt;/div&gt;
&lt;/div&gt;
&lt;script type="text/javascript"&gt;SyntaxHighlighter.highlight();&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=pvOXf5BWIZ4:AOKDc_1q-Go:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=pvOXf5BWIZ4:AOKDc_1q-Go:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=pvOXf5BWIZ4:AOKDc_1q-Go:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/pvOXf5BWIZ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/1254190525382663042/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2012/02/xpages-directory-assistance-and_28.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/1254190525382663042?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/1254190525382663042?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/pvOXf5BWIZ4/xpages-directory-assistance-and_28.html" title="XPages, Directory Assistance and context.getUser()" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-GY4U0LesOus/UObfl_c9gtI/AAAAAAAAA3U/FS0Khddojsw/s72-c/da_1.gif" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.squareone.ba/2012/02/xpages-directory-assistance-and_28.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQHRns-cSp7ImA9WhNUE08.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-6027194985898961400</id><published>2012-02-09T22:05:00.001+01:00</published><updated>2013-01-04T19:15:37.559+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-04T19:15:37.559+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>Vertically stacking members in Dojo List Text Box</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
The extension library provides the Dojo List Text Box (djextListTextBox) control that, connected to a value picker, makes it possible to create a list whose members are easy to remove. Using the oneUI v2.1, the default display is similar to this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-YoSV85NZn2o/UOcZjIOhhxI/AAAAAAAAA30/X0v0WKI5lvo/s1600/dojoTextBox_1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-YoSV85NZn2o/UOcZjIOhhxI/AAAAAAAAA30/X0v0WKI5lvo/s1600/dojoTextBox_1.gif" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
But, what if you instead wanted list members to be stacked vertically? Something like this:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-cKwmdDZQ6QU/UOcZjKJQr4I/AAAAAAAAA34/w-ArPpVh-IA/s1600/dojoTextBox_2.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-cKwmdDZQ6QU/UOcZjKJQr4I/AAAAAAAAA34/w-ArPpVh-IA/s1600/dojoTextBox_2.gif" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
With some CSS, it is actually quite easy to accomplish. First, put your djextListTextBox inside a panel and give it a style class, let's call it verticalStack. Then, edit your existing or create a new style sheet and add following:&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: css"&gt;.verticalStack span {
 display: block;
 margin-left: 0px !important;
 }
 .verticalStack a span {
 display: inline;
 }&lt;/pre&gt;
&lt;br /&gt;
What does it all mean? If you take a look at the HTML code that the Dojo List Text Box control generates, you'll see that each list member is actually a &amp;lt;span&amp;gt; tag, which in turn contains an &amp;lt;a&amp;gt; tag that contains a &amp;lt;span&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
So, the CSS says that each &amp;lt;span&amp;gt; in the &amp;lt;div&amp;gt;  with class verticalStack should have block display style. &amp;lt;span&amp;gt; tags usually have inline display style, which means that multiple &amp;lt;span&amp;gt; tags are displayed in a row, one after the other. display: block will force them to behave like &amp;lt;p&amp;gt; or &amp;lt;div&amp;gt; tags and display one beneath the other.&lt;br /&gt;
&lt;br /&gt;
Now, there is a &amp;lt;span&amp;gt; within the &amp;lt;a&amp;gt; tag. And it is also affected by the block display. And that makes the close button (little x) to be displayed beneath the rest of the list member. This is taken care of by the .verticalStack a span style, which returns normal, inline, display style to all &amp;lt;span&amp;gt; tags that are within a &amp;lt;a&amp;gt; tag that is within an element with .verticalStack class applied.&lt;br /&gt;
&lt;br /&gt;
Finally, using the original style, each list member has applied left margin of 5 pixels to make separetion between consecutive members.We use margin-left: 0px !important to remove that margin and make our members nicely align. The CSS is hierarchical and there are styles higher in the hierarchy that would take precedence, so we need to use !important.&lt;br /&gt;
&lt;br /&gt;
That's all that is needed. Have in mind that this works if you are using oneUI, but it should point you in the right direction even if you are using other layout. And, by applying some more CSS you can easily make it look even better:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-UpdwtpEC2jQ/UOcZjT13u6I/AAAAAAAAA38/4OrhDaquC5Y/s1600/dojoTextBox_3.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-UpdwtpEC2jQ/UOcZjT13u6I/AAAAAAAAA38/4OrhDaquC5Y/s1600/dojoTextBox_3.gif" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;script type="text/javascript"&gt;SyntaxHighlighter.highlight();&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=CjMC3d-i7mY:5xO2aYSg0Wg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=CjMC3d-i7mY:5xO2aYSg0Wg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=CjMC3d-i7mY:5xO2aYSg0Wg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/CjMC3d-i7mY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/6027194985898961400/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2012/02/vertically-stacking-members-in-dojo_9.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/6027194985898961400?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/6027194985898961400?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/CjMC3d-i7mY/vertically-stacking-members-in-dojo_9.html" title="Vertically stacking members in Dojo List Text Box" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-YoSV85NZn2o/UOcZjIOhhxI/AAAAAAAAA30/X0v0WKI5lvo/s72-c/dojoTextBox_1.gif" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.squareone.ba/2012/02/vertically-stacking-members-in-dojo_9.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIASHs6fSp7ImA9WhNUE08.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-8784978132009396218</id><published>2012-02-06T08:41:00.001+01:00</published><updated>2013-01-04T19:19:09.515+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-04T19:19:09.515+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="ApplicationIsBorn" /><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>How expensive is view.getColumnValues()?</title><content type="html">I need expert help and advice.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In the &lt;a href="http://lsoy.posterous.com/tag/applicationisborn"&gt;application we are building&lt;/a&gt;, among other things, we keep record of all payments. One of the resources is an XPage that shows all payments due within certain number of days from 'today'.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This is how we did it: we already have a Domino view that displays all unpaid payments. We don't like creating a Domino view for each new requirement, so we decided to reuse this one. I wrote some Java code to go through all of these payments, find those that fall within the given time period and then extract interesting data (i.e. client name, due amount, due date) into a hash map. This hash map is saved in the view scope and used as data source for a repeat control on the XPage.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
We also evaluated a solution with full-text database search, but one of the requirements is that when a new payment is added or a payment is paid, the XPage must display those changes immediately. Which means that delay between payment change and full-text index update is unacceptable. And we didn't think that constantly forcing index update was a good idea either.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Our current solution works well, but I don't like to go through all documents each time I reload the XPage. Now, the view is small and lean (only one sorted column) and it will hardly ever have more than a hundred documents, so the computation is quick. Still, I would like to perform the computation only when the view has changed. One of the solutions that&amp;nbsp;occurred&amp;nbsp;to me is this:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Get view.&lt;/li&gt;
&lt;li&gt;Get all column values for the first column (view.getColumnValues(0);).&lt;/li&gt;
&lt;li&gt;Calculate the hash value of the column values.&lt;/li&gt;
&lt;li&gt;Get previously calculated hash value from the session/application scope and compare the two.&lt;/li&gt;
&lt;li&gt;If the hash values are the same, do nothing - the existing hash map with payment details is still valid.&lt;/li&gt;
&lt;li&gt;If the hash values are different, perform full computation, update the hash map with payment details and update the hash value.&lt;/li&gt;
&lt;/ol&gt;
Is this a sound approach? It should be less intensive than the current solution, but is there a better way to do this? How expensive is the view.getColumnValues() call?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Any comments would  be greatly appreciated.&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=tFW28sFCjf4:8uP-9eyMOgI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=tFW28sFCjf4:8uP-9eyMOgI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=tFW28sFCjf4:8uP-9eyMOgI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/tFW28sFCjf4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/8784978132009396218/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2012/02/how-expensive-is-viewgetcolumnvalues_6.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8784978132009396218?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8784978132009396218?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/tFW28sFCjf4/how-expensive-is-viewgetcolumnvalues_6.html" title="How expensive is view.getColumnValues()?" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://blog.squareone.ba/2012/02/how-expensive-is-viewgetcolumnvalues_6.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYFR30_cSp7ImA9WhNUFE0.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-8198109190700394227</id><published>2012-01-11T19:06:00.001+01:00</published><updated>2013-01-05T18:48:36.349+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-05T18:48:36.349+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mercurial" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="installation" /><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="red hat" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><title>Guide: Installing Mercurial server on Red Hat Enterprise Linux</title><content type="html">&lt;i&gt;Disclaimer&lt;/i&gt;: The credit for this guide goes to the guys who figured out all the difficult parts: &lt;a href="http://jake.murzy.com/"&gt;Jake Murzy&lt;/a&gt; and &lt;a href="http://billcarroll.posterous.com/"&gt;Bill Carroll&lt;/a&gt; for solving Red Hat related issues and &lt;a href="http://www.qtzar.com/blogs/qtzar.nsf"&gt;Declan Sciolla-Lynch&lt;/a&gt; for showing how to integrate Apache and Domino LDAP. I only brought it all together in one blog post.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If you are using Mercurial as a source control system, you probably wish you had a central repository with which all of the developers could sync. You might use one of the public domain servers, but chances are that you would want your own server that is completely under your control. Declan &lt;a href="http://www.qtzar.com/blogs/qtzar.nsf/byTag.xsp?tag=Mercurial"&gt;has showed&lt;/a&gt; how to install and configure Mercurial on Ubuntu server. But, what if you use Red Hat or some of its clones, like CentOS or Scientific Linux? Mercurial, being built for Debian, won't install on a Red Hat-based system and. But, don't despair - it is actually quite easy to install it on Red Hat. Just follow the steps.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This guide is tested using Red Hat, CentOS and Scientific Linux, both versions 5.x and 6.x, but only 32-bit. The rest is based on CentOS 6, but you can choose whicever you prefer, as there is no difference between them for our purpose.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I won't go into installation of the server itself. It has become straight forward, even for Linux beginners. When you install, it is enough to choose Basic Server as a the installation type. This will install basic things, without much overhead. If you wish, choose Gnome / KDE desktop and X Window System (and anything else for that matter), so that you can have GUI. You won't need GUI to install Mercurial, though.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Even though it is not advisable, I have logged in as root and performed all of the following tasks.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I suggest that you update complete system before proceeding, simply issue the following in terminal:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# yum update&lt;/pre&gt;
&lt;br /&gt;
OK, now it's time to do some business. First let's install Apache server and confirm version:&lt;br /&gt;
&lt;pre class="brush: bash"&gt;# yum install httpd

# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Jul  7 2011 11:27:40&lt;/pre&gt;
&lt;br /&gt;
Now, the Python should already be installed. Let's check the version:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# python -V
Python 2.6.5&lt;/pre&gt;
&lt;br /&gt;
You can have several Python environments installed on the server (something like JRE), depending on what different applications demand. Mercurial works fine with this version and we won't be running any conflicting applications, so we'll use this system installation.&lt;br /&gt;
&lt;br /&gt;
We'll be building Mercurial and mod_wsgi from source, so we need some tools and libraries.&lt;br /&gt;
Make should already be installed on the system, let's check:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# make -v
GNU Make 3.81&lt;/pre&gt;
&lt;br /&gt;
If not, install by running&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# yum install make&lt;/pre&gt;
&lt;br /&gt;
Now, install gcc&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# yum install gcc&lt;/pre&gt;
&lt;br /&gt;
Install rpm-build&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# yum install rpm-build&lt;/pre&gt;
&lt;br /&gt;
Install the libraries:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# yum install httpd-devel
# yum install python-devel&lt;/pre&gt;
&lt;br /&gt;
Now cd to a temporary / download directory. I usually use &lt;span class="inlineCode" style="font-family: Courier New, Courier, monospace;"&gt;/tmp&lt;/span&gt; for this:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# cd /tmp&lt;/pre&gt;
&lt;br /&gt;
Download mod_wsgi source:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# wget &lt;a href="http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz"&gt;http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz&lt;/a&gt;&lt;/pre&gt;
&lt;br /&gt;
Unpack:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# tar xvfz mod_wsgi-3.3.tar.gz&lt;/pre&gt;
&lt;br /&gt;
Build the module:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# cd mod_wsgi-3.3
# ./configure
# make&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
(You will see some warnings here, but it is OK.)&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# make install&lt;/pre&gt;
&lt;br /&gt;
This will install the library &lt;span style="font-family: Courier New, Courier, monospace;"&gt;mod_wsgi.so&lt;/span&gt; in &lt;span style="font-family: Courier New, Courier, monospace;"&gt;/etc/httpd/modules&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Now we need to do the similar thing with docutils.&lt;br /&gt;
&lt;pre class="brush: bash"&gt;# cd /tmp
# wget &lt;a href="http://prdownloads.sourceforge.net/docutils/docutils-0.8.1.tar.gz?download"&gt;http://prdownloads.sourceforge.net/docutils/docutils-0.8.1.tar.gz?download&lt;/a&gt;
# tar xvfz docutils-0.8.1.tar.gz
# cd docutils-0.8.1
# ./setup.py install&lt;/pre&gt;
&lt;br /&gt;
This will install docutils in &lt;span style="font-family: Courier New, Courier, monospace;"&gt;/usr/lib/python2.6/site-packages/docutils&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
We can now finally start installing Mercurial. We are going to make an rpm file, which you can keep and use to install Mercurial on other servers.&lt;br /&gt;
&lt;pre class="brush: bash"&gt;# cd /tmp
# wget &lt;a href="http://mercurial.selenic.com/release/mercurial-2.0.2.tar.gz"&gt;http://mercurial.selenic.com/release/mercurial-2.0.2.tar.gz&lt;/a&gt; 
# tar xvfz mercurial-2.0.2.tar.gz&lt;/pre&gt;
&lt;br /&gt;
Now you need to edit the file mercurial-2.0.2/contrib/mercurial.spec. Open this file in text editor and search for the line starting with "Version:" (near the top of the file) and replace "snapshot" with "2.0.2".&lt;br /&gt;
Then, go several lines down until you come to line starting with "BuildRequires:". Remove "python-docutils &amp;gt;= 0.5" from the list, so that the line looks like this:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;BuildRequires: python &amp;gt;= 2.4, python-devel, make, gcc, gettext&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
(For some reason, rpm-build does not see the docutils that we built in previous step, so we need to remove it as a prerequisite. But, it is there and Mercurial will use it.)&lt;br /&gt;
&lt;br /&gt;
If you are feeling geeky, you can do the same by issuing the following in the terminal:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# cd /tmp/mercurial-2.0.2/contrib/
# sed -i -e's/snapshot/2.0.2/' mercurial.spec
# sed -i -e's/, python-docutils &amp;gt;= 0.5//' mercurial.spec&lt;/pre&gt;
&lt;br /&gt;
Piece of cake :-)&lt;br /&gt;
&lt;br /&gt;
Now, we need to repackage everything:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# tar cvf - mercurial-2.0.2 | gzip &amp;gt; mercurial-2.0.2.tar.gz&lt;/pre&gt;
&lt;br /&gt;
Create the rpm:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# rpmbuild -tb mercurial-2.0.2.tar.gz&lt;/pre&gt;
&lt;br /&gt;
If everything goes well, you'll see&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;+ exit 0&lt;/span&gt;&lt;br /&gt;
as the last line. We have our rpm now, we are almost there.&lt;br /&gt;
&lt;br /&gt;
The created rpm could be in a few places. If you were doing everything like me and as the root, then yours should be in &lt;span style="font-family: Courier New, Courier, monospace;"&gt;/root/rpmbuild/RPMS/i386/&lt;/span&gt;:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# ls /root/rpmbuild/RPMS/i386/
mercurial-2.0.2-0.i386.rpm&lt;/pre&gt;
&lt;br /&gt;
Now we can install and check version:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# rpm -ivh /root/rpmbuild/RPMS/i386/mercurial-2.0.2-0.i386.rpm
Preparing...                ########################################### [100%]
   1:mercurial              ########################################### [100%]
[root@code1 tmp]# hg --version
Mercurial Distributed SCM (version 2.0.2)&lt;/pre&gt;
&lt;br /&gt;
And that was installation done. Now it's time to configure it.&lt;br /&gt;
&lt;br /&gt;
Open &lt;span style="font-family: Courier New, Courier, monospace;"&gt;/etc/httpd/conf/httpd.conf&lt;/span&gt; in a text editor (you might want to make a copy first).&lt;br /&gt;
&lt;br /&gt;
First, set these values (I show you my values, you should enter yours):&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;ServerAdmin admin@cs-computing.com
ServerName code1.cs-computing.com:80
NameVirtualHost *:80&lt;/pre&gt;
&lt;br /&gt;
(You will need to uncomment ServerName and NameVirtualHost)&lt;br /&gt;
&lt;br /&gt;
Find section with number of LoadModule lines. Add the following:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;LoadModule wsgi_module modules/mod_wsgi.so&lt;/pre&gt;
&lt;br /&gt;
Find section with AddHandler lines. Add the following:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;AddHandler wsgi-script .wsgi&lt;/pre&gt;
&lt;br /&gt;
(In case that you installed specific version of Python to be used with Mercurial, add something like this as well:&lt;br /&gt;
&lt;pre class="brush: bash"&gt;WSGIPythonHome /usr/lib/python2.7&lt;/pre&gt;
)&lt;br /&gt;
&lt;br /&gt;
Now, scroll all the way to the end, and let's add following VirtualHosts:&lt;br /&gt;
&lt;br /&gt;
First, an empty declaration, to trap requests with unrecognized host name:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;&amp;lt;VirtualHost *:80&amp;gt;
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
Then, add a declaration for our Mercurial server (in my environment, the server's host name is code1.cs-computing.com. However, I also created a DNS Alias hg.cs-computing.com that points to code1.cs-computing.com and which I use to access the Mercurial server):&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;&amp;lt;VirtualHost *:80&amp;gt;
    ServerName hg.cs-computing.com
    ErrorLog /var/log/httpd/hg.cs-computing.com-error_log
    CustomLog /var/log/httpd/hg.cs-computing.com-access_log common
    WSGIScriptAlias / /var/www/vhosts/hg.cs-computing.com/cgi-bin/hgweb.wsgi
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
We need to create directories to hold our Mercurial repositories (repos) and configurations (cgi-bin):&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# cd /var/www/
# mkdir -p vhosts/hg.cs-computing.com/cgi-bin
# mkdir -p vhosts/hg.cs-computing.com/repos&lt;/pre&gt;
&lt;br /&gt;
Copy file &lt;span style="font-family: Courier New, Courier, monospace;"&gt;hgweb.wsgi&lt;/span&gt; from unpacked Mercurial source package to the cgi-bin directory:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# cp /tmp/mercurial-2.0.2/contrib/hgweb.wsgi /var/www/vhosts/hg.cs-computing.com/cgi-bin/&lt;/pre&gt;
&lt;br /&gt;
Open &lt;span style="font-family: Courier New, Courier, monospace;"&gt;hgweb.wsgi&lt;/span&gt; in text editor and edit line starting with config to read:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;config = "/var/www/vhosts/hg.cs-computing.com/cgi-bin/hgweb.config"&lt;/pre&gt;
&lt;br /&gt;
Create new file called &lt;span style="font-family: Courier New, Courier, monospace;"&gt;hgweb.config&lt;/span&gt; in &lt;span style="font-family: Courier New, Courier, monospace;"&gt;/var/www/vhosts/hg.cs-computing.com/cgi-bin&lt;/span&gt;:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# touch vhosts/hg.cs-computing.com/cgi-bin/hgweb.config&lt;/pre&gt;
&lt;br /&gt;
Open this file in text editor and add the following:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;[paths]
/ = /var/www/vhosts/hg.cs-computing.com/repos/**
[web]
allow_push = *
push_ssl = false&lt;/pre&gt;
&lt;br /&gt;
We are nearing the end, hold on! :-)&lt;br /&gt;
&lt;br /&gt;
It' time to create a test repo.&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# cd /var/www/vhosts/hg.cs-computing.com/repos/
# hg init hgtest&lt;/pre&gt;
&lt;br /&gt;
We need to change owner and permissions (since we are running this as root):&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# chgrp -R apache hgtest/
# chmod -R g+rwx hgtest/&lt;/pre&gt;
&lt;br /&gt;
Start the Apache:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# service httpd start
Starting httpd:                                            [  OK  ]&lt;/pre&gt;
&lt;br /&gt;
Open your browser and enter the address that you used for your Mercurial virtual host (hg.cs-computing.com in my case). You should see the Mercurial repos:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-Lvg5nm4SAy8/UOce8n0veQI/AAAAAAAAA4U/O1QhaZjSaJ4/s1600/mercurial_1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-Lvg5nm4SAy8/UOce8n0veQI/AAAAAAAAA4U/O1QhaZjSaJ4/s1600/mercurial_1.gif" height="282" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
So, now you have working Mercurial server. We only need to add some sort of authentication. Let's use Domino LDAP, just like Declan did in his series. There is no special steps required to configure Domino LDAP, it should just work.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Open /etc/httpd/conf/httpd.conf in a text editor and scroll down to the definition of Mercurial virtual host. Add directory specification to the VirtualHost specification, so that it looks like this one:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;&amp;lt;VirtualHost *:80&amp;gt;
    ServerName hg.cs-computing.com
    ErrorLog /var/log/httpd/hg.cs-computing.com-error_log
    CustomLog /var/log/httpd/hg.cs-computing.com-access_log common
    WSGIScriptAlias / /var/www/vhosts/hg.cs-computing.com/cgi-bin/hgweb.wsgi
    &amp;lt;Directory "/var/www/vhosts/hg.cs-computing.com/"&amp;gt;
        AuthType Basic
        AuthBasicProvider ldap
        AuthzLDAPAuthoritative on
        AuthName "Mercurial Server: Login with your Domino credentials"
        AuthLDAPURL "ldap://ldap.cs-computing.com:389/O=Computing?CN"
        Require valid-user
    &amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
Some explanations:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;AuthType Basic&lt;/span&gt; says how to send password. Basic means in clear text, so this is not the most secure environment, but enough for our testing.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;AuthBasicProvider ldap&lt;/span&gt; says Apache to use LDAP for authorization.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;AuthzLDAPAuthoritative on&lt;/span&gt; means that LDAP is only way to authorize with this server. If we had some other mean of authentication (e.g. Apache built-in users), that we could set this to off and the Apache would first try with LDAP and if it fails continue with other options. (BTW, this is default).&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;AuthName "Mercurial Server: Login with your Domino credentials"&lt;/span&gt; - this will be shown on login window.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;AuthLDAPURL "ldap://ldap.cs-computing.com:389/O=Computing?CN&lt;/span&gt;" - URL to your LDAP server. In this case we are looking from the top of the directory tree (O=Computing) and are using common name (CN) to authenticate. The other parameters that Declan has in his example are all defaults, so I didn't use them.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;Require valid-user&lt;/span&gt; - means that any user that successfully authenticates will have access.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Save the file and restart the Apache:&lt;/div&gt;
&lt;div&gt;
&lt;pre class="brush: bash"&gt;# service httpd restart
Stopping httpd:                                               [  OK  ]
Starting httpd:                                               [  OK  ]&lt;/pre&gt;
&lt;br /&gt;
Now try to log in. The Apache should ask for user name and password. Log in as you would in Notes client or iNotes.&lt;br /&gt;
&lt;br /&gt;
And that's all! We now have Mercurial server running on a Red Hat server, with LDAP authentication, waiting for XPages stuff :-) &lt;br /&gt;
&lt;br /&gt;
Let me know if something is not clear or you encounter problems. I'll do my best to help you.
&lt;/div&gt;
&lt;script type="text/javascript"&gt;SyntaxHighlighter.highlight();&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=qIjjgKZDuVA:JTNCMnrf5M4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=qIjjgKZDuVA:JTNCMnrf5M4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=qIjjgKZDuVA:JTNCMnrf5M4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/qIjjgKZDuVA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/8198109190700394227/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2012/01/guide-installing-mercurial-server-on_11.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8198109190700394227?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8198109190700394227?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/qIjjgKZDuVA/guide-installing-mercurial-server-on_11.html" title="Guide: Installing Mercurial server on Red Hat Enterprise Linux" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Lvg5nm4SAy8/UOce8n0veQI/AAAAAAAAA4U/O1QhaZjSaJ4/s72-c/mercurial_1.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2012/01/guide-installing-mercurial-server-on_11.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcDQnszeSp7ImA9WhNUFEw.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-8495443148762962229</id><published>2012-01-04T19:34:00.001+01:00</published><updated>2013-01-05T19:21:13.581+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-05T19:21:13.581+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="requirement management" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="ApplicationIsBorn" /><category scheme="http://www.blogger.com/atom/ns#" term="scrum" /><title>An application is born: Part 4 - Requirement Management</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
It's been quite a while since the last post, but we haven't been sitting with our arms crossed. Far from it - we have actually successfully finished our first sprint! More about that in the next post.&lt;br /&gt;
&lt;br /&gt; The topic of today's post is requirement management. For me, a requirement has been synonymous with a short, unambiguous, comprehensible sentence describing a (sometimes very limited) set of functionality. Each requirement has to be testable, verifiable and traceable both up and down in the requirement hierarchy. In large projects, the requirements are collected in dozens of requirement specifications documents - for hardware, for software, for interfaces and all of that repeated on various abstraction levels. It is not unusual that there are hundreds or thousands of requirements describing a single product. System analysts then browse through all these documents (or a requirement management application if they are lucky to have one), trying to make sure that requirements really describe system that customer ordered, that there are no conflicting requirements, that test cases have been assigned to all requirements. A very difficult and demanding task and the one that often has direct influence on project's outcome.&lt;br /&gt;&lt;br /&gt; Enter the world of agile software development. And forget most of what you know about requirement management. In most of the agile development, requirements take on a different form. Requirements are longer and often describe large sets of functionality. In fact, they are not even called requirements but user stories. User stories describe what customer wants and do so in terms that customer understands. It is the customer that writes the stories and it is the customer that writes how to test the stories. User stories are written in everyday language and are hence more prone to ambiguity and vague formulations. How can they then replace "traditional" requirements?&lt;br /&gt;&lt;br /&gt; The answer is simple and lies at the core of the whole agile development process - communication, communication, communication. The user stories are not meant to be truth carved in stone (which is often the case with traditional requirements and changing them requires starting a massive change management process). Instead they are meant to provide a topic of discussion between the customer and the developers. During the course of this discussion, the customer's needs become more evident, more precise and easier to transform into the language that developers understand.&lt;br /&gt;&lt;br /&gt; This discussion occurs immediately before the functions described by the stories are implemented. In the case of Scrum, the discussion happens in what is called Sprint Planning meeting, usually once a month. During this meeting, the team of developers, together with the customer representative choose what stories to implement based on the customer's business priorities. The functions described in these stories are then discussed over and over again, until there is a mutual agreement and understanding about what the story represents. The details that emerge during the discussion are sometimes converted into new stories, but more often they are simply remembered by all involved. Scrum is not about documenting what is clearly evident and understood. After all, the stories are to be implemented, tested and demonstrated in one month (or less) and everybody should be able to remember what was said for such short period.&lt;br /&gt;&lt;br /&gt; When we do first requirement analysis and user story gathering, we use paper note cards that we fill-in by hand (template attached). The user story gathering is most often done by the customer representative (Product Owner in Scrum terms) and the team leader (Scrum Master). On the front side, they fill descriptive title, description and importance. On the back side, they fill how the story is tested. One example is given below:&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-WBCs5i7DIZw/UOho337bvuI/AAAAAAAAA4k/p-sezvI9l9U/s1600/us_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-WBCs5i7DIZw/UOho337bvuI/AAAAAAAAA4k/p-sezvI9l9U/s1600/us_1.jpg" height="230" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-Q82Oq-t3vIE/UOho3450ANI/AAAAAAAAA4o/aZqo8rUsnME/s1600/us_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Q82Oq-t3vIE/UOho3450ANI/AAAAAAAAA4o/aZqo8rUsnME/s1600/us_2.jpg" height="228" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
As you can see, we are trying to use the "As a _____, I want to ______, because ______." form as much as possible, because we found out that it helped us to write good stories. Notice that this card has additional fields, such as ID, Link to and Story points, but at the time of initial story gathering, they are rarely used.&lt;br /&gt;&lt;br /&gt; After the user stories are identified and gathered, the Scrum Master will transfer them into electronic form. We use simple spreadsheet for this. This spreadsheet is essentially Product Backlog that describes everything that is going to be developed. Once in the spreadsheet, the stories continue to live. They are constantly read, discussed and rewritten. The product owner moves them up and down, thus indicating their importance. When the time comes for Sprint Planning meeting, we print the stories directly from the spreadsheet and use them for further discussion and estimation.&lt;br /&gt;&lt;br /&gt; And, based on what we saw in our first sprint, this technique works very well. During our sprint planning meeting we focused only on top priority stories. We estimated how many stories we could finish and made sure that we understood what the customer wants, but also that customer understood what she would get.&lt;br /&gt;&lt;br /&gt; If you want to learn more about user stories, I can warmly recommend &lt;a href="http://www.amazon.com/User-Stories-Applied-Software-Development/dp/0321205685/ref=sr_1_1?ie=UTF8&amp;amp;qid=1325688187&amp;amp;sr=8-1"&gt;User Stories Applied by Mike Cohn&lt;/a&gt;. Another great resource that covers practical implementation of Scrum is &lt;a href="http://www.amazon.com/Scrum-Trenches-Enterprise-Software-Development/dp/1430322640/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1325688223&amp;amp;sr=1-1"&gt;Scrum and XP from the Trenches by Henrik Kniberg&lt;/a&gt;. Lastly, you can &lt;a href="http://blog.crisp.se/2007/12/18/henrikkniberg/1197973740000"&gt;download Excel, OpenOffice and Google Docs versions&lt;/a&gt; of the product backlog template from Henrik Kniberg's blog.&lt;br /&gt;&lt;br /&gt; Coming next: Our first sprint.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href="https://docs.google.com/open?id=0B27ROWkv1Lg9c1k5Wnp2YmNsZDg" rel="nofollow" target="_blank"&gt;User Story Template (odt)&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href="https://docs.google.com/open?id=0B27ROWkv1Lg9THV1SWJvY0tPVVE" rel="nofollow" target="_blank"&gt;User Story Template (pdf)&lt;/a&gt;&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=wKmomVfPBJw:OAJjsG1jpGI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=wKmomVfPBJw:OAJjsG1jpGI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=wKmomVfPBJw:OAJjsG1jpGI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/wKmomVfPBJw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/8495443148762962229/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2012/01/an-application-is-born-part-4_4.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8495443148762962229?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8495443148762962229?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/wKmomVfPBJw/an-application-is-born-part-4_4.html" title="An application is born: Part 4 - Requirement Management" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-WBCs5i7DIZw/UOho337bvuI/AAAAAAAAA4k/p-sezvI9l9U/s72-c/us_1.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2012/01/an-application-is-born-part-4_4.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQCRX09eCp7ImA9WhNUFEw.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-9104576405991892639</id><published>2011-11-07T13:30:00.001+01:00</published><updated>2013-01-05T19:26:04.360+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-05T19:26:04.360+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="ApplicationIsBorn" /><category scheme="http://www.blogger.com/atom/ns#" term="scrum" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>An application is born: Part 3 - Tools</title><content type="html">Let's see what tools we need for developing our application.&lt;br /&gt;
&lt;h3&gt;
Development environment&lt;/h3&gt;
First, let's take a quick look at how our development environment looked until recently. We were mainly developing for the Notes client, so 99.99% of the development work was done in the Domino Designer. &lt;br /&gt;
&lt;br /&gt;
On the lifecycle management front, we were using &lt;a href="http://www.teamstudio.com/Develop/developCIAO/tabid/120/Default.aspx"&gt;Teamstudio CIAO!&lt;/a&gt;  for source control and our own, in-house developed, applications for bug tracking and release management. These applications were nicely integrated with CIAO! and the whole environment worked well. We had one development server where development and testing was done and we deployed finished application templates from this server to our production servers. &lt;br /&gt;
&lt;br /&gt;
As I said before, application development is not our core business and in these financially difficult times we were - unfortunately - forced to abandon CIAO!. It was time to re-think our development environment. And the timing was right - IBM announced support for source control starting in the Domino Designer 8.5.2 (which improved in 8.5.3) and the slow but seemingly inevitable switch to XPages and Java made it easier to use well established source control systems such as CVS, Mercurial and Git (to name but a few).&lt;br /&gt;
&lt;br /&gt;
So, we had to choose what source / version control tool to use instead of CIAO! We evaluated these: &lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://subversion.apache.org/"&gt;SVN&lt;/a&gt;, a representative of "classic" check-out / check-in tools.  In my previous job, we used Continuus (which had been acquired by Telelogic, which was then acquired by IBM and incorporated in the IBM Rational family), not very friendly tool to use and difficult to manage. I must admit that SVN is light years from Continuus, the server is extremely easy to set-up (use &lt;a href="http://www.ubersvn.com/"&gt;uberSVN&lt;/a&gt; and it is as close to one-click setup as you'll ever get) and the integration with Domino Designer client is great (&lt;a href="http://heidloff.net/home.nsf/dx/09192011040807AMNHEBK6.htm"&gt;as demonstrated by Niklas Heidloff&lt;/a&gt;);&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt;, a representative of the new kind of distributed version control tools. For someone coming from the rigid world of check-out / check-in tools, it took me some time to bend my mind around it ("There is no spoon."), but once that was done the rest was easy. The Mercurial server is not as easy to install and configure as SVN, but is not an impossible task. If you need help, Declan Lynch has &lt;a href="http://www.qtzar.com/blogs/qtzar.nsf/byTag.xsp?tag=Mercurial"&gt;a tutorial for Ubuntu&lt;/a&gt; and if you need help with setting up Mercurial on Red Hat / CentOS, let me know and I'll help you.&lt;br /&gt;Unfortunately, I couldn't make &lt;a href="http://code.google.com/a/eclipselabs.org/p/mercurialeclipse/"&gt;MercurialEclipse&lt;/a&gt; plug-in (client connector) to work in Domino Designer. The latest version of the plug-in won't even show up in the Designer. The older version do show up and can be configured, but as soon as one tries to use it, the connector fails. I tried all possible combinations with no success.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jazz.net/projects/rational-team-concert/"&gt;IBM Rational Team Concert&lt;/a&gt; (RTC) is a massive tool used for managing complete development (planning, following, tracking, automatic software builds, source control) and represents only one third of the complete suite for Collaborative Lifecycle Management (there are also requirement management and testing / verification modules). We spent the least time with this one. The source control tool is somewhere between SVN and Mercurial, but we couldn't understand it quite well in the little time we had. We also failed completely trying to install the RTC Eclipse plug-in in Domino Designer. It seems that the gap between Eclipse and Domino Designer is too big for plug-in installation. You might still want to check this tool, however, as it offers very much functionality and it comes free for up to 10 developers.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
We felt that IBM RTC was too big and cumbersome for us. It would take substantial amount of time and energy for us to master it and then to keep it updated during the development so that we can realize its full benefits. We needed something simpler.&lt;br /&gt;
&lt;br /&gt;
So, what would it be? SVN or Mercurial? Mercurial won. There is no specific reason, as we haven't used any of them long enough to be able to judge them fairly.  At the end, there was such a trivial thing as a great tutorial to tip the scales in Mercurial's favor. Here's the tutorial (one of the best I've ever read); I warmly recommend it to anyone interested in Mercurial or facing the same decisions as we did: &lt;a href="http://hginit.com/index.html"&gt;Hg Init&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
But, what about the (non-existing) connectors? Well, we decided to use &lt;a href="http://tortoisehg.bitbucket.org/"&gt;TortoiseHg&lt;/a&gt; desktop connectors. The difference between using TortoiseHg and MercurialEclipse is not that big, anyway. In Eclipse, If you use MercurialEclipse and want to work with Mercurial repositories, then you need to switch to a special Team Synchronization perspective. When I want to work with Mercurial repositories in the Domino Designer I simply start TortoiseHg Workbench. Either way, you only need one mouse click to switch your work context completely, from coding to synchronizing.&lt;br /&gt;
TortoiseHg is fast, stable and can do everything that MercurialEclipse can do. We configured the Domino Designer to automatically keep the on-disk project in sync with the nsf. That way we have one step less to perform. And because of the way Mercurial works, one doesn't need to worry that untested changes would break the build, as one always commit to local repository first.. If there is any interest, I could write a more detailed description of our Domino Designer / Mercurial setup.&lt;br /&gt;
&lt;br /&gt;
We are keeping the rest of the lifecycle management infrastructure as-is. We won't have the same tight integration as before, but we'll manage.&lt;br /&gt;
&lt;br /&gt;
One of the most important requirements that customer has for the future application is that it must be very user friendly and very fast and efficient to use. Which means that it will be a lot of changes and refinements of the application GUI. With that in mind we decided to invest in a GUI sketching tool and we opted for &lt;a href="http://balsamiq.com/"&gt;Balsamiq Mockups&lt;/a&gt;. Fast, easy and fun to use, it already proved its worth.&lt;br /&gt;
&lt;br /&gt;
Before I wrap-up this section on our development environment, let me shortly address the Domino Designer. We are going to perform the major part of coding and developing using the Domino Designer. But, in case that we choose XPages path (No, we still haven't decided - there is some chance, albeit slim, that we shall choose traditional development for the Notes client) we are thinking about doing as much as possible of Java coding and development in the Eclipse client and then using finished libraries in the Designer. That way we can take advantage of all the benefits that the Eclipse offers for development, testing and deployment. Has anybody done anything similar? Any thoughts?&lt;br /&gt;
&lt;h3&gt;
Documentation&lt;/h3&gt;
This one is easy - Google Docs. Google Docs make it very easy for us to collaborate and share documents with our customer. They also provide implicit version control and track authors and changes. What more could one ask for?&lt;br /&gt;
&lt;br /&gt;
In those cases when we need more robust editors or explicit version control, we are going to use IBM Lotus Symphony and Quickr repositories.&lt;br /&gt;
&lt;h3&gt;
Project Management&lt;/h3&gt;
We are using Scrum as project management framework, so we need some tools for planning, following and managing. We have evaluated a couple of them.&lt;br /&gt;
&lt;br /&gt;
One of the is the already mentioned IBM Rational Team Concert. The RTC provides support for creating release and sprint plans,  product and sprint backlogs, progress charts, user stories and epics, impediments and some other useful artifacts. But, these functions come at the cost - the overhead of learning, setting up and managing the tool is rather large. Scrum is all about transparency, simplicity and manageability - and dividing work in small enough chunks so that no special tools and extensive documentation are needed to manage it. In that respect, having to learn a complicated tool to manage it felt a bit wrong. Furthermore, despite all of the features, the tool felt too rigid at times, not allowing us to do things the way that we wanted.&lt;br /&gt;
&lt;br /&gt;
Another tool that we evaluated was the &lt;a href="http://www.rallydev.com/agile_products/editions/community/"&gt;Rally Community Edition&lt;/a&gt;. This is a web-based tool and it is easier to use and faster to get-going than the RTC, while providing the same (Scrum) functions and features. And like the RTC it is free for up to 10 developers, but it is limited to a single project (no such restriction for the RTC).&lt;br /&gt;
And, even though the Rally was easier to use that the RTC, it still felt awkward to have to go through the click-here-fill-text-click-there routine for every little thing.&lt;br /&gt;
&lt;br /&gt;
So, after reading a bit more and looking at some other tools, we decided that we actually don't need any special tool to support Scrum - we need a spreadsheet on Google Docs for our product backlog and whiteboard to keep track of sprint backlog and related tasks. It is as simple as that.&lt;br /&gt;
&lt;br /&gt;
And that brings us to the end of this part. To sum it up, these are the tools that we are going to use: Domino Designer for coding (maybe with some help from Eclipse), Mercurial and TortoiseHg for source version control, Balsamiq for GUI mockups, our own applications for bug tracking and release management, Google Docs for documentation, sharing and collaboration, and once again Google Docs for Scrum planning and managing.&lt;br /&gt;
&lt;br /&gt;
Coming next: Requirement management the Scrum way.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=M88a0ypQ_Jk:bbuhTMXl1sM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=M88a0ypQ_Jk:bbuhTMXl1sM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=M88a0ypQ_Jk:bbuhTMXl1sM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/M88a0ypQ_Jk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/9104576405991892639/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2011/11/an-application-is-born-part-3-tools_7.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/9104576405991892639?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/9104576405991892639?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/M88a0ypQ_Jk/an-application-is-born-part-3-tools_7.html" title="An application is born: Part 3 - Tools" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.squareone.ba/2011/11/an-application-is-born-part-3-tools_7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMERHs8fSp7ImA9WhNUFEw.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-6116455125683796307</id><published>2011-10-19T00:17:00.001+02:00</published><updated>2013-01-05T19:26:45.575+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-05T19:26:45.575+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="ApplicationIsBorn" /><category scheme="http://www.blogger.com/atom/ns#" term="scrum" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>An application is born: Part 2 - Methodology</title><content type="html">Why do we need methodology? The aim of methodology is to provide us with means - methods, processes, procedures and tools - to accomplish a goal. If we talk about software development, then the goal is to deliver applications that fulfil customers' requirements, on time and within budget. And to do that consistently, release after release, application after application.&lt;br /&gt; Now, the problem with software development is that it is such a fluid and vaguely defined problem space. There are so many unknowns, so many changes that keep popping up throughout the development cycle that we can never truly grasp and fully understand either the problem or the possible solutions. The software development is, in many ways, what &lt;a href="http://en.wikipedia.org/wiki/Herbert_Simon"&gt;Herbert Simon&lt;/a&gt; would call an ill structured problem. Just think about it - we have ever changing and sometimes conflicting customer requirements, we have technology that improves at the pace that is impossible to keep up with, we have human factor to deal with. All of this means that it is more than necessary to introduce some kind of method in the process of software development.&lt;br /&gt;&lt;br /&gt;As I already said, my background is in defence industry. Defence industry is traditionally very conservative when it comes to product development. We used the &lt;a href="http://en.wikipedia.org/wiki/V-Model_%28software_development%29"&gt;V-model&lt;/a&gt; of development, which is a variant of the &lt;a href="http://en.wikipedia.org/wiki/Waterfall_model"&gt;waterfall model&lt;/a&gt;. In this model, every development activity (analysis, design, testing) is clearly separated and done in sequence. The progress of every activity is reviewed at predefined milestones (such as Preliminary Design Review or Critical Design Review) and the result is documented in lengthy written reports. Then, the next-in-chain team takes over.&lt;br /&gt;&lt;br /&gt;This methodology is suited for big projects where very strict and formal project management is required. Clearly, majority of software projects do not fall in this category. That is why we saw a number of methodologies introduced in the late 1990s, with the single goal of making software development easier and more successful. Some of these methodologies can be put in the Agile category and they share &lt;a href="http://agilemanifesto.org/principles.html"&gt;the twelve principles of Agile software&lt;/a&gt;  as their foundation.&lt;br /&gt;&lt;br /&gt;One of these methodologies is &lt;a href="http://www.scrum.org/"&gt;Scrum&lt;/a&gt; and we are going to use it to guide us in developing our application. Why Scrum? To give a short answer - because it best fills our needs. This is the methodology that we can best implement, having in mind our very limited resources - and I am aware that we still won't be able to realize all of the benefits. For that we would require a larger (around 7 persons), cross-functional team with analysts, GUI specialists, programmers, testers.&lt;br /&gt;&lt;br /&gt;The Scrum is also diametrically opposite to the traditional methodologies, such as the V-model that I used before. Gone are the traditional requirements, design documents are deprecated, everything is done with as little documentation as possible and we - the developers - are supposed to manage ourselves. If you are interested in Scrum, I encourage you to read &lt;a href="http://www.scrum.org/scrumguides/"&gt;the Scrum Guide&lt;/a&gt;. It is a short (17 pages) document that is essentially a complete definition of Scrum. The Scrum Guide says that Scrum is simple to understand, but extremely difficult to master.&lt;br /&gt;&lt;br /&gt;I also want to clarify one thing - neither Scrum nor the V-model are methodologies in the true meaning of the word. Neither prescribes tools or procedures for solving problems at hand. Instead, they should be more correctly described as frameworks. It is up to each and every team / project to decide how to solve, organize and manage everyday activities. For example, we used MIL-STD-490A and MIL-STD-498 to flesh out the V-model. In the following posts I will write more about our implementation of Scrum and the progress we make.&lt;br /&gt;&lt;br /&gt;Coming next: Tools.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=Pf4nl2da65A:pvz6E7tkYfg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=Pf4nl2da65A:pvz6E7tkYfg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=Pf4nl2da65A:pvz6E7tkYfg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/Pf4nl2da65A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/6116455125683796307/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2011/10/an-application-is-born-part-2_19.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/6116455125683796307?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/6116455125683796307?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/Pf4nl2da65A/an-application-is-born-part-2_19.html" title="An application is born: Part 2 - Methodology" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2011/10/an-application-is-born-part-2_19.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkENQng9fSp7ImA9WhNUFEw.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-2946692121136464492</id><published>2011-10-07T09:29:00.001+02:00</published><updated>2013-01-05T19:31:33.665+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-05T19:31:33.665+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symphony" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="LotusScript" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>LotusScript Symphony API broken in 8.5.3?</title><content type="html">It seems that LotusScript Symphony API is broken in Notes 8.5.3. Our applications that use it (and that have worked fine ever since the API was introduced) stopped working and are popping out the error message that the USE or USELX module *symphonycfglsx cannot be loaded:&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-NizZRENakzs/UOhxK0NESXI/AAAAAAAAA48/xlhR1fZYD7I/s1600/ls_sym_api_1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-NizZRENakzs/UOhxK0NESXI/AAAAAAAAA48/xlhR1fZYD7I/s1600/ls_sym_api_1.gif" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-MP3VprwgQdc/UOhxK_98XKI/AAAAAAAAA5A/qr0-iT9TRnc/s1600/ls_sym_api_2.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-MP3VprwgQdc/UOhxK_98XKI/AAAAAAAAA5A/qr0-iT9TRnc/s1600/ls_sym_api_2.gif" /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp;Those applications that use the UNO API work as they should. I've seen that some others have reported this issue as well. Anybody else seeing this?&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;And, does anybody know which version of Symphony is in the 8.5.3? It would seem that it is 3.0.0:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-b7zujs6CcjE/UOhxK0sa2kI/AAAAAAAAA5E/gMYSea3aDXo/s1600/ls_sym_api_3.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-b7zujs6CcjE/UOhxK0sa2kI/AAAAAAAAA5E/gMYSea3aDXo/s1600/ls_sym_api_3.gif" height="113" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
I tried installing Symphony FP3 yesterday, but it fails saying that it cannot find compatible version and points out that current version is 8.5.3. I think that the FP3 fix pack installer (for Windows anyway) only works with Notes 8.5.2. Maybe it is possible to manually update the installation, but I haven't tried that.&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=a13iddfEmCo:tHyzdSdhiZ8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=a13iddfEmCo:tHyzdSdhiZ8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=a13iddfEmCo:tHyzdSdhiZ8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/a13iddfEmCo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/2946692121136464492/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2011/10/lotusscript-symphony-api-broken-in-853_7.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/2946692121136464492?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/2946692121136464492?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/a13iddfEmCo/lotusscript-symphony-api-broken-in-853_7.html" title="LotusScript Symphony API broken in 8.5.3?" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-NizZRENakzs/UOhxK0NESXI/AAAAAAAAA48/xlhR1fZYD7I/s72-c/ls_sym_api_1.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2011/10/lotusscript-symphony-api-broken-in-853_7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQEQ3c4eip7ImA9WhNUFEw.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-8604505668002851723</id><published>2011-10-04T12:21:00.001+02:00</published><updated>2013-01-05T20:31:42.932+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-05T20:31:42.932+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symphony" /><category scheme="http://www.blogger.com/atom/ns#" term="ibm" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>Solved: Symphony 3.0 installer for Lotus Notes (Domino CollaborationExpress)</title><content type="html">Almost a year ago, &lt;a href="http://lsoy.posterous.com/symphony-30-installer-for-lotus-notes-licensi"&gt;I wrote&lt;/a&gt; that Domino Collaboration Express users were not able to download Symphony installers from the Passport Advantage site.&lt;br /&gt;&lt;br /&gt;It turned out to be a problem with licensing, and IBM promised to fix it by the time 8.5.3 ships. Well, today is that day and I am happy to say that IBM kept the promise: installers for both stand-alone and embedded versions of Symphony are now available for download for Domino Collaboration (and I believe Messaging as well) Express users.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=ThOGoj2TQrI:eYmz_KDs1uY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=ThOGoj2TQrI:eYmz_KDs1uY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=ThOGoj2TQrI:eYmz_KDs1uY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/ThOGoj2TQrI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/8604505668002851723/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2011/10/solved-symphony-30-installer-for-lotus_4.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8604505668002851723?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8604505668002851723?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/ThOGoj2TQrI/solved-symphony-30-installer-for-lotus_4.html" title="Solved: Symphony 3.0 installer for Lotus Notes (Domino CollaborationExpress)" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2011/10/solved-symphony-30-installer-for-lotus_4.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQCQX4zeyp7ImA9WhNUFEw.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-7691370293809827069</id><published>2011-10-03T10:56:00.001+02:00</published><updated>2013-01-05T20:32:40.083+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-05T20:32:40.083+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="ApplicationIsBorn" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>An application is born: Part 1 - Background</title><content type="html">So, we are going to&lt;a href="http://lsoy.posterous.com/an-application-is-born-prologue"&gt; build an application&lt;/a&gt;. Exciting!&lt;br /&gt; First, let me provide you with some background information. It will help you to better understand the challenges we are facing and decisions that we make.&lt;br /&gt;&lt;h3&gt;
The customer&lt;/h3&gt;
The customer is a crossover between a fitness and a wellness centre. We have had a good professional relations with them for a number of years. They are demanding, but they understand that IT has its own rules and are willing to learn and listen to somebody who knows more about it. They know about our experience (i.e. the lack of it) but they are confident that we'll be able to build their application. With that in mind, we agreed upon a very generous time plan that should allow us to breath freely, but which also guarantees that they will have an application before Hell freezes over.&lt;br /&gt;&lt;h3&gt;
The application&lt;/h3&gt;
The application is a client tracking application. Something like a CRM, but heavily customized according to their needs. It should contain a list of their clients with general data, but also some specific items, like height, weight and calory intake. For every client a complete history of contracts, payments, treatments, exercises, measurements is to be kept with possibility to do various reports and analyses. The customer already has an application for this purpose, but it is not being used as it is not user friendly and flexible enough. So, they currently use pre-printed forms that are filled-in by hand. A very fast and convenient way, but they are starting to have problems with physical archiving of all the paper. Also, finding information from some time ago is often an impossible task.&lt;br /&gt; The most important requirement that the customer has is that the new application must be simple and fast to use. To enter information in the application should be as fast and simple as writing it on the paper, or as close to it as possible.&lt;br /&gt;&lt;h3&gt;
The development team&lt;/h3&gt;
Well, there is no development team. As I already wrote, application development is not our core business. It is only one colleague and I that are going to work part-time on the application. So maybe (and just maybe), I could count that there will be equivalent of one full-time developer working on the application. And that's not much. That means that we can't do much in a given period of time. But what worries me more is that we may not have enough knowledge and experience between ourselves to pull this through. I will try to mitigate this risk through (creative) requirements management and methodology support. Another risk looking farther down the road is application support. I am afraid that once we "finish" (I am aware that there is no such thing as finished application) the application, the management is going to move us to other duties, with no one left to support the application. That is something that I will have to deal with and try to persuade the management that we can make money on application development. &lt;br /&gt;&lt;br /&gt;And that was the general background. Coming next: Methodology.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=VQHogbM9fuA:vvR6ajltsps:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=VQHogbM9fuA:vvR6ajltsps:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=VQHogbM9fuA:vvR6ajltsps:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/VQHogbM9fuA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/7691370293809827069/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2011/10/an-application-is-born-part-1-background_3.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/7691370293809827069?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/7691370293809827069?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/VQHogbM9fuA/an-application-is-born-part-1-background_3.html" title="An application is born: Part 1 - Background" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.squareone.ba/2011/10/an-application-is-born-part-1-background_3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMFRXgzcSp7ImA9WhNUFEw.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-5109389787021706615</id><published>2011-10-01T10:05:00.001+02:00</published><updated>2013-01-05T20:33:34.689+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-05T20:33:34.689+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="ApplicationIsBorn" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>An application is born: Prologue</title><content type="html">I am not an application developer. And I am not an administrator. I am electronics engineer who by chance ended up with an IBM Business Partner and learned to know Lotus Notes / Domino. And I liked it - stable, reliable, easy to upgrade from administrative point of view. And easy to use as a development platform. Security, deployment, all those difficult to master things were taken care of by the platform. I still remember my first programming experiences with Domino Document Manager. And the joy when I successfully connected a sales tracking application developed in Lotus Workflow  with document libraries in the Domino Document Manager.&lt;div&gt;
&lt;br /&gt;Lot of time has passed since, and I have become a better developer. I made several business applications that we use in our company. One of those applications is even used by external customers in their own business environment. But, application development is not our core business and development of those applications was ad-hoc, without elaborate development process. No analysis, no design, no testing or documentation. Don't get me wrong: I've done all those things, but in a limited, unstructured and inconsistent way.&lt;br /&gt; And since my background is electronics system development in defence industry, that kind of disorder was not to my liking. Back then, every step, every move, every thought that we made was according to some rule, standard, methodology or procedure. And everything was meticulously documented.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;So, I have always wanted to implement a proper application development ecosystem for Lotus Notes/Domino in our company. And to develop applications using it. Lately, things have started to move in that direction. We were approached by a client who wanted a specific business application. We accepted the job and we understand that we must do it properly if we are to succeed.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;In a series of articles to follow this one, I will be writing about the upcoming application and our efforts to develop it properly and "by the book". Whatever that book might be :-)&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=TvLMEyxhY28:8iI8Ye9mvE8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=TvLMEyxhY28:8iI8Ye9mvE8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=TvLMEyxhY28:8iI8Ye9mvE8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/TvLMEyxhY28" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/5109389787021706615/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2011/10/an-application-is-born-prologue_1.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/5109389787021706615?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/5109389787021706615?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/TvLMEyxhY28/an-application-is-born-prologue_1.html" title="An application is born: Prologue" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2011/10/an-application-is-born-prologue_1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMBSHw4cSp7ImA9WhNUFEw.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-1649508725579651714</id><published>2011-08-15T15:44:00.001+02:00</published><updated>2013-01-05T20:34:19.239+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-05T20:34:19.239+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="administration" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>Resolved: iNotes problems with Domino 8.5.2 FP3</title><content type="html">This has been around for a week or so, but since I wrote about the problem, then it is only fair to write about the solution as well.&lt;div&gt;
&lt;br /&gt;So, if you experience problems with iNotes after upgrading to 8.5.2 FP3, head over to IBM support site, download and install the fix:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;a href="https://www-304.ibm.com/support/docview.wss?uid=swg21508250"&gt;https://www-304.ibm.com/support/docview.wss?uid=swg21508250&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;We've done that and it works fine for us.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=C9jQDgbaAAg:B46W5uDrq8k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=C9jQDgbaAAg:B46W5uDrq8k:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=C9jQDgbaAAg:B46W5uDrq8k:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/C9jQDgbaAAg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/1649508725579651714/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2011/08/resolved-inotes-problems-with-domino_15.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/1649508725579651714?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/1649508725579651714?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/C9jQDgbaAAg/resolved-inotes-problems-with-domino_15.html" title="Resolved: iNotes problems with Domino 8.5.2 FP3" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.squareone.ba/2011/08/resolved-inotes-problems-with-domino_15.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIMQXk6eyp7ImA9WhNUFEw.&quot;"><id>tag:blogger.com,1999:blog-8886165919970940400.post-8803785927681187713</id><published>2011-07-25T09:01:00.001+02:00</published><updated>2013-01-05T20:36:20.713+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-05T20:36:20.713+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OffTopic" /><title>Best place for coding XPages?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-svIoyBFof9A/UOiAk_fnQqI/AAAAAAAAA5c/y1QpBqNfVNw/s1600/podvrske.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-svIoyBFof9A/UOiAk_fnQqI/AAAAAAAAA5c/y1QpBqNfVNw/s1600/podvrske.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Well, this is definitely my favorite so far: Podvrške beach, island of Murter, Crotia.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=j6o3X4Vop78:Z9IEdUR3qD8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lsoy?a=j6o3X4Vop78:Z9IEdUR3qD8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lsoy?i=j6o3X4Vop78:Z9IEdUR3qD8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lsoy/~4/j6o3X4Vop78" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.squareone.ba/feeds/8803785927681187713/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.squareone.ba/2011/07/best-place-for-coding-xpages_25.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8803785927681187713?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8886165919970940400/posts/default/8803785927681187713?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lsoy/~3/j6o3X4Vop78/best-place-for-coding-xpages_25.html" title="Best place for coding XPages?" /><author><name>Saša Brkić</name><uri>https://plus.google.com/109784420538304616695</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-DWAm9NbFEm4/AAAAAAAAAAI/AAAAAAAAA78/ZIYbeeaARk0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-svIoyBFof9A/UOiAk_fnQqI/AAAAAAAAA5c/y1QpBqNfVNw/s72-c/podvrske.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.squareone.ba/2011/07/best-place-for-coding-xpages_25.html</feedburner:origLink></entry></feed>
