Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://blog.magerman.com/feed/

  1. <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
  2. xmlns:content="http://purl.org/rss/1.0/modules/content/"
  3. xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  4. xmlns:dc="http://purl.org/dc/elements/1.1/"
  5. xmlns:atom="http://www.w3.org/2005/Atom"
  6. xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  7. xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  8. xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
  9. >
  10.  
  11. <channel>
  12. <title>Andrew Magerman&#039;s Blog</title>
  13. <atom:link href="https://blog.magerman.com/feed/" rel="self" type="application/rss+xml" />
  14. <link>https://blog.magerman.com</link>
  15. <description>a technical blog for stuff I won&#039;t remember later</description>
  16. <lastBuildDate>Wed, 10 May 2017 09:06:05 +0000</lastBuildDate>
  17. <language>en</language>
  18. <sy:updatePeriod>hourly</sy:updatePeriod>
  19. <sy:updateFrequency>1</sy:updateFrequency>
  20. <generator>http://wordpress.com/</generator>
  21. <cloud domain='blog.magerman.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
  22. <image>
  23. <url>https://secure.gravatar.com/blavatar/b0a6bfcb37dace2d924870813d54c79f?s=96&#038;d=https%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
  24. <title>Andrew Magerman&#039;s Blog</title>
  25. <link>https://blog.magerman.com</link>
  26. </image>
  27. <atom:link rel="search" type="application/opensearchdescription+xml" href="https://blog.magerman.com/osd.xml" title="Andrew Magerman&#039;s Blog" />
  28. <atom:link rel='hub' href='https://blog.magerman.com/?pushpress=hub'/>
  29. <item>
  30. <title>IBM Champion!</title>
  31. <link>https://blog.magerman.com/2016/12/15/ibm-champion/</link>
  32. <comments>https://blog.magerman.com/2016/12/15/ibm-champion/#respond</comments>
  33. <pubDate>Thu, 15 Dec 2016 12:21:17 +0000</pubDate>
  34. <dc:creator><![CDATA[andrewmagerman]]></dc:creator>
  35. <category><![CDATA[IBM Champion]]></category>
  36.  
  37. <guid isPermaLink="false">http://blog.magerman.com/?p=406</guid>
  38. <description><![CDATA[IBM announced the nominations for IBM Champions 2017 and I&#8217;m very happy to say that I was nominated. It&#8217;s wonderful to have this sort of recognition and suddenly being part of a group who have made huge contributions to the IBM ICS Community of the years is humbling. I strongly suspect that my nomination is [&#8230;]<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=406&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
  39. <content:encoded><![CDATA[<p>IBM announced the nominations for IBM Champions 2017 and I&#8217;m very happy to say that I was nominated.</p>
  40. <p>It&#8217;s wonderful to have this sort of recognition and suddenly being part of a group who have made huge contributions to the IBM ICS Community of the years is humbling.</p>
  41. <p>I strongly suspect that my nomination is linked to my co-organising the Swiss Notes User Group, so I&#8217;d like to mention at this point my co-conspirators, without whose work SNoUG wouldn&#8217;t happen:</p>
  42.  
  43. <a href='https://blog.magerman.com/diana_leuenberger/'><img width="150" height="150" src="https://andrewmagerman.files.wordpress.com/2016/12/diana_leuenberger.jpg?w=150&#038;h=150" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://andrewmagerman.files.wordpress.com/2016/12/diana_leuenberger.jpg?w=150&#038;h=150 150w, https://andrewmagerman.files.wordpress.com/2016/12/diana_leuenberger.jpg 200w" sizes="(max-width: 150px) 100vw, 150px" data-attachment-id="405" data-permalink="https://blog.magerman.com/diana_leuenberger/" data-orig-file="https://andrewmagerman.files.wordpress.com/2016/12/diana_leuenberger.jpg" data-orig-size="200,200" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="diana_leuenberger" data-image-description="" data-medium-file="https://andrewmagerman.files.wordpress.com/2016/12/diana_leuenberger.jpg?w=200" data-large-file="https://andrewmagerman.files.wordpress.com/2016/12/diana_leuenberger.jpg?w=200" /></a>
  44. <a href='https://blog.magerman.com/susanne_schugg/'><img width="113" height="150" src="https://andrewmagerman.files.wordpress.com/2016/12/susanne_schugg.jpeg?w=113&#038;h=150" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://andrewmagerman.files.wordpress.com/2016/12/susanne_schugg.jpeg?w=113&#038;h=150 113w, https://andrewmagerman.files.wordpress.com/2016/12/susanne_schugg.jpeg 176w" sizes="(max-width: 113px) 100vw, 113px" data-attachment-id="404" data-permalink="https://blog.magerman.com/susanne_schugg/" data-orig-file="https://andrewmagerman.files.wordpress.com/2016/12/susanne_schugg.jpeg" data-orig-size="176,233" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="susanne_schugg" data-image-description="" data-medium-file="https://andrewmagerman.files.wordpress.com/2016/12/susanne_schugg.jpeg?w=176" data-large-file="https://andrewmagerman.files.wordpress.com/2016/12/susanne_schugg.jpeg?w=176" /></a>
  45. <a href='https://blog.magerman.com/helmut_sproll/'><img width="135" height="150" src="https://andrewmagerman.files.wordpress.com/2016/12/helmut_sproll.jpeg?w=135&#038;h=150" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://andrewmagerman.files.wordpress.com/2016/12/helmut_sproll.jpeg?w=135&#038;h=150 135w, https://andrewmagerman.files.wordpress.com/2016/12/helmut_sproll.jpeg 213w" sizes="(max-width: 135px) 100vw, 135px" data-attachment-id="403" data-permalink="https://blog.magerman.com/helmut_sproll/" data-orig-file="https://andrewmagerman.files.wordpress.com/2016/12/helmut_sproll.jpeg" data-orig-size="213,236" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="helmut_sproll" data-image-description="" data-medium-file="https://andrewmagerman.files.wordpress.com/2016/12/helmut_sproll.jpeg?w=213" data-large-file="https://andrewmagerman.files.wordpress.com/2016/12/helmut_sproll.jpeg?w=213" /></a>
  46.  
  47. <p style="text-align:center;">Diana Leuenberger, Susanne Schugg and Helmut Sproll</p>
  48. <p style="text-align:left;">And also many thanks to those that have contributed behind the scenes to make SNoUG a success &#8211; I think in particular here of Paul Harrison, with his wonderful AgendaWALL and AgendaPAD, as well as the very talented LDC Via Group, who help me whenever I&#8217;m stuck.</p>
  49. <p style="text-align:left;">I&#8217;d also proud of strengthening the Swiss IBM Champions group &#8211; showing that plucky little Switzerland can pack a good punch!</p>
  50. <p style="text-align:left;"><br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andrewmagerman.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andrewmagerman.wordpress.com/406/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=406&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
  51. <wfw:commentRss>https://blog.magerman.com/2016/12/15/ibm-champion/feed/</wfw:commentRss>
  52. <slash:comments>0</slash:comments>
  53. <media:thumbnail url="https://andrewmagerman.files.wordpress.com/2016/12/ibm_champion.jpeg" />
  54. <media:content url="http://andrewmagerman.files.wordpress.com/2016/12/ibm_champion.jpeg" medium="image">
  55. <media:title type="html">ibm_champion</media:title>
  56. </media:content>
  57.  
  58. <media:content url="http://2.gravatar.com/avatar/2390fa3108fe3a63ceafb79cd67452c0?s=96&#38;d=identicon&#38;r=G" medium="image">
  59. <media:title type="html">andrewmagerman</media:title>
  60. </media:content>
  61.  
  62. <media:content url="http://andrewmagerman.files.wordpress.com/2016/12/diana_leuenberger.jpg?w=150" medium="image" />
  63.  
  64. <media:content url="http://andrewmagerman.files.wordpress.com/2016/12/susanne_schugg.jpeg?w=113" medium="image" />
  65.  
  66. <media:content url="http://andrewmagerman.files.wordpress.com/2016/12/helmut_sproll.jpeg?w=135" medium="image" />
  67. </item>
  68. <item>
  69. <title>From 3000 milliseconds to 200 to open a page: Speed up your Notes Client applications by discovering their bottlenecks.</title>
  70. <link>https://blog.magerman.com/2016/11/30/from-3000-milliseconds-to-200-to-open-a-page-speed-up-your-notes-client-applications-by-discovering-their-bottlenecks/</link>
  71. <comments>https://blog.magerman.com/2016/11/30/from-3000-milliseconds-to-200-to-open-a-page-speed-up-your-notes-client-applications-by-discovering-their-bottlenecks/#comments</comments>
  72. <pubDate>Wed, 30 Nov 2016 16:22:24 +0000</pubDate>
  73. <dc:creator><![CDATA[andrewmagerman]]></dc:creator>
  74. <category><![CDATA[Uncategorized]]></category>
  75.  
  76. <guid isPermaLink="false">http://blog.magerman.com/?p=388</guid>
  77. <description><![CDATA[I had inherited a template for a database which was taking 3 seconds to open any sort of document. It soon got to be irritating, and I noticed that the little lightning bolt at the bottom left side of the Notes client was flashing wildly, so I fired up the Notes RPC Parser to try [&#8230;]<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=388&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
  78. <content:encoded><![CDATA[<p>I had inherited a template for a database which was taking 3 seconds to open any sort of document. It soon got to be irritating, and I noticed that the little lightning bolt at the bottom left side of the Notes client was flashing wildly, so I fired up the <a href="https://www.openntf.org/main.nsf/project.xsp?r=project/Notes%20RPC%20Parser/">Notes RPC Parser</a> to try and see what was all the traffic about.</p>
  79. <p>The culprit was soon found: it was a subform containing buttons whose label was dynamically computed depending on the user&#8217;s desired language. And, unfortunately, it was making an @DbLookup for every single button, and an uncached one at that. If you look at the screenshot, you&#8217;ll see that an @DbLookup generates 3 NRPC Calls, for a total of 50ms &#8211; and this was done 30 times each time a document was opened.</p>
  80. <p>That, and another issue that I corrected, meant that I could massively improve the performance of the application for only about half a day&#8217;s worth of work.</p>
  81. <p><img data-attachment-id="392" data-permalink="https://blog.magerman.com/2016/11/30/from-3000-milliseconds-to-200-to-open-a-page-speed-up-your-notes-client-applications-by-discovering-their-bottlenecks/screen-shot-2016-11-30-at-16-58-34/#main" data-orig-file="https://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png?w=1008" data-orig-size="1780,815" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="screen-shot-2016-11-30-at-16-58-34" data-image-description="" data-medium-file="https://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png?w=1008?w=300" data-large-file="https://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png?w=1008?w=1008" class="alignnone size-full wp-image-392" src="https://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png?w=1008" alt="screen-shot-2016-11-30-at-16-58-34" srcset="https://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png?w=1008 1008w, https://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png?w=150 150w, https://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png?w=300 300w, https://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png?w=768 768w, https://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png?w=1024 1024w, https://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png 1780w" sizes="(max-width: 1008px) 100vw, 1008px"   /></p>
  82. <p><strong>Feel free to use the tool</strong>, or if you can&#8217;t be bothered, <strong>hire me</strong> to solve your Notes Client performance issues.</p>
  83. <p>P.S. I&#8217;ve just released a new version of the tool <strong>Notes RPC Parser</strong>, which you can download <a href="https://www.openntf.org/main.nsf/project.xsp?r=project/Notes%20RPC%20Parser/releases/09922BDF0A4B6D7D86258067003E4049">here</a>:</p><br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andrewmagerman.wordpress.com/388/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andrewmagerman.wordpress.com/388/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=388&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
  84. <wfw:commentRss>https://blog.magerman.com/2016/11/30/from-3000-milliseconds-to-200-to-open-a-page-speed-up-your-notes-client-applications-by-discovering-their-bottlenecks/feed/</wfw:commentRss>
  85. <slash:comments>1</slash:comments>
  86. <media:thumbnail url="https://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png" />
  87. <media:content url="http://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png" medium="image">
  88. <media:title type="html">screen-shot-2016-11-30-at-16-58-34</media:title>
  89. </media:content>
  90.  
  91. <media:content url="http://2.gravatar.com/avatar/2390fa3108fe3a63ceafb79cd67452c0?s=96&#38;d=identicon&#38;r=G" medium="image">
  92. <media:title type="html">andrewmagerman</media:title>
  93. </media:content>
  94.  
  95. <media:content url="http://andrewmagerman.files.wordpress.com/2016/11/screen-shot-2016-11-30-at-16-58-34.png" medium="image">
  96. <media:title type="html">screen-shot-2016-11-30-at-16-58-34</media:title>
  97. </media:content>
  98. </item>
  99. <item>
  100. <title>Host your migrated Domino Data in Switzerland at ch.ldcvia.com</title>
  101. <link>https://blog.magerman.com/2016/11/14/host-your-migrated-domino-data-in-switzerland-at-ch-ldcvia-com/</link>
  102. <comments>https://blog.magerman.com/2016/11/14/host-your-migrated-domino-data-in-switzerland-at-ch-ldcvia-com/#respond</comments>
  103. <pubDate>Mon, 14 Nov 2016 11:19:09 +0000</pubDate>
  104. <dc:creator><![CDATA[andrewmagerman]]></dc:creator>
  105. <category><![CDATA[Domino Migration]]></category>
  106. <category><![CDATA[LDC Via]]></category>
  107.  
  108. <guid isPermaLink="false">http://blog.magerman.com/?p=368</guid>
  109. <description><![CDATA[LDC Via is a dream destination for your Domino data. If you are looking to decommission your Domino infrastructure, LDC Via offers you a Platform-as-a-Service (PaaS) solution for hosting your migrated Domino data. Once the data are transferred, they are available using the very modern REST interface which all modern Web applications (including native mobile [&#8230;]<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=368&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
  110. <content:encoded><![CDATA[<p>LDC Via is a <a href="https://blog.magerman.com/2016/08/30/ldc-via-is-a-dream-destination-for-migrated-notes-applications/">dream destination</a> for your Domino data. If you are looking to decommission your Domino infrastructure, LDC Via offers you a <strong>Platform-as-a-Service (PaaS) solution for hosting your migrated Domino data</strong>. Once the data are transferred, they are available using the very modern REST interface which all modern Web applications (including native mobile applications) can easily access.</p>
  111. <p>Certain Swiss customers (such as local governments) are not allowed to host their data outside of Switzerland.</p>
  112. <p>For these customers, and those of you who wish to avoid any interaction with US companies because of legal concerns, <strong>we have set up a Swiss instance of LDC Via</strong>, which is immediately available under</p>
  113. <p><a href="http://ch.ldcvia.com">ch.ldcvia.com</a></p>
  114. <p>I invite you to start exploring the service! Please contact me at <a href="mailto:[email protected]">[email protected]</a> or +41 79 831 83 13 if you have questions about the service.</p>
  115. <p>The pricing for the Swiss service follows the tiers defined at <a href="http://ldcvia.com/prices.html">ldcvia.com/prices.html</a></p>
  116. <table>
  117. <tbody>
  118. <tr>
  119. <th>Category</th>
  120. <th>monthly price</th>
  121. </tr>
  122. <tr>
  123. <td>Basic</td>
  124. <td>Free</td>
  125. </tr>
  126. <tr>
  127. <td>Standard</td>
  128. <td>400 CHF per month</td>
  129. </tr>
  130. <tr>
  131. <td>Pro</td>
  132. <td>1&#8217;000 CHF per month</td>
  133. </tr>
  134. <tr>
  135. <td>Enterprise</td>
  136. <td>2&#8217;000 CHF per month</td>
  137. </tr>
  138. </tbody>
  139. </table>
  140. <p>all prices excluding VAT.</p><br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andrewmagerman.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andrewmagerman.wordpress.com/368/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=368&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
  141. <wfw:commentRss>https://blog.magerman.com/2016/11/14/host-your-migrated-domino-data-in-switzerland-at-ch-ldcvia-com/feed/</wfw:commentRss>
  142. <slash:comments>0</slash:comments>
  143. <media:thumbnail url="https://andrewmagerman.files.wordpress.com/2016/08/ldcvia.png" />
  144. <media:content url="http://andrewmagerman.files.wordpress.com/2016/08/ldcvia.png" medium="image">
  145. <media:title type="html">ldcvia</media:title>
  146. </media:content>
  147.  
  148. <media:content url="http://2.gravatar.com/avatar/2390fa3108fe3a63ceafb79cd67452c0?s=96&#38;d=identicon&#38;r=G" medium="image">
  149. <media:title type="html">andrewmagerman</media:title>
  150. </media:content>
  151. </item>
  152. <item>
  153. <title>Why do Software Developers always squawk when inheriting a foreign codebase?</title>
  154. <link>https://blog.magerman.com/2016/10/04/why-do-software-developers-always-squawk-when-inheriting-a-foreign-codebase/</link>
  155. <comments>https://blog.magerman.com/2016/10/04/why-do-software-developers-always-squawk-when-inheriting-a-foreign-codebase/#respond</comments>
  156. <pubDate>Tue, 04 Oct 2016 08:29:58 +0000</pubDate>
  157. <dc:creator><![CDATA[andrewmagerman]]></dc:creator>
  158. <category><![CDATA[Uncategorized]]></category>
  159.  
  160. <guid isPermaLink="false">http://blog.magerman.com/?p=304</guid>
  161. <description><![CDATA[The first thing that Software Engineers do when they inherit a codebase that they haven&#8217;t written is to squawk loudly. This is terrible! That&#8217;s not the way to do it! We need to re-write this completely! I recently had an experience when a project manager suddenly lost his developer and asked me to take over. [&#8230;]<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=304&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
  162. <content:encoded><![CDATA[<p>The first thing that Software Engineers do when they inherit a codebase that they haven&#8217;t written is to squawk loudly.</p>
  163. <p><em>This is terrible! That&#8217;s not the way to do it! We need to re-write this completely!</em></p>
  164. <p>I recently had an experience when a project manager suddenly lost his developer and asked me to take over. <em>&#8216;Here is the list of requirements from the customer, they&#8217;re just small changes&#8217;</em>.</p>
  165. <p>I said &#8216;<em>OK, I&#8217;ll give this a look, doesn&#8217;t look too difficult</em>&#8216;. And then I started looking into the code, and I started grumbling more and more. There were no comments. No source control. No test code. The code I had in front of me what not working correctly, and I had no access to a codebase which was working. And within the code, there were so many times when I was thinking <em>&#8216;Oh no, why would you do that? I&#8217;d really do it differently&#8217;</em>.</p>
  166. <p>So I promptly squawked. And the project manager expressed his incredulity. <em>&#8216;It&#8217;s always the same with developers! They always complain of code that they haven&#8217;t written themselves!&#8217;</em>.</p>
  167. <p>So, here&#8217;s a little guide to explain why this happens.</p>
  168. <p><strong>We&#8217;re not masons.</strong></p>
  169. <p>That&#8217;s the crux. The job of building walls is well defined, and if a wall is not complete, you can hire another mason to finish the job. He&#8217;ll come to the site and the tools that he sees are familiar and he can start right where the previous person stopped. Easy.</p>
  170. <p>That&#8217;s not how it works with software. There is a wide range of ways you can solve something, the wider since we basically can write your own tools. Another persons&#8217; building site is going to be completely unfamiliar.</p>
  171. <p>So here are my <strong>insights for non-developers</strong>, in the hope that you will get over the impression that we are whiners, and understand that software development is not masonry.</p>
  172. <p><strong>Software is easier to write than to read</strong>.</p>
  173. <p>After about six months, even the code you have written yourself becomes more difficult to read. A <strong>good developer will be writing his code</strong> not just well enough for the machine to understand (bad developers stop at that point), but <strong>well enough for <span style="text-decoration:underline;">humans</span> to understand</strong>.</p>
  174. <p>This is a pretty accurate picture of what it&#8217;s like reading other people&#8217;s code from somebody else:</p>
  175. <p><a href="http://i.imgur.com/UGv2WaB.png"><img src="https://i0.wp.com/i.imgur.com/UGv2WaB.png" style="max-width:100%;" /></a></p>
  176. <p><strong>Software can be really badly written, and you can&#8217;t see it from outside.</strong></p>
  177. <p>This rejoins the points I was making in a previous post. Here we&#8217;re talking about <strong>maintainability</strong>, the ease with which a particular codebase can be modified.  Here are some best practices which you should insist that your developers follow:</p>
  178. <ul>
  179. <li>One is to separate the responsibility of code into little independent boxes, which only do one specific thing. If you need to change something, there is only one place to look for. This is called <strong>modularity</strong> and follows the concept of <strong>separation of concern</strong>.</li>
  180. <li>Another one is having <strong>Source Control</strong>. This shows all the changes that have been done on the codebase over time, including who did it, and enables us to revert code to what it was in the past (when a bug has been inserted, for instance.)</li>
  181. <li><strong>Automated tests</strong> make every small bit of the code run through its logic, often by trying to make it break. There is one thing that we software developers are scared of, and which happens a lot: we change a bit of code here and then notice that loads of other bits of code are no longer working. Automated tests enable you to be able to <strong>make bold changes</strong> because you immediately get feedback on whether you&#8217;ve broken something.</li>
  182. <li>Finally, <strong>documentation</strong> really helps. And please note that I&#8217;m not talking about some separate Word Document that was once done for the client, I&#8217;m talking about comments explaining why things were done in a particular way embedded within the code.</li>
  183. </ul>
  184. <p>If a software developer inherits a codebase which didn&#8217;t follow these guidelines, then that code is going to be a pain to maintain and to change. And as a developer, it&#8217;s a large source of frustration because we are in effect far slower at delivering changes than our predecessor, and our customer is not going to be impressed.</p>
  185. <p>So, if you are a customer, request that these basics are followed, or else you&#8217;ve got a <strong>bad case of developer lock-in</strong>, where Bob is the only person who can maintain the code.</p>
  186. <p><strong>In conclusion:</strong></p>
  187. <p>If you are a customer and switch developers or provider for a project, you&#8217;ll have to <strong>factor in some budget and time</strong> just for the new developer to get acquainted with the project. You&#8217;ll also see that it will initially take longer to effect changes, depending on how well and maintainable the software was written in the first place.</p>
  188. <p>&nbsp;</p><br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andrewmagerman.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andrewmagerman.wordpress.com/304/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=304&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
  189. <wfw:commentRss>https://blog.magerman.com/2016/10/04/why-do-software-developers-always-squawk-when-inheriting-a-foreign-codebase/feed/</wfw:commentRss>
  190. <slash:comments>0</slash:comments>
  191. <media:content url="http://2.gravatar.com/avatar/2390fa3108fe3a63ceafb79cd67452c0?s=96&#38;d=identicon&#38;r=G" medium="image">
  192. <media:title type="html">andrewmagerman</media:title>
  193. </media:content>
  194. </item>
  195. <item>
  196. <title>LDC Via is a dream destination for migrated Notes applications</title>
  197. <link>https://blog.magerman.com/2016/08/30/ldc-via-is-a-dream-destination-for-migrated-notes-applications/</link>
  198. <comments>https://blog.magerman.com/2016/08/30/ldc-via-is-a-dream-destination-for-migrated-notes-applications/#respond</comments>
  199. <pubDate>Tue, 30 Aug 2016 10:49:52 +0000</pubDate>
  200. <dc:creator><![CDATA[andrewmagerman]]></dc:creator>
  201. <category><![CDATA[Uncategorized]]></category>
  202.  
  203. <guid isPermaLink="false">http://blog.magerman.com/?p=282</guid>
  204. <description><![CDATA[It&#8217;s becoming increasingly clear that IBM Domino/Notes has reached its software end-of-life. IBM has not announced it, but the proof is in the pudding, and the pudding says no new releases since 3 years, the pudding says minimal IBM resources earmarked for development (almost all the exciting new stuff has been a community open-source work, [&#8230;]<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=282&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
  205. <content:encoded><![CDATA[<p>It&#8217;s becoming increasingly clear that <strong>IBM Domino/Notes has reached its software end-of-life</strong>.</p>
  206. <p>IBM has not announced it, but the proof is in the pudding, and the pudding says no new releases since 3 years, the pudding says minimal IBM resources earmarked for development (almost all the exciting new stuff has been a community open-source work, many thanks to the heroes at OpenNTF), the pudding says outdated development tools, circa 8 years old. I&#8217;m writing this article on the unconfirmed assumption that IBM has no interest in preserving either the Notes Client, the Domino server, and the nsf storage file.</p>
  207. <p>It&#8217;s time to start thinking about <strong>exit strategies</strong>.</p>
  208. <p>For companies that decided to move off from Notes/Domino, after the easy part of migrating mail-files and changing mail servers, they were usually left with a plethora of functioning, sometimes business critical applications, for whom the <strong>cost of a complete re-write in another platform was prohibitive</strong> (more on that later &#8211; it&#8217;s still the case). The exit costs are high,<strong> and most organisations decided to keep their Notes infrastructure running</strong>, in some sort of compromise co-existence scenario, often with the fat clients hidden away or available only to a small subset of users.</p>
  209. <p>But now that IBM is (apparently) pulling the plug, the &#8216;application migration&#8217; question comes up again. The costs are still high. Sorry. Why?</p>
  210. <p>The <strong>ugly secrets</strong> of most of the Notes applications that I&#8217;ve run across are</p>
  211. <ol>
  212. <li>They are <strong>badly documented</strong> (a crime which presumably is prevalent in most in-house developments, as opposed to professional software houses)</li>
  213. <li>The <strong>development tools</strong> <strong>invited developers to work in a quick-and-dirty way</strong>, with no structure, producing fast initial results but subsequently slow updates (This was unfortunately also the case for XPages applications).</li>
  214. <li>The <strong>absence of</strong> any way to do systematic <strong>testing</strong> also led to an <strong>accretive style of coding</strong>, where one only adds new stuff, and getting rid of old stuff is so dangerous that nobody dared to do it. This also means that, in a historically grown application, there is going to be a lot of cruft within the application &#8211; it&#8217;s impossible for a developer to know which are the bits that are needed, and which are obsolete.</li>
  215. </ol>
  216. <p>You&#8217;ll need the following for a successful application re-write:</p>
  217. <ol>
  218. <li>An application owner from the business side who has followed the history of the tool and will be able to tell the developer which bits are used and which are obsolete</li>
  219. <li>A developer that can &#8216;read&#8217; the old Notes application, not only in terms of code but also in terms of data structure and security.</li>
  220. </ol>
  221. <p>Once you have these two sine qua nons, the question arises as to which destination should you choose. Of all the options, my vote goes to LDC Via.</p>
  222. <p>LDC Via makes the re-write job a lot easier. Why?</p>
  223. <ol>
  224. <li>The <strong>data structure is the same</strong>, so the accessing logic in the new application doesn&#8217;t have to change.</li>
  225. <li>The <strong>document-level security</strong> upon which most Notes applications run is still available.</li>
  226. <li>The data is accessible using a <strong>modern interface</strong> called REST which is modern, simple to understand, use and test.</li>
  227. </ol>
  228. <p>This means that you can really concentrate on business logic and user interface and don&#8217;t have to spend time translating the original &#8216;Notes&#8217; logic.</p>
  229. <p>I&#8217;m looking forwards to my first application migration projects working with LDC Via, and I&#8217;m also proud to announce that <strong>my company has become a technology partner of LDC Via</strong>.</p>
  230. <p>Please feel free to contact <a href="mailto:[email protected]">me</a> if you are interested.</p><br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andrewmagerman.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andrewmagerman.wordpress.com/282/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=282&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
  231. <wfw:commentRss>https://blog.magerman.com/2016/08/30/ldc-via-is-a-dream-destination-for-migrated-notes-applications/feed/</wfw:commentRss>
  232. <slash:comments>0</slash:comments>
  233. <media:thumbnail url="https://andrewmagerman.files.wordpress.com/2016/08/ldcvia.png" />
  234. <media:content url="http://andrewmagerman.files.wordpress.com/2016/08/ldcvia.png" medium="image">
  235. <media:title type="html">ldcvia</media:title>
  236. </media:content>
  237.  
  238. <media:content url="http://2.gravatar.com/avatar/2390fa3108fe3a63ceafb79cd67452c0?s=96&#38;d=identicon&#38;r=G" medium="image">
  239. <media:title type="html">andrewmagerman</media:title>
  240. </media:content>
  241. </item>
  242. <item>
  243. <title>Software is an iceberg. You&#8217;ll get hurt by the submerged parts.</title>
  244. <link>https://blog.magerman.com/2016/02/19/software-is-an-iceberg-youll-get-hurt-by-the-submerged-parts/</link>
  245. <comments>https://blog.magerman.com/2016/02/19/software-is-an-iceberg-youll-get-hurt-by-the-submerged-parts/#respond</comments>
  246. <pubDate>Fri, 19 Feb 2016 15:05:16 +0000</pubDate>
  247. <dc:creator><![CDATA[andrewmagerman]]></dc:creator>
  248. <category><![CDATA[Uncategorized]]></category>
  249.  
  250. <guid isPermaLink="false">http://blog.magerman.com/?p=256</guid>
  251. <description><![CDATA[Software Quality is an iceberg. The tip of the iceberg is the small part sticking out that everybody can see. A non-IT person judges software with a far smaller subset of criteria than an IT professional: Functionality, performance, and usability. To a normal user, the interface is the software. I regularly have to choke off [&#8230;]<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=256&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
  252. <content:encoded><![CDATA[<p>Software Quality is an iceberg.</p>
  253. <p>The tip of the iceberg is the small part sticking out that everybody can see. A non-IT person judges software with a far smaller subset of criteria than an IT professional: <strong>Functionality, performance, and usability</strong>.</p>
  254. <p>To a normal user, the interface <strong>is</strong> the software. I regularly have to choke off exasperated comments when a customer tell me &#8216;<strong>but it&#8217;s only one extra button</strong>&#8216;.</p>
  255. <p>Lurking beneath the murky waters are those criteria which only IT professionals see: <strong>reliability, maintainability, security.</strong></p>
  256. <p>End-users should not be expected to see these &#8216;underlying&#8217; aspects, but if the decision-makers (i.e. the ones with the purse string) don&#8217;t see under the water, you&#8217;re doomed to produce bad software. Tell-tale signs are:</p>
  257. <ul>
  258. <li>There is no budget for IT maintenance</li>
  259. <li>The only time fresh money is given is for new functionalities &#8211; money is never given for a functionality-free maintenance</li>
  260. <li>Projects get stopped as soon as the software is barely out of beta testing. Finally, as a programmer, you&#8217;ve produced software that works, but in your mind, this is just a first version. There are lots of bits and bobs of useless code left in your software, debug code that writes to system.out, the object and data structure is a mess and could be optimised, you&#8217;ve yet to apply a profiler to your code to see where are the bottlenecks. And then the project gets stopped: <strong>&#8216;it works well enough&#8217;</strong>. That is very upsetting, and possibly one of the main reasons that in-house IT jobs are far less attractive than IT jobs within software companies.</li>
  261. </ul>
  262. <p>If you recognise yourself as a <strong>company</strong>, then you should give more power to the IT department. Too many companies treat IT as a necessary, needlessly costly evil. <strong>IT should be an essential, central part of your company strategy</strong>. There is no other region of a company&#8217;s activity which gives you more of a competitive edge.</p>
  263. <p>Too many companies (and I am looking at banks and insurances in particular) have failed to see that they are, essentially, a software company. You need to have a CIO who understands his trade, and <strong>accept that he is going to spend money for stuff which doesn&#8217;t make sense to you, or at least doesn’t seem to change anything</strong>.</p>
  264. <p>If you are only ready to pay for the IT stuff which is visible &#8211; more functionality, for instance, but no money for a refactoring exercise which would add stability but not change the functionality, the <strong>accumulated technical debt is going to bite you at some point</strong>. It might be that an application gets exponentially difficult to change, or it might be that you have a massive data loss that you can’t recover from because the backup software was not up-to-date and nobody did an actual restore as part of regular maintenance.</p>
  265. <p>If you are a <strong>developer</strong>, and you find yourself in such an environment, you&#8217;ll have to go guerilla. You&#8217;ll need to surreptitiously improve your code whenever you have the opportunity. Try to leave any code you touch a little bit better than before. Notice duplications and remove them. If you didn&#8217;t understand part of a code, then document it after you have understood it. If variable names are unclear, then rename them to something better. It&#8217;s an thankless occupation, because there is the risk that you break things that were working, and nobody will really care that you reduced the codebase by half, but it will help you progress and it will increase the quality of your work.</p>
  266. <p>IT is surprising in that often the <strong>perception</strong> of quality is <strong>completely at odds with real quality</strong>, because of this iceberg effect. I once used to work in an environment where colleagues were doing terrible things &#8211; changing code directly in the production environment, and only doing quick-and-dirty cosmetic patches, but were actually perceived by the customers as delivering excellent quality, because the response times were so fast.</p><br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andrewmagerman.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andrewmagerman.wordpress.com/256/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=256&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
  267. <wfw:commentRss>https://blog.magerman.com/2016/02/19/software-is-an-iceberg-youll-get-hurt-by-the-submerged-parts/feed/</wfw:commentRss>
  268. <slash:comments>0</slash:comments>
  269. <media:thumbnail url="https://andrewmagerman.files.wordpress.com/2016/02/iceberg.png" />
  270. <media:content url="http://andrewmagerman.files.wordpress.com/2016/02/iceberg.png" medium="image">
  271. <media:title type="html">iceberg</media:title>
  272. </media:content>
  273.  
  274. <media:content url="http://2.gravatar.com/avatar/2390fa3108fe3a63ceafb79cd67452c0?s=96&#38;d=identicon&#38;r=G" medium="image">
  275. <media:title type="html">andrewmagerman</media:title>
  276. </media:content>
  277. </item>
  278. <item>
  279. <title>getting git</title>
  280. <link>https://blog.magerman.com/2015/12/22/getting-git/</link>
  281. <comments>https://blog.magerman.com/2015/12/22/getting-git/#comments</comments>
  282. <pubDate>Tue, 22 Dec 2015 14:55:06 +0000</pubDate>
  283. <dc:creator><![CDATA[andrewmagerman]]></dc:creator>
  284. <category><![CDATA[git]]></category>
  285.  
  286. <guid isPermaLink="false">http://blog.magerman.com/?p=147</guid>
  287. <description><![CDATA[(git is wonderful. In the same way that unix is an&#8217;operating system done right&#8217;, git is &#8216;source control done right&#8217;. It has a surprising history, being basically the creation of Linus Torvalds, who decided that all the available source control solutions were useless, and so just wrote his own. That is fabulously cool. This is [&#8230;]<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=147&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
  288. <content:encoded><![CDATA[<p>(git is <strong>wonderful</strong>. In the same way that unix is an&#8217;operating system done right&#8217;, git is &#8216;source control done right&#8217;.</p>
  289. <p>It has a surprising history, being basically the creation of Linus Torvalds, who decided that all the available source control solutions were useless, and so just wrote his own. That is fabulously cool.</p>
  290. <p>This is a small article to introduce you to git.</p>
  291. <h2>Learning Curve</h2>
  292. <p>There definitely is a learning curve with git. At least that was the case for me.</p>
  293. <p>For starters, I had to throw away some concepts which I thought were set in stone. Git forces you to think about code in a different way. It turns out that that way of thinking has large advantages.</p>
  294. <p>The single biggest mental stumbling block for me was that I always considered the real code, the precious bit, to be the one I&#8217;m currently working on, and the code that is in source control system to be a backup. A byproduct, so to speak. You need to completely overturn this with git.</p>
  295. <p>The real stuff, the precious stuff, is what is in your repository. What you are currently working with, your working directory, that&#8217;s something like a <strong>scrapbook</strong>. You&#8217;re trying things out, making changes here and there, but it&#8217;s all very temporary and it&#8217;s not where the real stuff is. It shouldn&#8217;t be frightening to overwrite your working directory, for instance.</p>
  296. <h2>Repository</h2>
  297. <p>Let me track back a while and introduce the three areas in a local git repository (I am not talking about a remote repository, I am talking about a local git repository, on your local hard drive, and blazingly fast).</p>
  298. <p>The <strong>repository</strong> is where the history of your project is stored. It&#8217;s quite similar to a series of snapshots of your whole project. Each of these snapshots contain your whole project (technically, git is not saving the whole project but just saving the delta to your initial commit, but conceptually, think of these snapshots as whole copies of your project).</p>
  299. <p>These <strong>snapshots</strong> are called <strong>commits</strong>. They are unique, and can be referred to in a number of different ways, either directly (by using its number, which is a SHA-1 hash) or relatively (three commits before the last one I did).</p>
  300. <p>Each commit points to a parent commit. When you have two different commits pointing to the same parent, these two commits are the starting points of different <strong>branches</strong>. The two codestreams, from this branching point, starts having a life of their own, although it&#8217;s possible to merge different branches together at a later stage.</p>
  301. <h2>Decentralized weirdness</h2>
  302. <p>This is a good time to introduce another weirdness that took me some time to grok. There is <strong>no primacy between branches</strong>. It&#8217;s a delightfully anarchic system, no bosses &#8211; a little like the anarcho-syndicalist communes of &#8216;The Holy Grail&#8217;. There is no master control program, no centralized master system. One can define certain branches to be more &#8216;important&#8217; than others, but it&#8217;s just a <strong>naming convention</strong>, it&#8217;s not something that is built in.</p>
  303. <p>The same applies between your local repository and the remote repository. Git really doesn&#8217;t assume that one of them is more important than the other. It&#8217;s very disquieting, but liberating once you&#8217;ve understood it.</p>
  304. <h2>Working Directory</h2>
  305. <p>Next, your <strong>working directory</strong>. This is where your whole project is, where the code is, images, what have you. This is what gets &#8216;snapshotted&#8217; each time one makes a commit. It could be possible to snapshot your whole project every time, i.e. every single file, but it turns out that that is a bad idea, because you end up saving too much and it gets really difficult to understand what exactly happened between two commits. I must admit to having done that at the beginning, because I was blocked in my &#8216;backup&#8217; concept.</p>
  306. <p>No, what you want to do is <strong>make lots of small commits</strong>, with each commit changing as few files as possible, as long as they pertain to one common change.</p>
  307. <h2>Staging Area</h2>
  308. <p>Enter the <strong>staging area</strong>. Really well named, this is where you determine which files you want to belong to the next commit. You&#8217;re not interested in the files that have changed only because something trivial like a timestamp has changed, and you&#8217;re not interested in unrelated changes either. You really want to encapsulate all the changes necessary for a single debugging or a single new feature into a commit.</p>
  309. <h2>Overview</h2>
  310. <p>The following diagram shows the basic logic: you add files to the staging area with the <strong>git add</strong> command, then you commit those added files with a <strong>git commit</strong> command. Bringing back a specific commit to the working directory is done with the <strong>git checkout</strong> command.</p>
  311. <p><img data-attachment-id="222" data-permalink="https://blog.magerman.com/2015/12/22/getting-git/sublime_text_graphviz_c8osfb-2/#main" data-orig-file="https://andrewmagerman.files.wordpress.com/2015/12/sublime_text_graphviz_c8osfb.png?w=1008" data-orig-size="650,625" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="sublime_text_graphviz_C8OsfB" data-image-description="" data-medium-file="https://andrewmagerman.files.wordpress.com/2015/12/sublime_text_graphviz_c8osfb.png?w=1008?w=300" data-large-file="https://andrewmagerman.files.wordpress.com/2015/12/sublime_text_graphviz_c8osfb.png?w=1008?w=650" class="alignnone size-full wp-image-222" src="https://andrewmagerman.files.wordpress.com/2015/12/sublime_text_graphviz_c8osfb.png?w=1008" alt="sublime_text_graphviz_C8OsfB" srcset="https://andrewmagerman.files.wordpress.com/2015/12/sublime_text_graphviz_c8osfb.png 650w, https://andrewmagerman.files.wordpress.com/2015/12/sublime_text_graphviz_c8osfb.png?w=150 150w, https://andrewmagerman.files.wordpress.com/2015/12/sublime_text_graphviz_c8osfb.png?w=300 300w" sizes="(max-width: 650px) 100vw, 650px"   /></p>
  312. <p>So, you&#8217;ve got this conceptually? Working directory, repository, staging area? Right. This is what you should work with.</p>
  313. <p>I got very confused by how this is actually built. The repository and the staging area are stored in a folder called <strong>.git</strong> which is contained <strong>within</strong> the working directory.</p>
  314. <p>This made my head wobble. Surely, not inside the directory? Surely, that way lies folly? Infinite recursions? Surely it should be external? But that&#8217;s how it&#8217;s built. Inside. It&#8217;s elegant once you start thinking about it but it made my head hurt.</p>
  315. <h2>Start with the command line</h2>
  316. <p>I would recommend staring with a command-line interface. I know that there are many GUI Interfaces out there (SourceTree being a particularly good one), but all they are doing is adding an interface on top of the command-line instructions.</p>
  317. <p>I would recommend moving to a GUI once you&#8217;ve learnt the basics of git. Additionally, the command line is very helpful for noobs, as it notices when you have typed something that doesn&#8217;t make sense and makes a suggestion. Stackoverflow and the git documentation are the place to go if you get stuck.</p>
  318. <p><a href="http://gitref.org/" target="_blank" rel="noopener noreferrer">http://gitref.org/</a> is a good, compact resource.</p>
  319. <p><a href="https://git-scm.com/downloads" target="_blank" rel="noopener noreferrer">You can download the git command-line bash here.</a></p>
  320. <h2>Recommended Reading</h2>
  321. <p>This is a tip from Eric McCormick.</p>
  322. <p><img data-attachment-id="225" data-permalink="https://blog.magerman.com/2015/12/22/getting-git/gitinpractise/#main" data-orig-file="https://andrewmagerman.files.wordpress.com/2015/12/gitinpractise.jpg?w=1008" data-orig-size="399,499" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gitinpractise" data-image-description="" data-medium-file="https://andrewmagerman.files.wordpress.com/2015/12/gitinpractise.jpg?w=1008?w=240" data-large-file="https://andrewmagerman.files.wordpress.com/2015/12/gitinpractise.jpg?w=1008?w=399" class="alignnone size-full wp-image-225" src="https://andrewmagerman.files.wordpress.com/2015/12/gitinpractise.jpg?w=1008" alt="gitinpractise" srcset="https://andrewmagerman.files.wordpress.com/2015/12/gitinpractise.jpg 399w, https://andrewmagerman.files.wordpress.com/2015/12/gitinpractise.jpg?w=120 120w, https://andrewmagerman.files.wordpress.com/2015/12/gitinpractise.jpg?w=240 240w" sizes="(max-width: 399px) 100vw, 399px"   /></p>
  323. <h2></h2>
  324. <p><a href="http://www.amazon.de/gp/product/1617291978/ref=as_li_tl?ie=UTF8&amp;camp=1638&amp;creative=19454&amp;creativeASIN=1617291978&amp;linkCode=as2&amp;tag=rawgremad-21" rel="nofollow">Git in Practice [With eBook]</a><img style="border:none !important;margin:0!important;" src="http://ir-de.amazon-adsystem.com/e/ir?t=rawgremad-21&amp;l=as2&amp;o=3&amp;a=1617291978" alt="" width="1" height="1" border="0" /></p>
  325. <h2>Useful Commands</h2>
  326. <p>Here I have listed those commands which I am using regularly and feel comfortable with:</p>
  327. <h3>Initializing</h3>
  328. <pre class="brush: plain; gutter: false; title: ; notranslate">
  329. git init
  330. </pre>
  331. <p>First initialization, creates the <strong>magical hidden folder .git</strong>. This is where the actual repository is stored (see above). You&#8217;ll need to select the directory which you want to &#8216;track&#8217;</p>
  332. <h3>Staging</h3>
  333. <p>Staging means &#8216;saying these are the files I wish to commit&#8217;</p>
  334. <p>The command for staging is</p>
  335. <pre class="brush: plain; gutter: false; title: ; notranslate">
  336. git add &lt;filename&gt;
  337. </pre>
  338. <p>alternatively you can use</p>
  339. <pre class="brush: plain; gutter: false; title: ; notranslate">
  340. git add .
  341. </pre>
  342. <p>which will add all the files in the current directory (. is the current directory)</p>
  343. <h3>Committing</h3>
  344. <pre class="brush: plain; gutter: false; title: ; notranslate">
  345. git commit --message='Committing message'
  346. </pre>
  347. <p>The convention is to write a message with multiple lines, a bit structured like an e-mail. The first line should be like the subject of the e-mail, the other lines are the &#8216;body&#8217; of the e-mail.</p>
  348. <h3>Creating a remote repository:</h3>
  349. <pre class="brush: plain; gutter: false; title: ; notranslate">
  350. git remote
  351. </pre>
  352. <p>shows the remote repository linked to the current repository. You&#8217;ll need to have created this beforehand on the github site.</p>
  353. <p>I use github, so the example here is with github. First log into GitHub and create a repository there. Note the URL of the remote repository (there is a convenient button for this)</p>
  354. <pre class="brush: plain; gutter: false; title: ; notranslate">
  355. git remote add origin &lt;your remote repository URL&gt;;
  356. </pre>
  357. <p>Note: origin here is one of these conventions, it&#8217;s the default name of the remote repository. Don&#8217;t make the mistake of naming one of your remote branches origin. Remember, convention!</p>
  358. <pre class="brush: plain; gutter: false; title: ; notranslate">
  359. git remote -v
  360. </pre>
  361. <p>shows the urls linked to your remote repository.</p>
  362. <pre class="brush: plain; gutter: false; title: ; notranslate">
  363. git remote show origin
  364. </pre>
  365. <p>This command shows all the branches on the origin repository (the remote one, origin is its name by default)</p>
  366. <p>&nbsp;</p>
  367. <p>&nbsp;</p>
  368. <h3>Fetching</h3>
  369. <pre class="brush: plain; gutter: false; title: ; notranslate">
  370. git fetch
  371. </pre>
  372. <p>fetches the data from the external repository but does not merge the data.</p>
  373. <h3>Pulling</h3>
  374. <pre class="brush: plain; gutter: false; title: ; notranslate">
  375. git pull
  376. </pre>
  377. <p>fetches, then merges the data.</p>
  378. <h3>Pushing</h3>
  379. <pre class="brush: plain; gutter: false; title: ; notranslate">
  380. git push &lt;remote&gt; &lt;local branch name&gt;:&lt;remote branch to push into&gt;
  381. </pre>
  382. <p>pushes the data from the local repository to the remote one.</p>
  383. <h3>Checkout (restore files or change branch)</h3>
  384. <pre class="brush: plain; gutter: false; title: ; notranslate">
  385. git checkout
  386. </pre>
  387. <p>This switches branches or restores working tree files. It&#8217;s a bit of an uncomfortable command at first because it seems to be doing two completely different things. Actually, it&#8217;s doing the exact same thing &#8211; it&#8217;s overwriting your working directory with information from a particular commit. Your working directory is a scrapbook, remember?</p>
  388. <p>I find this useful to avoid committing fluff (my technical term for files which have, technically, changed (a timestamp for instance) but which are not actually changes.) I add the files that I want to have committed with <strong>gid add</strong>, then I do a <strong>git commit</strong>, and then a</p>
  389. <pre class="brush: plain; gutter: false; title: ; notranslate">
  390. git checkout -- .
  391. </pre>
  392. <p>to overwrite the fluff in the working directory.</p>
  393. <p>If you notice you&#8217;ve just committed nonsense (in this example I replaced the whole About This Database with nothing), you want to restore the file to what it was before. Here comes git checkout for helping again:</p>
  394. <pre class="brush: plain; gutter: false; title: ; notranslate">
  395. git checkout HEAD~1 -- odp/Resources/AboutDocument
  396. </pre>
  397. <p>HEAD~1 is a way to refer to a specific commit, i.e. &#8216;The commit on HEAD&#8217; minus (~) one (1)</p>
  398. <h2>Conventions for naming files and directories:</h2>
  399. <h3>dash dash</h3>
  400. <p>If you see <strong>&#8212;</strong> before a filename, it&#8217;s a disambiguator saying &#8216;what follows are necessarily files&#8217;</p>
  401. <h3>dot</h3>
  402. <p>. is the <strong>current directory</strong> &#8211; so, everything.</p>
  403. <h3>Syntax for defining an entire directory with everything in it</h3>
  404. <p><strong>odp/Resources/</strong> would define that particular directory, along with anything inside it. Note the trailing slash!</p>
  405. <h2>Conventions for naming commits:</h2>
  406. <p>Naming conventions:</p>
  407. <p><strong>HEAD:</strong> Head is a pointer the commit that was pushed into the working directory last. Think of it as &#8216;commit corresponding to the current state of my working directory before I made any changes&#8217;.</p>
  408. <p><strong>&lt;commit name&gt;~1</strong> The tilde here means &#8216;minus&#8217;, so this would be the previous commit.</p>
  409. <h2>Configuration options that are useful</h2>
  410. <p>In git Bash, I immediately increase the font size to something readable with our big screens, and then</p>
  411. <pre class="brush: plain; gutter: false; title: ; notranslate">
  412. git config --global core.autocrlf false
  413. </pre>
  414. <p>which avoids the annoying &#8216;lf/crlf&#8217; comments, since I&#8217;m mostly working in a windows environment (sniff).<br />
  415. Do this before your initial commit! (see <a href="https://help.github.com/articles/dealing-with-line-endings/" target="_blank" rel="noopener noreferrer">https://help.github.com/articles/dealing-with-line-endings/</a>)</p>
  416. <h2>Setting up SSH keys with Git Bash</h2>
  417. <p>Since I&#8217;m lazy and don&#8217;t want to type in password and username every time I connect to git, here&#8217;s how to do it it cleanly via ssh.</p>
  418. <pre class="brush: plain; gutter: false; title: ; notranslate">
  419. ssh-keygen -t rsa -b 4096 -C &quot;[email protected]&quot;
  420. </pre>
  421. <p>Press Enter for default in which to save key enter a passphrase (a complicated one, alright?)</p>
  422. <p>Add the keys to the ssh-agent (This is a background agent whose job is to always automatically enter your passphrase in. You should be aware that this makes your local physical machine a lot more vulnerable)</p>
  423. <pre class="brush: plain; gutter: false; title: ; notranslate">
  424. eval $(ssh-agent -s)
  425. ssh-add ~/.ssh/id_rsa
  426. </pre>
  427. <p>copy the PUBLIC key to the clipboard (windows)</p>
  428. <pre class="brush: plain; gutter: false; title: ; notranslate">
  429. clip &lt; ~/.ssh/id_rsa.pub
  430. </pre>
  431. <p>or mac OS</p>
  432. <pre class="brush: plain; gutter: false; title: ; notranslate">
  433. pbcopy &lt; ~/.ssh/id_rsa.pub
  434. </pre>
  435. <p>add the ssh key to your github account Test the keys with</p>
  436. <pre class="brush: plain; gutter: false; title: ; notranslate">
  437. ssh -T [email protected]
  438. </pre>
  439. <h2>Ignoring certain files or directories</h2>
  440. <p>There are some occasions when you don&#8217;t want certain files to be tracked by git. Typically, there are for instance binaries of your source code, or hidden files generated by your ide.</p>
  441. <p>You can see which files are not being tracked with this command:</p>
  442. <pre class="brush: plain; gutter: false; title: ; notranslate">
  443. git ls-files --others --exclude-standard
  444. </pre>
  445. <p>or alternatively,</p>
  446. <pre class="brush: plain; gutter: false; title: ; notranslate">
  447. git add -A -n
  448. </pre>
  449. <p>There are unfortunately many different ways to define the excluded files. There is a central configuration file, whose location one can find with</p>
  450. <pre class="brush: plain; gutter: false; title: ; notranslate">
  451. git config --get core.excludesfile
  452. </pre>
  453. <p>Within your project, there are two files that control the exclusions:</p>
  454. <pre class="brush: plain; gutter: false; title: ; notranslate">
  455. .gitignore
  456. .git/info/exclude
  457. </pre>
  458. <p>Confused? Here is an explanation from Junio Hamano (the maintainer of Git)</p>
  459. <p>The .gitignore and .git/info/exclude are the two UIs to invoke the same mechanism. In-tree .gitignore are to be shared among project members (i.e. everybody working on the project should consider the paths that match the ignore pattern in there as cruft). On the other hand, .git/info/exclude is meant for personal ignore patterns (i.e. you, while working on the project, consider them as cruft).</p>
  460. <p>This command combination is practical (thanks Akira Yamammoto)</p>
  461. <pre class="brush: plain; gutter: false; title: ; notranslate">
  462. git rm -r --cached .
  463. </pre>
  464. <p>(recursively remove all the cached files (i.e. tracked) from the current directory) then</p>
  465. <pre class="brush: plain; gutter: false; title: ; notranslate">
  466. git add .
  467. git commit -m &quot;fixed untracked files&quot;
  468. </pre>
  469. <h2>Notes/Domino best practices</h2>
  470. <p>Best practice when gitting an odp project: Never disconnect the nsf from the eclipse project.<br />
  471. Never change the nsf the odp is connected to.</p>
  472. <p>Thanks to Adrian Osterwalder for the tips.</p><br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andrewmagerman.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andrewmagerman.wordpress.com/147/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=147&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
  473. <wfw:commentRss>https://blog.magerman.com/2015/12/22/getting-git/feed/</wfw:commentRss>
  474. <slash:comments>2</slash:comments>
  475. <media:content url="http://2.gravatar.com/avatar/2390fa3108fe3a63ceafb79cd67452c0?s=96&#38;d=identicon&#38;r=G" medium="image">
  476. <media:title type="html">andrewmagerman</media:title>
  477. </media:content>
  478.  
  479. <media:content url="http://andrewmagerman.files.wordpress.com/2015/12/sublime_text_graphviz_c8osfb.png" medium="image">
  480. <media:title type="html">sublime_text_graphviz_C8OsfB</media:title>
  481. </media:content>
  482.  
  483. <media:content url="http://andrewmagerman.files.wordpress.com/2015/12/gitinpractise.jpg" medium="image">
  484. <media:title type="html">gitinpractise</media:title>
  485. </media:content>
  486.  
  487. <media:content url="http://ir-de.amazon-adsystem.com/e/ir?t=rawgremad-21&#038;l=as2&#038;o=3&#038;a=1617291978" medium="image" />
  488. </item>
  489. <item>
  490. <title>Back from ICON UK with some goodies.</title>
  491. <link>https://blog.magerman.com/2015/10/02/back-from-icon-uk-with-some-goodies/</link>
  492. <comments>https://blog.magerman.com/2015/10/02/back-from-icon-uk-with-some-goodies/#respond</comments>
  493. <pubDate>Fri, 02 Oct 2015 08:25:41 +0000</pubDate>
  494. <dc:creator><![CDATA[andrewmagerman]]></dc:creator>
  495. <category><![CDATA[Conferences]]></category>
  496.  
  497. <guid isPermaLink="false">http://blog.magerman.com/?p=138</guid>
  498. <description><![CDATA[Another year gone and ICON UK did not disappoint. Tim Clark made a wonderful job of continuing on the success of last year&#8217;s performance, bringing back the event to two full days. IBM graciously hosted us in its stanley kubrik-esque Client Center, with stunning Thames views, lovely food, good infrastructure. Wonderful. René Winkelmeyer held a [&#8230;]<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=138&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
  499. <content:encoded><![CDATA[<p>Another year gone and ICON UK did not disappoint. Tim Clark made a wonderful job of continuing on the success of last year&#8217;s performance, bringing back the event to two full days. IBM graciously hosted us in its stanley kubrik-esque Client Center, with stunning Thames views, lovely food, good infrastructure. Wonderful.</p>
  500. <p>René Winkelmeyer held a wonderful session on gradle and I was very impressed by his mastery of his computer. He was actually using vim to edit text files, and I must admit that I was so impressed that I am actually writing this blog on vim, learning the hard way. Really fast, configurable, powerful text editors that are done for programmers seem to be more and more the norm. Beside vim, there&#8217;s sublime text, Matt White mentioned Atom as being his favourite, and I must admit that it is really a refreshing break after Eclipse, which is slow and ponderous in comparison. I&#8217;m not even making the comparison to DDE.</p>
  501. <p>Here are the slides: <a href="http://www.slideshare.net/muenzpraeger/iconuk-2015-gradle-up" rel="nofollow">http://www.slideshare.net/muenzpraeger/iconuk-2015-gradle-up</a></p>
  502. <p>Speaking of gradle, that&#8217;s another trend which I can see happening in parallel in several different systems. I&#8217;ve been discovering the joys of Linux and scripting because of a small raspberry pi project I am doing on the side, and there is a common theme of self-updating, self-building systems, be it apt-get (for linus os x updates), or bower (for javascript libraries), or homebrew formac os libraries, or maven for building up the dependencies for a java project. The skillset needed to build a modern project is getting to be more and more to know which great big building blocks are needed and mastering the building tool. I&#8217;ve been trying to get my head around Maven right now, but since I heard some dark mutterings by Paul Withers about the documentation of Maven, I think I&#8217;m going to just jump over Maven and go to gradle directly.</p>
  503. <p>I had the pleasure attending the session by Bill Malchisky and I&#8217;m proud to say that I understood at least half of what he said. He speaks surprisingly fast and surprisingly exactly; it&#8217;s an uncommon combination but one really needs to listen hard. He is also a script master, and again, eerily, a nudge in the direction of &#8216;invest in your text-editor and typing skill&#8217;.</p>
  504. <p>Matt White showed the magic of node.js, which is used extensively in their solution LDC Via, and there again I was seduced by the simple structure, and the promise of only a single thread working very very fast.</p>
  505. <p>I spent a thoroughly enjoyable hour with Serdar, and I discovered that we share many opinions as &#8216;convinced skeptics&#8217;. It was a pleasure to bash on pseudoscientific nonsense with him. Next time I&#8217;ll bring woowar in and we&#8217;ll do a bigger skeptics session.</p>
  506. <p>On the second day Andrew Grill showed the advantages of Connections, his style was entertaining and persuasive. His colleague Harriet explained to us rather condescendingly what it was to be a millenial. I didn&#8217;t understand why being impatient and having a short attention span is somehow good, and I took exception to the comment that millenials don&#8217;t read instruction manuals but just expect things to work immediately out of the box. Surely that is a result of extraordinarily good product development (I am thinking in particular of the Apple products), and it&#8217;s not because the millenials are this super-brainy generation. Making things simple is extraordinarily difficult. Just try it.</p><br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andrewmagerman.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andrewmagerman.wordpress.com/138/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=138&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
  507. <wfw:commentRss>https://blog.magerman.com/2015/10/02/back-from-icon-uk-with-some-goodies/feed/</wfw:commentRss>
  508. <slash:comments>0</slash:comments>
  509. <media:content url="http://2.gravatar.com/avatar/2390fa3108fe3a63ceafb79cd67452c0?s=96&#38;d=identicon&#38;r=G" medium="image">
  510. <media:title type="html">andrewmagerman</media:title>
  511. </media:content>
  512. </item>
  513. <item>
  514. <title>Engage 2015 as engaging as ever</title>
  515. <link>https://blog.magerman.com/2015/04/02/engage-2015-as-engaging-as-ever/</link>
  516. <comments>https://blog.magerman.com/2015/04/02/engage-2015-as-engaging-as-ever/#comments</comments>
  517. <pubDate>Thu, 02 Apr 2015 07:46:29 +0000</pubDate>
  518. <dc:creator><![CDATA[andrewmagerman]]></dc:creator>
  519. <category><![CDATA[Conferences]]></category>
  520. <category><![CDATA[User Groups]]></category>
  521.  
  522. <guid isPermaLink="false">http://blog.magerman.com/?p=129</guid>
  523. <description><![CDATA[Engage is the most successful LUG in Europe, and as usual I am slightly bewildered by how Theo Heselmans, our gracious host, manages to pull it off. The venue was lovely, the opening session room stunning, and the content was very high quality. I really enjoyed meeting many community members whom I had only seen [&#8230;]<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=129&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
  524. <content:encoded><![CDATA[<p>Engage is the most successful LUG in Europe, and as usual I am slightly bewildered by how Theo Heselmans, our gracious host, manages to pull it off. The venue was lovely, the opening session room stunning, and the content was very high quality. I really enjoyed meeting many community members whom I had only seen online, including a couple of my Stackoverflow saviours (Per, nice to have met you!)</p>
  525. <p>The city of Ghent itself was a nice surprise. The inner city is full of history, with many old buildings harking back to a more prosperous past, and a surprising number of churches. I had a little walk to the north of the city, though, and it&#8217;s obvious that the city went through an industrial phase which it got out of and has not really recuperated from.</p>
  526. <p><strong>Here are my technical take homes from the whole two day session:</strong></p>
  527. <p>Both Ulrich Krause and Frank van den Linden independently confirmed that they didn&#8217;t like the new &#8216;Java&#8217; element and found the oldskool WEB-INF folder stabler.</p>
  528. <p>Theo Heselmans presented some of the Javascript frameworks he&#8217;s been using; I knew Bootstrap and Backbone; he recommended Ratchet and Knockout as well. Also, if you want to store local stuff, the way to go nowadays is no longer cookies but the manifest or local storage.</p>
  529. <p>John Daalsgard had a good session explaining the Domino REST API; I learned lots of stuff but was sort of disappointed that authentication was not really talked about. Most of the examples were using anonymous access, and authentication is still not really an easy thing to do. Paul Harrisson, who did the local web application for engage, pointed me to <a title="Domino Authentication using AJAX and JSON" href="http://domiknow.co.uk/" target="_blank">his blog entry</a> about authentication. I&#8217;ve been working with Julian Buss&#8217; framework DominoToGo and I was initially under the impression that the REST Services introduced in 9.0.1 would mitigate its usefulness but I&#8217;m coming to the conclusion that as soon as you get out of the demo-cases &#8216;simple text&#8217; and &#8216;anonymous access&#8217; things start getting complicated using REST, i.e. one has got to start coding things oneself.</p>
  530. <p>One of the most interesting sessions was the one on GIT done by Martin Jinoch and Jan Krejcarek. Martin was very stern and he endeavoured to persuade us to abandon the idea that the source code resides within the NSF and that the Git repository is the backup. Rather, the source code is in GIT and the NSF is just a throwaway, last-minute build construct. I almost broke in tears. Martin also admonished us to turn everything off that automatically builds, including the nsf to on-disk-project sync.</p>
  531. <p>I was also relieved to hear that other fellow developers were irritated by &#8216;false positives&#8217;, i.e. files that have been touched, and therefore appear in the staging area of git, but whose code has not been practically modified, and therefore are really cluttering. There is a project called DORA which alleviates this, but it only works if one starts the project with it. Implementing it midway is bad, apparently (thanks to Serdar).</p>
  532. <p>The London Developer Co-op was there in force, with a stand even, and showed us a very polished product for data exporting. I can see use cases if customers just want to store their data somewhere else, to finally kill off the remnants of their Domino infrastructure, but the fact that the business logic does not get exported will still represent a large exit barrier.</p>
  533. <p>Mark Leuksink and Frank van den Linden introduced me also independently to bower, a package manager that manages the javascript library dependencies automatically for you. The idea here, if you&#8217;re doing an XPages project, to have bower point at your ods structure and do the updates here. You&#8217;ll need to press F9 in the package explorer before syncing the project.</p>
  534. <p>In the mindblowing categories, Nathan Freeman showed the Graph construct he has made available within the OpenNTF Domino API. Documents stored in nsf without views? That&#8217;s just weird. Possibly illegal. And whereas I can see obvious advantages in terms of speed when the data structure is already known in advance, especially for transversal, multi-layered searches like &#8216;show me the persons who know the persons I know&#8217;, I&#8217;m not sure how the Graph concept would deal with ad-hoc requests, or with a change in the underlying data structure. I would really like to see what sort of measurements one can make as to the performance of data writing and reading, especially in large numbers. The demonstrations as well were built from scratch, and worked well, and I&#8217;d be very interested to see what happens when one takes an existing data landscape and &#8216;graphs&#8217; it.</p>
  535. <p>The final session I attended was from Paul Withers and Daniele Vistalli. Paul presented the newest possibilities of the next version of OpenNTF Domino API. They are introducing a concept of metaversalID which is a combination of database replicaID and Document Universal ID, and apparently the code has been made Maven-compatible. It looks like we will have, in conjunction with Christian Güdemann&#8217;s work on an eclipse builder, soon a system where we can start thinking of continuous builds. We&#8217;ll be big boys, then, finally.</p>
  536. <p>Daniele introduced the Websphere Liberty Server. I had dismissed the Websphere server as a huge, lumbering IBM monster but apparently the Liberty Server is small and lightweight. And then, doing some magic, Paul and Daniels made the Liberty Server behave just like a Domino server. The demonstration was still very much in beta stage, and I&#8217;m not clear as to the implications of this tour de force. But it might be a game-changer.</p>
  537. <p><strong>my non-technical take homes:<br />
  538. </strong></p>
  539. <p>When travelling, bring <strong>two</strong> phone chargers. With the iPhones losing juice so quickly, losing your charger leaves you strangely vulnerable and incommunicado. Thanks to Ben Poole for letting me load up at the LDC Via stand.</p>
  540. <p>It is unwise to start debating with Nathan Freeman at 2.30 in the morning after everyone else has been kicked out of the hotel bar, and Nathan has a bottle of tequila in an ice bucket.</p><br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andrewmagerman.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andrewmagerman.wordpress.com/129/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=129&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
  541. <wfw:commentRss>https://blog.magerman.com/2015/04/02/engage-2015-as-engaging-as-ever/feed/</wfw:commentRss>
  542. <slash:comments>3</slash:comments>
  543. <media:thumbnail url="https://andrewmagerman.files.wordpress.com/2015/04/engage-logo.png" />
  544. <media:content url="http://andrewmagerman.files.wordpress.com/2015/04/engage-logo.png" medium="image">
  545. <media:title type="html">Engage Logo</media:title>
  546. </media:content>
  547.  
  548. <media:content url="http://2.gravatar.com/avatar/2390fa3108fe3a63ceafb79cd67452c0?s=96&#38;d=identicon&#38;r=G" medium="image">
  549. <media:title type="html">andrewmagerman</media:title>
  550. </media:content>
  551. </item>
  552. <item>
  553. <title>Loop elegantly through a JavaScript Array</title>
  554. <link>https://blog.magerman.com/2015/03/16/loop-elegantly-through-a-javascript-array/</link>
  555. <comments>https://blog.magerman.com/2015/03/16/loop-elegantly-through-a-javascript-array/#comments</comments>
  556. <pubDate>Mon, 16 Mar 2015 14:48:48 +0000</pubDate>
  557. <dc:creator><![CDATA[andrewmagerman]]></dc:creator>
  558. <category><![CDATA[Uncategorized]]></category>
  559.  
  560. <guid isPermaLink="false">http://blog.magerman.com/?p=121</guid>
  561. <description><![CDATA[I&#8217;ve been reading JavaScript Enlightenment to try and understand the language. There is beauty, and power, hiding behind the covers of JavaScript, but I haven&#8217;t clicked yet. I still don&#8217;t really get prototypal inheritance and what &#8216;this&#8217; really means. There is power in understanding closure and scope, too, I am sure. This small book is [&#8230;]<img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=121&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
  562. <content:encoded><![CDATA[<p>I&#8217;ve been reading <a href="http://www.amazon.com/gp/product/1449342884/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;linkCode=as2">JavaScript Enlightenment</a><img style="border:none !important;margin:0!important;" src="http://ir-na.amazon-adsystem.com/e/ir?t=&amp;l=as2&amp;o=1&amp;a=1449342884" alt="" width="1" height="1" border="0" /> to try and understand the language. There is beauty, and power, hiding behind the covers of JavaScript, but I haven&#8217;t clicked yet. I still don&#8217;t really get prototypal inheritance and what &#8216;this&#8217; really means. There is power in understanding closure and scope, too, I am sure. This small book is recommended to see where the beauty is.</p>
  563. <p><a href="https://andrewmagerman.files.wordpress.com/2015/03/20943392.jpg"><img data-attachment-id="122" data-permalink="https://blog.magerman.com/2015/03/16/loop-elegantly-through-a-javascript-array/attachment/20943392/#main" data-orig-file="https://andrewmagerman.files.wordpress.com/2015/03/20943392.jpg" data-orig-size="318,417" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="20943392" data-image-description="" data-medium-file="https://andrewmagerman.files.wordpress.com/2015/03/20943392.jpg?w=229&#038;h=300" data-large-file="https://andrewmagerman.files.wordpress.com/2015/03/20943392.jpg?w=318" class="alignnone size-medium wp-image-122" src="https://andrewmagerman.files.wordpress.com/2015/03/20943392.jpg?w=229&#038;h=300" alt="20943392" width="229" height="300" srcset="https://andrewmagerman.files.wordpress.com/2015/03/20943392.jpg?w=229&amp;h=300 229w, https://andrewmagerman.files.wordpress.com/2015/03/20943392.jpg?w=114&amp;h=150 114w, https://andrewmagerman.files.wordpress.com/2015/03/20943392.jpg 318w" sizes="(max-width: 229px) 100vw, 229px" /></a></p>
  564. <p>I&#8217;d like to share one bit of code which I found elegant: looping through an array:</p>
  565. <pre class="brush: jscript; title: ; notranslate">
  566. var myArray = ['blue','green','orange','red'];
  567.  
  568. var counter = myArray.length;
  569.  
  570. while (counter--) {
  571.    console.log(myArray[counter]);
  572. }
  573. </pre>
  574. <p>It relies on the fact that integer values that are not 0 or -0 are &#8216;truthy&#8217;.</p><br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andrewmagerman.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andrewmagerman.wordpress.com/121/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=blog.magerman.com&#038;blog=66292674&#038;post=121&#038;subd=andrewmagerman&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
  575. <wfw:commentRss>https://blog.magerman.com/2015/03/16/loop-elegantly-through-a-javascript-array/feed/</wfw:commentRss>
  576. <slash:comments>2</slash:comments>
  577. <media:thumbnail url="https://andrewmagerman.files.wordpress.com/2015/03/20943392.jpg" />
  578. <media:content url="http://andrewmagerman.files.wordpress.com/2015/03/20943392.jpg" medium="image">
  579. <media:title type="html">20943392</media:title>
  580. </media:content>
  581.  
  582. <media:content url="http://2.gravatar.com/avatar/2390fa3108fe3a63ceafb79cd67452c0?s=96&#38;d=identicon&#38;r=G" medium="image">
  583. <media:title type="html">andrewmagerman</media:title>
  584. </media:content>
  585.  
  586. <media:content url="http://ir-na.amazon-adsystem.com/e/ir?t=&#038;l=as2&#038;o=1&#038;a=1449342884" medium="image" />
  587.  
  588. <media:content url="http://andrewmagerman.files.wordpress.com/2015/03/20943392.jpg?w=229" medium="image">
  589. <media:title type="html">20943392</media:title>
  590. </media:content>
  591. </item>
  592. </channel>
  593. </rss>
  594.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//blog.magerman.com/feed/

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda