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://lostinxpages.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>Lost in XPages, Soon to be Found</title>
  13. <atom:link href="https://lostinxpages.com/feed/" rel="self" type="application/rss+xml" />
  14. <link>https://lostinxpages.com</link>
  15. <description>An exploration of IBM Notes Xpages development</description>
  16. <lastBuildDate>Tue, 26 Jun 2018 01:01:49 +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='lostinxpages.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
  22. <image>
  23. <url>https://s0.wp.com/i/buttonw-com.png</url>
  24. <title>Lost in XPages, Soon to be Found</title>
  25. <link>https://lostinxpages.com</link>
  26. </image>
  27. <atom:link rel="search" type="application/opensearchdescription+xml" href="https://lostinxpages.com/osd.xml" title="Lost in XPages, Soon to be Found" />
  28. <atom:link rel='hub' href='https://lostinxpages.com/?pushpress=hub'/>
  29. <item>
  30. <title>Get excited about learning all over again! #IBMThink #IBMChampion</title>
  31. <link>https://lostinxpages.com/2018/02/05/get-excited-about-learning-all-over-again-ibmthink-ibmchampion/</link>
  32. <comments>https://lostinxpages.com/2018/02/05/get-excited-about-learning-all-over-again-ibmthink-ibmchampion/#respond</comments>
  33. <pubDate>Mon, 05 Feb 2018 23:37:28 +0000</pubDate>
  34. <dc:creator><![CDATA[David Navarre]]></dc:creator>
  35. <category><![CDATA[Conferences]]></category>
  36. <category><![CDATA[IBM Champion]]></category>
  37. <category><![CDATA[IBM Think]]></category>
  38. <category><![CDATA[John Jardin]]></category>
  39.  
  40. <guid isPermaLink="false">http://lostinxpages.com/?p=611</guid>
  41. <description><![CDATA[Do you remember when learning was exciting? If it isn&#8217;t anymore, you need to start listening to John Jardin. He&#8217;s got a session coming up at IBM Think and the excitement explodes from his blog. If you haven&#8217;t registered yet, DO IT NOW! See you in Las Vegas, March 19-22. Read about John&#8217;s session &#8212; [&#8230;]]]></description>
  42. <content:encoded><![CDATA[<p>Do you remember when learning was exciting? If it isn&#8217;t anymore, you need to start listening to John Jardin. He&#8217;s got a session coming up at IBM Think and the excitement explodes from his blog. If you haven&#8217;t <a href="https://www.ibm.com/events/think/register/">registered yet, DO IT NOW</a>!</p>
  43. <p>See you in Las Vegas, March 19-22.</p>
  44. <p>Read about John&#8217;s session &#8212; <a href="http://bleedingcode.com/will-presenting-ibm-think-las-vegas/" rel="nofollow">http://bleedingcode.com/will-presenting-ibm-think-las-vegas/</a></p>
  45. <p>p.s. Ask me for a discount code!</p>
  46. ]]></content:encoded>
  47. <wfw:commentRss>https://lostinxpages.com/2018/02/05/get-excited-about-learning-all-over-again-ibmthink-ibmchampion/feed/</wfw:commentRss>
  48. <slash:comments>0</slash:comments>
  49. <media:content url="https://1.gravatar.com/avatar/deb5781b7343da77e1203b1312a9dbc0?s=96&#38;d=identicon&#38;r=G" medium="image">
  50. <media:title type="html">habap</media:title>
  51. </media:content>
  52. </item>
  53. <item>
  54. <title>Proud to be an #IBMChampion</title>
  55. <link>https://lostinxpages.com/2018/01/18/proud-to-be-an-ibmchampion/</link>
  56. <comments>https://lostinxpages.com/2018/01/18/proud-to-be-an-ibmchampion/#comments</comments>
  57. <pubDate>Thu, 18 Jan 2018 20:34:56 +0000</pubDate>
  58. <dc:creator><![CDATA[David Navarre]]></dc:creator>
  59. <category><![CDATA[Conferences]]></category>
  60. <category><![CDATA[IBM Champion]]></category>
  61. <category><![CDATA[Howard Greenberg]]></category>
  62. <category><![CDATA[Karaoke]]></category>
  63. <category><![CDATA[Kathy Brown]]></category>
  64. <category><![CDATA[Mark Roden]]></category>
  65. <category><![CDATA[Miljenko Grgich]]></category>
  66. <category><![CDATA[MWLUG]]></category>
  67. <category><![CDATA[Nerd GIrls]]></category>
  68. <category><![CDATA[Richard Moy]]></category>
  69. <category><![CDATA[Stack Overflow]]></category>
  70. <category><![CDATA[Stu Shelton]]></category>
  71.  
  72. <guid isPermaLink="false">http://lostinxpages.com/?p=609</guid>
  73. <description><![CDATA[In one of the many jobs that I held, I remember someone telling me that they weren’t sharing knowledge of something because being the only person who knew that gave them job security. I’ve always felt that was foolish. If you’re the only person who knows something, you get stuck doing that same stupid, repetitive [&#8230;]]]></description>
  74. <content:encoded><![CDATA[<p>In one of the many jobs that I held, I remember someone telling me that they weren’t sharing knowledge of something because being the only person who knew that gave them job security. I’ve always felt that was foolish. If you’re the only person who knows something, you get stuck doing that same stupid, repetitive task whenever it needs doing. I can think of nothing more boring for a developer than hoarding knowledge. I don’t ever want to have to do the same thing twice – unless doing it the second time is showing someone else how to do it or demonstrating the way things “used to get done” before I automated the task.</p>
  75. <p>So, it’s no surprise that I’ve always wanted to share whatever knowledge I’ve acquired. Sometimes, the knowledge I’ve got to share is so esoteric that people’s eyes glaze over and they ask me to stop talking. (Like the time I was about to talk for 30 minutes about Miljenko Grgich’s life story and how that related to the wine I’d poured, when my best man, Stu Shelton intervened…) Fortunately, in the IBM ICS community, among committed “Lotus” Notes professionals, any short or long blog post, knowledge sharing session or roundtables veritably demands the sharing of esoterica.</p>
  76. <p>Now, here’s the thing. It’s not only encouraged – it is REWARDED.</p>
  77. <p>I really wasn’t good at sharing outside my own work groups until about 2013. I was at Lotusphere (whatever it was called that year) and Marky Roden saw me singing karaoke. As horrid a singer as I am, I believe his thinking had to be ‘anyone who can risk that kind of humiliation can be a conference speaker’. He’d seen me answering questions on Stack Overflow (I’d gotten over a few hundred reputation points and he was shocked that he didn’t know who I was – no one did!) So, he told me I needed to become a speaker.</p>
  78. <p>I’ve worked on that, but not made the breakthrough to the big time. I’ve blogged over the years, helped out with the DC Lotus Users Group (presented once!), participated in more IBM calls/sessions and gotten very involved in MWLUG. I even was on a panel at Connect 2017, talking to executives about technology trends. Then, when Richard Moy asked, I jumped at the chance to be the local host for MWLUG 2017, here in Alexandria, VA.</p>
  79. <p>Nonetheless, I still have felt like I wasn’t doing all that much. I was living with <a href="https://www.slideshare.net/jlstevenson/nerd-girls-present-the-imposter-syndrome">The Imposter Syndrome</a>. So, when time for IBM Champion nominations came round, I would nominate a few people and then cringe at the idea of nominating myself. I’d been nominated by others, but couldn’t get myself to fill out the paperwork. Howard Greenberg was the first to push me toward this. In 2016, Kathy Brown nominated me and pushed me to nominate myself. I wilted when looking at the paperwork, even though it was something I really wanted.</p>
  80. <p>This year, I finally filled out the paperwork, to go with nominations from a few community members and, to my shock, I didn’t need to write a “it was an honor to be nominated” speech while talking about the great stable of Champions out there. I’m swollen with pride. I was named an IBM Champion.</p>
  81. <p>I’ll get some swag. I’ll get a chance to participate more fully in our community. I’ll have a chance for some recognition at the various conferences. I’m excited about it and vowing to put even more effort into our community.</p>
  82. <p>I want to thank everyone who has encouraged me along the way and those who played a particular role in this process. I hope that I can be your humble and obedient servant, sharing knowledge and helping build our community.</p>
  83. ]]></content:encoded>
  84. <wfw:commentRss>https://lostinxpages.com/2018/01/18/proud-to-be-an-ibmchampion/feed/</wfw:commentRss>
  85. <slash:comments>2</slash:comments>
  86. <media:content url="https://1.gravatar.com/avatar/deb5781b7343da77e1203b1312a9dbc0?s=96&#38;d=identicon&#38;r=G" medium="image">
  87. <media:title type="html">habap</media:title>
  88. </media:content>
  89. </item>
  90. <item>
  91. <title>A more direct way of creating an Outlook mail item from the Notes client</title>
  92. <link>https://lostinxpages.com/2017/11/01/a-more-direct-way-of-creating-an-outlook-mail-item-from-the-notes-client/</link>
  93. <comments>https://lostinxpages.com/2017/11/01/a-more-direct-way-of-creating-an-outlook-mail-item-from-the-notes-client/#respond</comments>
  94. <pubDate>Wed, 01 Nov 2017 14:54:21 +0000</pubDate>
  95. <dc:creator><![CDATA[David Navarre]]></dc:creator>
  96. <category><![CDATA[Old Notes]]></category>
  97. <category><![CDATA[Utilities]]></category>
  98. <category><![CDATA[LotusScript]]></category>
  99. <category><![CDATA[MailItem]]></category>
  100. <category><![CDATA[Outlook]]></category>
  101. <category><![CDATA[Tami Fries]]></category>
  102.  
  103. <guid isPermaLink="false">http://lostinxpages.com/?p=570</guid>
  104. <description><![CDATA[The best thing about being in software development is learning something new every day. The most humiliating thing in software development is learning that you did something the hard way when there&#8217;s a far easier way to do it. That happens most days as well! So, I was explaining to my manager, Tami Fries, and [&#8230;]]]></description>
  105. <content:encoded><![CDATA[<p>The best thing about being in software development is learning something new every day. The most humiliating thing in software development is learning that you did something the hard way when there&#8217;s a far easier way to do it. That happens most days as well!</p>
  106. <p>So, I was explaining to my manager, Tami Fries, and one of our business users that <a href="https://lostinxpages.com/2017/06/02/progammatically-opening-a-mailto-link-from-the-notes-client/">my method for opening an Outlook message</a> for the end users was a little sloppy, in that it would open two browser tabs (or windows, depending on configuration) before opening the Outlook message. I wondered in the back of my mind if it had to be done that way. They agreed that my helpful message on one of the tabs and titling the tab &#8216;Close Me&#8217; would probably not generate any confusion. Nonetheless, I wondered.</p>
  107. <p>I remembered vaguely that when I was creating Excel spreadsheets from Notes and silently emailing them in the background from the FAA to Office Depot, that I had to add an extra line of code to make Excel <strong>not</strong> appear as an active window. So, I looked at the documentation again and found that all I had to do was use the <a href="https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/mailitem-display-method-outlook">Display method of the MailItem object</a>.</p>
  108. <p>Here&#8217;s the code fragment that generates the Outlook message and <em>displays</em> it for further editing. (Note that I used br without the angled brackets in the HTML, since it was reading the HTML and inserting blank lines into the code snippet, but you&#8217;ll want those when you drop this into your LotusScript.)</p>
  109. <pre class="brush: jscript; title: ; notranslate">...
  110. Dim outlook As Variant
  111. Dim message As Variant
  112. Dim itemType As Integer
  113.  
  114. Set outlook = CreateObject(&quot;Outlook.Application&quot;)
  115.  
  116. If ( outlook Is Nothing ) Then
  117. Call ws.Urlopen(shareViaMailToURL(subject, doc))
  118. Else
  119. body = &quot;Here is a link to &quot; &amp; subject
  120. body = &quot;Your approval has been requested for changes made using &quot; &amp; changeOrderNumber (0) &amp; &quot; in &quot; &amp; thisdb.Title
  121. body = body &amp; &quot;br br&quot;// replace with the angled bracketed HTML for two line breaks
  122. body = body &amp; &quot;Please review these changes and approve, provide comments, or request more time to review within five business days of this notification. Otherwise, the change will be considered approved as per DAI policy.&quot;
  123. body = body &amp; &quot;br br&quot;// replace with the angled bracketed HTML for two line breaks
  124. body = body &amp; &quot;The pending change approval form and links to draft documents can be found here: &quot;
  125. body = body &amp; &quot;br br&quot;// replace with the angled bracketed HTML for two line breaks
  126. body = body &amp; &quot;Notes:///&quot; &amp; thisdb.ReplicaID &amp; &quot;/0/&quot; &amp; doc.UniversalID
  127.  
  128. ' 0 is mail item '
  129. itemType = 0
  130. Set message = outlook.CreateItem(itemType)
  131. message.Subject = subject
  132. message.HTMLBody = body
  133. message.Display
  134. End If
  135. ...</pre>
  136. <p>The shareViaMailToURL is intended to run if the user doesn&#8217;t have Outlook, so that it will use the previously supplied code to open the mailto URL using the code in that <a href="https://lostinxpages.com/2017/06/02/progammatically-opening-a-mailto-link-from-the-notes-client/">earlier post</a>.</p>
  137. <p>So incredibly simple in either method.</p>
  138. ]]></content:encoded>
  139. <wfw:commentRss>https://lostinxpages.com/2017/11/01/a-more-direct-way-of-creating-an-outlook-mail-item-from-the-notes-client/feed/</wfw:commentRss>
  140. <slash:comments>0</slash:comments>
  141. <media:content url="https://1.gravatar.com/avatar/deb5781b7343da77e1203b1312a9dbc0?s=96&#38;d=identicon&#38;r=G" medium="image">
  142. <media:title type="html">habap</media:title>
  143. </media:content>
  144. </item>
  145. <item>
  146. <title>Sending an automated mail using Outlook from a Notes agent</title>
  147. <link>https://lostinxpages.com/2017/09/12/sending-an-automated-mail-using-outlook-from-a-notes-agent/</link>
  148. <comments>https://lostinxpages.com/2017/09/12/sending-an-automated-mail-using-outlook-from-a-notes-agent/#comments</comments>
  149. <pubDate>Tue, 12 Sep 2017 23:14:45 +0000</pubDate>
  150. <dc:creator><![CDATA[David Navarre]]></dc:creator>
  151. <category><![CDATA[Old Notes]]></category>
  152. <category><![CDATA[Utilities]]></category>
  153. <category><![CDATA[LotusScript]]></category>
  154. <category><![CDATA[MailItem]]></category>
  155. <category><![CDATA[OLE]]></category>
  156. <category><![CDATA[Outlook]]></category>
  157. <category><![CDATA[Stack Overflow]]></category>
  158.  
  159. <guid isPermaLink="false">http://lostinxpages.com/?p=563</guid>
  160. <description><![CDATA[One of the greatest hurdles we&#8217;ve had in our transition from being a Notes mail shop to an Outlook mail shop remaining a Notes application shop is automated emails. When someone clicks a button to approve a document in a workflow, I want the system to quietly notify the pertinent parties without bothering the user. [&#8230;]]]></description>
  161. <content:encoded><![CDATA[<p>One of the greatest hurdles we&#8217;ve had in our transition from being a Notes mail shop to an Outlook mail shop remaining a Notes application shop is automated emails. When someone clicks a button to approve a document in a workflow, I want the system to quietly notify the pertinent parties without bothering the user.</p>
  162. <p>Before I arrived, none of our applications did that. Every time someone wanted an email to accompany the request for approval, an email was opened in the Notes client using formula language. The code did assign the recipients and add text with a doclink, but the user had to click &#8216;Send&#8217; for the message to go onward. This did allow them to add explanatory text and choose to route the message to a different approver if someone was not available, so it did have advantages. However, not every message ought to sent that way and we can keep the user inside our application by popping up dialogs to customize or select different recipients, or&#8230; whatever flexibility we&#8217;d like to provide.</p>
  163. <p>So, a number of the applications I&#8217;ve designed, or modified from the original, send notices via Notes mail, generated quietly in the background by LotusScript. 2016 rolls around and our organization makes a strategic move away from Notes mail and into Outlook. I spent a year thinking there was no way for me to keep those notifications without dancing around about Notes mail files and replication. The other day, I wondered if I could use OLE to create the Outlook messages and send them without the user needed to intervene. Shockingly, it didn&#8217;t even take me a day to figure out how to do it.</p>
  164. <p>The hardest part was figuring out that passing in 0 for the item type needed to specifically be an <strong>integer</strong>, not just a zero. If figured this out when I created a task using 3. Since it understood that 3 was an integer, I just created itemType as an integer and then 0 really was 0. (Got the clue from <a href="https://stackoverflow.com/questions/19551883/what-are-all-the-properties-that-i-can-assign-to-with-outlook-with-vba">someone&#8217;s commented code on Stack Overflow</a>, of course)</p>
  165. <p>Here&#8217;s the list of Outlook items you can create, with links so you can examine the events, properties and methods:</p>
  166. <div class="responsiveTableWrapper">
  167. <table>
  168. <thead>
  169. <tr>
  170. <th><strong>Name</strong></th>
  171. <th><strong>Value</strong></th>
  172. <th><strong>Description</strong></th>
  173. </tr>
  174. </thead>
  175. <tbody>
  176. <tr>
  177. <td><strong>olAppointmentItem</strong></td>
  178. <td>1</td>
  179. <td>An <strong><a href="https://msdn.microsoft.com/VBA/Outlook-VBA/articles/appointmentitem-object-outlook">AppointmentItem</a></strong> object.</td>
  180. </tr>
  181. <tr>
  182. <td><strong>olContactItem</strong></td>
  183. <td>2</td>
  184. <td>A <strong><a href="https://msdn.microsoft.com/VBA/Outlook-VBA/articles/contactitem-object-outlook">ContactItem</a></strong> object.</td>
  185. </tr>
  186. <tr>
  187. <td><strong>olDistributionListItem</strong></td>
  188. <td>7</td>
  189. <td>A <strong><a href="https://msdn.microsoft.com/VBA/Outlook-VBA/articles/distlistitem-object-outlook">DistListItem</a></strong> object.</td>
  190. </tr>
  191. <tr>
  192. <td><strong>olJournalItem</strong></td>
  193. <td>4</td>
  194. <td>A <strong><a href="https://msdn.microsoft.com/VBA/Outlook-VBA/articles/journalitem-object-outlook">JournalItem</a></strong> object.</td>
  195. </tr>
  196. <tr>
  197. <td><strong>olMailItem</strong></td>
  198. <td>0</td>
  199. <td>A <strong><a href="https://msdn.microsoft.com/VBA/Outlook-VBA/articles/mailitem-object-outlook">MailItem</a></strong> object.</td>
  200. </tr>
  201. <tr>
  202. <td><strong>olNoteItem</strong></td>
  203. <td>5</td>
  204. <td>A <strong><a href="https://msdn.microsoft.com/VBA/Outlook-VBA/articles/noteitem-object-outlook">NoteItem</a></strong> object.</td>
  205. </tr>
  206. <tr>
  207. <td><strong>olPostItem</strong></td>
  208. <td>6</td>
  209. <td>A <strong><a href="https://msdn.microsoft.com/VBA/Outlook-VBA/articles/postitem-object-outlook">PostItem</a></strong> object.</td>
  210. </tr>
  211. <tr>
  212. <td><strong>olTaskItem</strong></td>
  213. <td>3</td>
  214. <td>A <strong><a href="https://msdn.microsoft.com/VBA/Outlook-VBA/articles/taskitem-object-outlook">TaskItem</a></strong> object.</td>
  215. </tr>
  216. </tbody>
  217. </table>
  218. </div>
  219. <pre class="brush: jscript; title: ; notranslate">%REM
  220. Agent Send Outlook Mail
  221. Created Sep 12, 2017 by David Navarre
  222. Description: This Agent creates and sends an Outlook mail message in the background
  223. %END REM
  224. Option Public
  225. Option Declare
  226.  
  227. Sub Initialize
  228. Dim outlook As Variant
  229. Dim message As Variant
  230. Dim itemType As Integer
  231. Dim reason As String
  232.  
  233. On Error GoTo errorhandler
  234.  
  235. Set outlook = CreateObject(&quot;Outlook.Application&quot;)
  236. ' 0 is mail item '
  237. itemType = 0
  238. Set message = outlook.CreateItem(itemType)
  239. message.To = &quot;[email protected]&quot;
  240. message.Subject = &quot;This is my test&quot;
  241. message.HTMLBody = &quot;&lt;b&gt;Body bolded&lt;/b&gt; and some not&quot;
  242. message.Send
  243.  
  244. exiting:
  245. Exit Sub
  246. errorhandler:' report all errors in a messagebox '
  247. reason = &quot;Error #&quot; &amp; CStr (Err) &amp; &quot; (&quot; &amp; Error &amp; &quot;) on line &quot; &amp; CStr (Erl)
  248. MessageBox reason, 16, &quot;Error&quot;
  249. Resume exiting
  250. End Sub</pre>
  251. <p>The most amusing thing to me is that I got my initial clue <a href="http://www.vbforums.com/showthread.php?437617-Using-MS-Outlook-to-Send-email-programmatically">from a post made way back in 2006</a>. Sometimes, I feel like I&#8217;m starting all over again. I guess that&#8217;s a good thing, because learning new stuff was always fun (this was too!) and not as intimidating as it sometimes seems when I think about having to learn something new. It&#8217;s been nice to be in the upper branches of the knowledge tree, but the truth is that what always separated me from other folks was not what I already knew, but how fast I could learn something new.</p>
  252. ]]></content:encoded>
  253. <wfw:commentRss>https://lostinxpages.com/2017/09/12/sending-an-automated-mail-using-outlook-from-a-notes-agent/feed/</wfw:commentRss>
  254. <slash:comments>4</slash:comments>
  255. <media:content url="https://1.gravatar.com/avatar/deb5781b7343da77e1203b1312a9dbc0?s=96&#38;d=identicon&#38;r=G" medium="image">
  256. <media:title type="html">habap</media:title>
  257. </media:content>
  258. </item>
  259. <item>
  260. <title>Breweries and tap rooms for #MWLUG</title>
  261. <link>https://lostinxpages.com/2017/07/29/breweries-and-tap-rooms-for-mwlug/</link>
  262. <comments>https://lostinxpages.com/2017/07/29/breweries-and-tap-rooms-for-mwlug/#respond</comments>
  263. <pubDate>Sat, 29 Jul 2017 16:49:42 +0000</pubDate>
  264. <dc:creator><![CDATA[David Navarre]]></dc:creator>
  265. <category><![CDATA[Conferences]]></category>
  266. <category><![CDATA[Beer]]></category>
  267. <category><![CDATA[MWLUG]]></category>
  268.  
  269. <guid isPermaLink="false">http://lostinxpages.com/?p=561</guid>
  270. <description><![CDATA[OK, so we&#8217;ve discussed restaurants nearby, but MWLUG includes so many beer lovers that I know some of you will be eager to venture further afield for interesting beer. None of these are in walking distance. What we already know In Friday&#8217;s post, I mentioned the Cap City Brewing Company in Shirlington as a viable [&#8230;]]]></description>
  271. <content:encoded><![CDATA[<p>OK, so <a href="https://lostinxpages.com/2017/07/27/so-where-can-i-go-for-dinner-near-mwlug/">we&#8217;ve discussed restaurants nearby</a>, but MWLUG includes so many beer lovers that I know some of you will be eager to venture further afield for interesting beer. None of these are in walking distance.</p>
  272. <h4>What we already know</h4>
  273. <p>In Friday&#8217;s post, I mentioned the <a href="https://www.yelp.com/biz/capitol-city-brewing-company-arlington">Cap City Brewing Company</a> in Shirlington as a viable dinner option in the midst of a good restaurant scene. Shirlington is either a short Uber/Lyft ride from the hotel or just across the footbridge out the back of Wednesday night&#8217;s brewery tour at <a href="https://www.yelp.com/biz/new-district-brewing-arlington?osq=brewpub">New District Brewing</a>.</p>
  274. <h4>Where everyone knows your name</h4>
  275. <p>OK, at <a href="https://www.yelp.com/biz/fat-city-kitchen-alexandria">Fat City Kitchen</a>, they won&#8217;t already know YOUR name, but they know mine. There are a dozen taps, mostly microbrews (the others are Guiness and Yuengling, IIRC) and probably 80 other beers by the bottle or can. Matt can mix anything you can think of (I go for the &#8216;City 75&#8217;, which is similar to the French 75, while Melissa digs the Grapefruit Collins), Farrah and the rest of the staff keep you smiling with full glasses. The food is excellent and we love about half a mile from it.</p>
  276. <h4>Where I can get some beers to bring to the hotel</h4>
  277. <p>Our favorite wine shop, <a href="http://unwinedva.com/products/beer.htm">Unwined</a>, is just across the highway off King Street. Besides the excellent wine selection, they have a large selection of beers, including a growler filling station. Yes, bring your own growler in and fill it up, or buy a growler there. According to the link , they&#8217;ve got a saison and 3 IPAs on tap right now. Another place where mentioning that you know Dave and Melissa will make them smile!</p>
  278. <h4>Where else could we have gone for a brewery tour</h4>
  279. <p>Another place that&#8217;s near my house (stumbling distance?) is <a href="https://www.yelp.com/biz/port-city-brewing-company-alexandria?osq=brewpub">Port City Brewing Company</a>. Way back in the day, Alexandria was actually nicknamed &#8220;the Port City&#8221; because so much trade came in over it&#8217;s docks. Then the 19th century started&#8230;. The brewery was named <a href="https://www.washingtonpost.com/news/going-out-guide/wp/2015/09/28/its-official-port-city-is-the-best-small-brewery-in-america/?utm_term=.bc530078f6fd">Small Brewery of the Year in 2015</a>, so likely worthy of a pilgrimage. I love their Porter, though it&#8217;s not exactly an August beer. The tap list is less heavily weighted towards IPAs than it was a few years ago, but <a href="http://www.portcitybrewing.com/the-taplist/">they&#8217;ve got 11 beers</a> on it.</p>
  280. <h4>Arlington, please!</h4>
  281. <p>Some of the fellows that I&#8217;ve played softball and baseball with are into beer as much as I&#8217;m into wine. They had a happy hour at <a href="https://www.yelp.com/biz/crafthouse-arlington?osq=brewpub">Crafthouse</a> over in Arlington and the draft beer selection was very nice.</p>
  282. <h4>Maybe not yet</h4>
  283. <p>Earlier this year, <a href="https://www.yelp.com/biz/portner-brewhouse-alexandria?osq=brewpub">Portner Brewhouse</a> opened about a mile from our house. We went during the &#8216;soft opening&#8217; and loved the food. The brewery inside seems to have been a gimmick or something that they thought &#8220;couldn&#8217;t be that hard&#8221;. Sitting next to a fellow who sells brewing equipment, he let us know that what he could see wasn&#8217;t the top grade equipment. No, that&#8217;s too polite. He said that he thought they did it on the cheap. He heartily recommended New District, so we&#8217;re on the right path for Wednesday night.</p>
  284. <h4>Final thoughts</h4>
  285. <p>Of course, there are other options further afield, but I generally haven&#8217;t been there, so wouldn&#8217;t have useful input. The best beer spot in the DC area closed recently. The Brickskellar in Dupont Circle had hundreds of beers on their menu and they even had live music on the weekends. Feel free to questions about certain parts of town, as I&#8217;ve been here for 27 years and used to go everywhere in Arlington, Alexandria and DC.</p>
  286. <p>I&#8217;ll be out of town before MWLUG, returning on Monday night. If you&#8217;re interested in some assistance with getting beer and wine from Unwined or beer from Port City (they do have Sixtels, which are only 41 pints), I may be able to help. Otherwise, or for evening adventures, getting to any of these should be easy via Uber, Lyft, or some other conveyance.</p>
  287. ]]></content:encoded>
  288. <wfw:commentRss>https://lostinxpages.com/2017/07/29/breweries-and-tap-rooms-for-mwlug/feed/</wfw:commentRss>
  289. <slash:comments>0</slash:comments>
  290. <media:content url="https://1.gravatar.com/avatar/deb5781b7343da77e1203b1312a9dbc0?s=96&#38;d=identicon&#38;r=G" medium="image">
  291. <media:title type="html">habap</media:title>
  292. </media:content>
  293. </item>
  294. <item>
  295. <title>So where can I go for dinner near #MWLUG?</title>
  296. <link>https://lostinxpages.com/2017/07/27/so-where-can-i-go-for-dinner-near-mwlug/</link>
  297. <comments>https://lostinxpages.com/2017/07/27/so-where-can-i-go-for-dinner-near-mwlug/#comments</comments>
  298. <pubDate>Thu, 27 Jul 2017 22:02:38 +0000</pubDate>
  299. <dc:creator><![CDATA[David Navarre]]></dc:creator>
  300. <category><![CDATA[Conferences]]></category>
  301. <category><![CDATA[MWLUG]]></category>
  302.  
  303. <guid isPermaLink="false">http://lostinxpages.com/?p=559</guid>
  304. <description><![CDATA[For MWLUG 2017, we&#8217;re in my lovely city of Alexandria, Virginia, just outside Washington, DC. Some folks will come early, some will stay late, some will choose to dine out while they&#8217;re here. So, I wanted to offer some mild advice to make your search for a good meal easier. Man, I want it to [&#8230;]]]></description>
  305. <content:encoded><![CDATA[<p>For MWLUG 2017, we&#8217;re in my lovely city of Alexandria, Virginia, just outside Washington, DC. Some folks will come early, some will stay late, some will choose to dine out while they&#8217;re here. So, I wanted to offer some mild advice to make your search for a good meal easier.</p>
  306. <h4>Man, I want it to be close</h4>
  307. <p>Well, the easiest is right in the hotel. I&#8217;ve heard good things about <a href="https://www.yelp.com/biz/finn-and-porter-restaurant-alexandria">Finn &amp; Porter</a>, but I&#8217;ve not eaten there. I&#8217;m sure everyone will stop in for a drink, so while you consider your options elsewhere, check the menu. Remember to tip your bartenders and waitresses well! The next closest is one I&#8217;ve been to very often. Well, a few times a year. <a href="https://www.yelp.com/biz/clydes-at-mark-center-alexandria-6">Clyde&#8217;s</a> is on the way home from my mother-in-law&#8217;s house, so we have stopped for a drink on the way home occasionally. The food is outstanding. If you like oysters, they always have a good list. There are good wines available and the bartenders mix up some fine cocktails. You can walk to and from Clyde&#8217;s (0.4 miles).</p>
  308. <p><strong>I really wish I hadn&#8217;t left home</strong></p>
  309. <p>Yes, there is a <a href="https://www.yelp.com/biz/tgi-fridays-alexandria-12?osq=Restaurants">TGI Friday&#8217;s</a> and I have heard they do wear the appropriate amount of flair. It&#8217;s a mile, so you could walk.</p>
  310. <h4>Beer, beer and more beer</h4>
  311. <p>I really like <a href="https://www.yelp.com/biz/capitol-city-brewing-company-arlington?osq=Restaurants">Cap City Brewing</a> in Shirlington. Get yourself some pretzels and enjoy a few cold ones. Cap City opened early on in the micro-brew era, so it may not be &#8216;different&#8217; enough if that&#8217;s important to you. On the other hand, longevity does indicate a certain level of quality. Take an Uber over to Shirlington, or wander over after our time at <a href="http://www.newdistrictbrewing.com/">New District Brewing</a>. (Half a mile from New District, 10 minute drive from the hotel to Shirlington).</p>
  312. <h4><strong>I want to open a cheese shop</strong></h4>
  313. <p>Nearby in Shirlington, <a href="https://www.yelp.com/biz/cheesetique-arlington-2?osq=Restaurants">Cheesetique</a> started as a cheese shop that had some wines and snacks. Then, they morphed into a cheese and wine shop where you could have a meal. Now, it is really a good restaurant with amazing cheese and pretty good wine.</p>
  314. <h4>Everything seems to be headed to Shirlington, but I want something different</h4>
  315. <p>If you&#8217;re seeking something other than beer and wine as the draw, Shirlington has many restaurants these days. <a href="https://www.yelp.com/biz/busboys-and-poets-arlington-2">Busboys &amp; Poets</a> will always fill you up with delicious comfort food and also has some literature or might even have a poetry reading. <a href="https://www.yelp.com/biz/carlyle-arlington?osq=Restaurants">Carlyle</a> is an old standby &#8211; a little pricey for me. We&#8217;ve loved eating at every location of <a href="https://www.cafepizzaiolo.com/">Cafe Pizzaiolo</a>, including the one that they had right in our neighborhood for a few years. <a href="https://www.yelp.com/biz/guapos-restaurant-arlington?osq=Restaurants">Guapo&#8217;s</a> is great for Mexican food. There are a bunch of other restaurants, so it&#8217;s a good area to choose &#8212; keeping in mind it is just a half mile from Wednesday night&#8217;s brewery.</p>
  316. <h4>It has to be French, bien sur!</h4>
  317. <p>Two choices if time, distance and money aren&#8217;t real priorities: <a href="https://www.yelp.com/biz/le-diplomate-washington?osq=french">Le Diplomate</a> in DC or <a href="https://www.yelp.com/biz/la-c%C3%B4te-d-or-caf%C3%A9-arlington-3?osq=french">La Cote d&#8217;Or</a> in Falls Church. Great for me, because the wine lists are very good (longer and more expensive downtown, shorter and more reasonable in Fall Church) and the food is unbeatable.</p>
  318. <h4>Other ideas</h4>
  319. <p>You could head to Crystal City or Pentagon Row, which are near the Crystal City and Pentagon Row metro stops. Another good choice is the Clarendon areas in Arlington, which is very walkable once you&#8217;re there. Old Town Alexandria has dozens of restaurants and true nightlife.</p>
  320. <p>Hope these ideas help!</p>
  321. ]]></content:encoded>
  322. <wfw:commentRss>https://lostinxpages.com/2017/07/27/so-where-can-i-go-for-dinner-near-mwlug/feed/</wfw:commentRss>
  323. <slash:comments>1</slash:comments>
  324. <media:content url="https://1.gravatar.com/avatar/deb5781b7343da77e1203b1312a9dbc0?s=96&#38;d=identicon&#38;r=G" medium="image">
  325. <media:title type="html">habap</media:title>
  326. </media:content>
  327. </item>
  328. <item>
  329. <title>Creating a meeting notice in Outlook from the Notes client</title>
  330. <link>https://lostinxpages.com/2017/06/23/creating-a-meeting-notice-in-outlook-from-the-notes-client/</link>
  331. <comments>https://lostinxpages.com/2017/06/23/creating-a-meeting-notice-in-outlook-from-the-notes-client/#respond</comments>
  332. <pubDate>Fri, 23 Jun 2017 17:23:51 +0000</pubDate>
  333. <dc:creator><![CDATA[David Navarre]]></dc:creator>
  334. <category><![CDATA[Old Notes]]></category>
  335. <category><![CDATA[Utilities]]></category>
  336. <category><![CDATA[calendar invite]]></category>
  337. <category><![CDATA[calendaring]]></category>
  338. <category><![CDATA[iCal]]></category>
  339. <category><![CDATA[LotusScript]]></category>
  340. <category><![CDATA[meeting notice]]></category>
  341. <category><![CDATA[Outlook]]></category>
  342.  
  343. <guid isPermaLink="false">http://lostinxpages.com/?p=544</guid>
  344. <description><![CDATA[Another task in our migration to Outlook as the mail client is creating Outlook calendar entries and meeting notices directly from the Notes client. Fortunately, it&#8217;s been two years since I wrote about how to do this in the UI in Notes, so I don&#8217;t feel like that was wasted time. I was exciting to [&#8230;]]]></description>
  345. <content:encoded><![CDATA[<p>Another task in our migration to Outlook as the mail client is creating Outlook calendar entries and meeting notices directly from the Notes client. Fortunately, it&#8217;s been two years since I wrote about <a href="https://lostinxpages.com/2015/01/15/creating-a-meeting-in-the-ui-in-ibmnotes/">how to do this in the UI in Notes</a>, so I don&#8217;t feel like that was wasted time. I was exciting to solve the problem and&#8230; oddly enough, solving this one was fun as well. It helped that creating an iCal entry is far simpler than the gyrations we had to go through to create one in Notes. As noted previously, there  aren&#8217;t a whole lot of required values to generate in order to have an ICS file that you can open in the UI as a meeting notice/calendar invite.</p>
  346. <pre class="brush: jscript; title: ; notranslate">BEGIN:VCALENDAR
  347. BEGIN:VEVENT
  348. DTSTART:20170622T211500
  349. DTEND:20170622T221500
  350. ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=&quot;Required Person/Company&quot;;RSVP=TRUE:mailto:[email protected]
  351. ATTENDEE;ROLE=OPT-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE:mailto:[email protected]
  352. SUMMARY:2017 Q2 QPR: Agribusiness Competitiveness Enhancement via file
  353. UID:AC1804D765C782CD8525814500073F3720170620T104326
  354. END:VEVENT
  355. END:VCALENDAR</pre>
  356. <p><a href="https://lostinxpages.files.wordpress.com/2017/06/sendupdate.jpg"><img data-attachment-id="545" data-permalink="https://lostinxpages.com/2017/06/23/creating-a-meeting-notice-in-outlook-from-the-notes-client/sendupdate/" data-orig-file="https://lostinxpages.files.wordpress.com/2017/06/sendupdate.jpg?w=690" data-orig-size="292,416" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;David Navarre&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1498053614&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="SendUpdate" data-image-description="" data-medium-file="https://lostinxpages.files.wordpress.com/2017/06/sendupdate.jpg?w=690?w=211" data-large-file="https://lostinxpages.files.wordpress.com/2017/06/sendupdate.jpg?w=690?w=292" class="alignright wp-image-545 size-full" src="https://lostinxpages.files.wordpress.com/2017/06/sendupdate.jpg?w=690" alt="" srcset="https://lostinxpages.files.wordpress.com/2017/06/sendupdate.jpg 292w, https://lostinxpages.files.wordpress.com/2017/06/sendupdate.jpg?w=105 105w" sizes="(max-width: 292px) 100vw, 292px"   /></a>Now, keep in mind that this iCal file is a mere fragment. If you sent that file to someone, they get the same behaviour you get &#8212; it thinks they&#8217;re the meeting organizer and doesn&#8217;t save it to their calendar unless they send the &#8216;update&#8217;. The key parameter we leave off is that we don&#8217;t set METHOD, since setting that to PUBLISH or REQUEST proved problematic in the Outlook client. If we leave it off, Outlook will allow us to treat it like a brand new calendar entry we&#8217;ve created, except that the send button will say &#8216;Send Update&#8217;.</p>
  357. <p>So, let&#8217;s review those values in our fragment&#8230;</p>
  358. <h4>Objects</h4>
  359. <p>First, the calendar and event objects are encapsulated. Nothing fancy there.</p>
  360. <pre class="brush: jscript; title: ; notranslate">BEGIN:VCALENDAR
  361. BEGIN:VEVENT
  362. END:VEVENT
  363. END:VCALENDAR</pre>
  364. <h4>Meeting times</h4>
  365. <p>Then we have our start and end times, formatted with date first (YYYYMMDD) then a separator (T) and then the time (HHMMSS). You can include time zone information, but we&#8217;re creating this in Outlook and allowing the UI to finish everything for us. So, if the user wants to change the time zone, they can do that in Outlook.</p>
  366. <pre class="brush: jscript; title: ; notranslate">DTSTART:20170622T211500
  367. DTEND:20170622T221500</pre>
  368. <h4>Attendees</h4>
  369. <p>The one required value for our needs in the attendees is the mailto value. Without that, it won&#8217;t know who to send the invite to and it simply ignores any other item in that list.</p>
  370. <pre class="brush: jscript; title: ; notranslate">ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=&quot;Meeting Chair/Company&quot;;RSVP=TRUE:mailto:[email protected]
  371. ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=&quot;Required Person/Company&quot;;RSVP=TRUE:mailto:[email protected]
  372. ATTENDEE;ROLE=OPT-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE:mailto:[email protected]</pre>
  373. <p>ROLE is not required and can be CHAIR, REQ-PARTICIPANT (required participant), OPT-PARTICIPANT (optional participant) or even NON-PARTICIPANT (for FYI only).</p>
  374. <p>PARTSTAT is not required. There are several values for an attendee in a VEVENT for their participant status, but we&#8217;re only concerned with two. Either &#8220;NEEDS-ACTION&#8221; for attendees that we don&#8217;t know when we create the meeting notice whether they&#8217;ve agreed to attend or &#8220;ACCEPTED&#8221; which we&#8217;d typically only use for the person creating the meeting notice.</p>
  375. <p>CN is, of course, familiar to us as Notes developers, but it applies here to whatever will be displayed as the attendee name. In my experience, Outlook can parse the abbreviated name and display just the attendee&#8217;s common name. That might be our Outlook configuration, but I would assume it&#8217;s common.</p>
  376. <p>RSVP would be either true or false, indicating whether you want a response from the attendee. In my case, we always want it from the attendees, other than the current user.</p>
  377. <h4>Title and description</h4>
  378. <p>I got fooled by this one. In my sample ICS files, I thought there was just an odd carriage return, but the DESCRIPTION value is basically the body or details of the event, while the SUMMARY is what appears in the subject line for the meeting.</p>
  379. <pre class="brush: jscript; title: ; notranslate">SUMMARY:2017 Q2 QPR: Agribusiness Competitiveness Enhancement via file</pre>
  380. <h4>Meeting ID</h4>
  381. <p>I&#8217;m guessing that Outlook computes the unique meeting ID itself, but in my code, I generate from the Notes document&#8217;s unique ID and then, in order to ensure that subsequent meetings concerning the same document get different IDs, I&#8217;m appending a creation time-stamp.</p>
  382. <pre class="brush: jscript; title: ; notranslate">UID:AC1804D765C782CD8525814500073F3720170620T104326</pre>
  383. <p>So, the agent I wrote that generates the new meeting notice is pretty straight-forward. The <a href="https://lostinxpages.com/2017/06/21/getting-email-addresses-from-the-notes-address-book/">getEmailAddress function</a> was described and detailed in a prior blog post and my Utilities script library only provides the logging functions here. Like <a href="https://lostinxpages.com/2017/06/02/progammatically-opening-a-mailto-link-from-the-notes-client/">my mailto agent</a>, this one relies on the creation of a file in the Notes data directory and opening it using a browser.</p>
  384. <h4>The agent</h4>
  385. <p>First, you can look over the main part of the agent&#8230;</p>
  386. <pre class="brush: jscript; title: ; notranslate">%REM
  387. Agent (Send Calendar Invites)
  388. Created Jun 20, 2017 by David Navarre/DAI
  389. Description: This Agent creates a calendar invite, listing participants and optional participants
  390. %END REM
  391. Option Public
  392. Option Declare
  393. Use &quot;Utilities&quot;
  394.  
  395. Dim session As NotesSession
  396. Sub Initialize
  397. Dim ws As New NotesUIWorkspace
  398. ' Dim thisdb As NotesDatabase declared in Utilities script library '
  399. Dim uidoc As NotesUIDocument
  400. Dim qprdoc As NotesDocument
  401. Dim history As NotesRichTextItem
  402. Dim chairName As NotesName
  403. Dim recipientName As NotesName
  404. Dim projectName As Variant
  405. Dim fiscalYearAndQuarter As Variant
  406. Dim participants As Variant
  407. Dim participantsOptional As Variant
  408. Dim subject As String
  409. Dim answer As Variant
  410. Dim reason As String
  411. Dim unid As String
  412. On Error GoTo errorhandler
  413. set session = New NotesSession
  414. Call StartAgentLogging ( session )
  415.  
  416. If ( openAddressBooks () ) Then
  417. agentLog.Logaction(&quot;Address books opened&quot;)
  418. End If
  419.  
  420. Set thisdb = session.CurrentDatabase
  421. Set uidoc = ws.CurrentDocument
  422.  
  423. reason = &quot;This will create a meeting invite for you to send to participants.&quot;
  424. If uidoc.Editmode Then
  425. reason = reason + Chr$(10) + &quot;The QPR will switch to read-only mode.&quot;
  426. reason = reason + Chr$(10) + &quot;If you close and re-open it, you can edit it again.&quot;
  427. End If
  428. reason = reason + Chr$(10) + &quot;Continue?&quot;
  429. answer = ws.Prompt ( PROMPT_YESNO, &quot;Continue?&quot;, reason )
  430. If answer = 0 Then
  431. Exit Sub
  432. End If
  433. If uidoc.Editmode Then
  434. Call uidoc.Save()
  435. uidoc.Editmode = False
  436. Set qprDoc = uidoc.Document
  437. unid = qprDoc.Universalid
  438. Call uidoc.Close(True)
  439. Set qprDoc = thisdb.Getdocumentbyunid(unid)
  440. Set uidoc = ws.Editdocument(False, qprDoc, True)
  441. Else
  442. Set qprDoc = uidoc.Document
  443. End If
  444. Dim fileName As String
  445. Dim dataDirectoryPath As String
  446. Dim url As String
  447. Dim fileNumber As Integer
  448. fileNumber = 1
  449. dataDirectoryPath = session.Getenvironmentstring(&quot;Directory&quot;, True)
  450. fileName = dataDirectoryPath &amp; &quot;\QPRInvite.ics&quot;
  451. Open fileName For Output As fileNumber
  452. Print # fileNumber, {BEGIN:VCALENDAR}
  453. Print # fileNumber, {BEGIN:VEVENT}
  454. Print # fileNumber, {DTSTART:} &amp; getMeetingTime ( &quot;Start&quot;, qprDoc ) '20170620T211500
  455. Print # fileNumber, {DTEND:}  &amp; getMeetingTime ( &quot;End&quot;, qprDoc ) '20170620T221500
  456.  
  457. ' Chair '
  458. Set chairName = New NotesName ( session.Effectiveusername )
  459. ' when you send the invite from Outlook, it makes you the chair '
  460. ' this line is here to show how you would format an attendee line for the chair '
  461. ' Print # fileNumber, {ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=&quot;} &amp; chairName.Abbreviated &amp; {&quot;;RSVP=TRUE:mailto:} &amp; getEmailAddress ( chairName.Abbreviated ) '
  462. ' Required participants '
  463. participants = qprDoc.Getitemvalue ( &quot;Participants&quot; )
  464. ForAll entry In participants
  465. Set recipientName = New NotesName ( entry )
  466. If Not ( chairName.Abbreviated = recipientName.Abbreviated ) Then
  467. Print # fileNumber, {ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=&quot;} &amp; recipientName.Abbreviated &amp; {&quot;;RSVP=TRUE:mailto:} &amp; getEmailAddress ( recipientName.Abbreviated )
  468. End If
  469. End ForAll
  470. ' Optional participants '
  471. participantsOptional = qprDoc.Getitemvalue ( &quot;ParticipantsOptional&quot; )
  472. ForAll entry In participantsOptional
  473. Set recipientName = New NotesName ( entry )
  474. Print # fileNumber, {ATTENDEE;ROLE=OPT-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=&quot;} &amp; recipientName.Abbreviated &amp; {&quot;;RSVP=TRUE:mailto:} &amp; getEmailAddress ( recipientName.Abbreviated )
  475. End ForAll
  476.  
  477. projectName = qprDoc.Getitemvalue(&quot;ProjectName&quot;)
  478. fiscalYearAndQuarter = qprDoc.Getitemvalue(&quot;FiscalYearAndQuarter&quot;)
  479. subject = fiscalYearAndQuarter(0) &amp; &quot; QPR: &quot; &amp; projectName (0)
  480. Print # fileNumber, {DESCRIPTION:} &amp; subject ' this is the body of the message
  481. Print # fileNumber, {SUMMARY:} &amp; subject ' this is the meeting name
  482.  
  483. ' assign a unique ID to meeting using the unid of the document with the current date-time appended '
  484. ' in case user creates multiple meetings for the same QPR '
  485. Print # fileNumber, {UID:} &amp; qprdoc.Universalid &amp; getMeetingTime ( &quot;Now&quot;, qprDoc )
  486.  
  487. Print # fileNumber, {END:VEVENT}
  488. Print # fileNumber, {END:VCALENDAR}
  489. Close # fileNumber
  490. url = &quot;file:///&quot; &amp; fileName
  491. Call ws.Urlopen(url)
  492. Set history = qprDoc.Getfirstitem(&quot;History&quot;)
  493. Call history.Appendtext(Now &amp; &quot; - Meeting notice created by &quot; &amp; session.Commonusername)
  494. Call history.Addnewline(1, True)
  495. Call qprDoc.Replaceitemvalue(&quot;NoticeFlag&quot;, 1)
  496. Call qprDoc.Save(True, False)
  497.  
  498. exiting:
  499. Exit Sub
  500. errorhandler:' report all errors in a messagebox '
  501. reason = &quot;Error #&quot; &amp; CStr (Err) &amp; &quot; (&quot; &amp; Error &amp; &quot;) on line &quot; &amp; CStr (Erl)
  502. MessageBox reason, 16, &quot;Error&quot;
  503. Call agentLog.LogAction ( reason )
  504. Resume exiting ' transfers control to the exiting label
  505. End Sub</pre>
  506. <h4>getMeetingTime</h4>
  507. <p>The getMeetingTime function just returns the requested date-time in the format YYYYMMDDTHHMMSS, so it can be included in the creation of the ICS file.</p>
  508. <pre class="brush: jscript; title: ; notranslate">%REM
  509. Function getMeetingTime
  510. Description: This Function returns a string in the format YYYYMMDDTHHMMSS
  511. If it is the start time, the values from the source document are used -- 20170622T211500
  512. If it is the end time, it is adjusted one hour later -- 20170622T221500
  513. If it is the &quot;Now&quot; time, it returns a string for the current date and time -- 20170620T094326
  514. %END REM
  515. Function getMeetingTime ( startOrEnd As String, qprDoc As NotesDocument ) As String
  516. Dim thisNotesDateTime As NotesDateTime
  517. Dim qprDate As Variant
  518. Dim qprTime As Variant
  519. Dim timeString, dateString As Variant
  520. Dim reason As String
  521.  
  522. On Error Goto errorhandler
  523.  
  524. Set qprDate = qprDoc.Getfirstitem(&quot;QPRDate&quot;)
  525. Set qprTime = qprDoc.Getfirstitem(&quot;QPRTime&quot;)
  526. dateString = qprDate.Text
  527. timeString = qprTime.Text
  528. Set thisNotesDateTime = New NotesDateTime ( dateString &amp; &quot; &quot; &amp; timeString )
  529. Select Case startOrEnd
  530. Case &quot;End&quot;
  531. Call thisNotesDateTime.AdjustHour (1)
  532. Case &quot;Now&quot;
  533. Set thisNotesDateTime = New NotesDateTime ( Now )
  534. Case else
  535. ' keep thisNotesDateTime as set on the source document '
  536. End Select
  537. dateString = thisNotesDateTime.DateOnly
  538. timeString = thisNotesDateTime.TimeOnly
  539. getMeetingTime = CStr ( Year ( dateString ) )
  540. getMeetingTime = getMeetingTime &amp; Right$ ( &quot;0&quot; &amp; CStr ( Month ( dateString ) ), 2 )
  541. getMeetingTime = getMeetingTime &amp; Right$ ( &quot;0&quot; &amp; CStr ( Day ( dateString ) ), 2 )
  542. getMeetingTime = getMeetingTime &amp; &quot;T&quot;
  543. getMeetingTime = getMeetingTime &amp; Right$ ( &quot;0&quot; &amp; CStr ( Hour ( timeString ) ), 2 )
  544. getMeetingTime = getMeetingTime &amp; Right$ ( &quot;0&quot; &amp; CStr ( Minute ( timeString ) ), 2 )
  545. getMeetingTime = getMeetingTime &amp; Right$ ( &quot;0&quot; &amp; CStr ( Second ( timeString ) ), 2 )
  546.  
  547. exiting:
  548. Call agentLog.LogAction ( &quot;-------&quot; )
  549. Call agentLog.LogAction ( &quot;-------&quot; )
  550. Exit Function
  551. errorhandler:' report all errors in a messagebox '
  552. reason = &quot;Function getMeetingTime: &quot;
  553. reason = reason &amp; &quot;Error #&quot; &amp; Cstr (Err) &amp; &quot; (&quot; &amp; Error &amp; &quot;) on line &quot; &amp; Cstr (Erl)
  554. Messagebox reason, 16, &quot;Error&quot;
  555. Call agentLog.LogAction ( reason )
  556. Resume exiting
  557. End Function</pre>
  558. <p>While this did take me a few days to sort out, I&#8217;m pretty happy with the result. Our configuration has users sharing one &#8220;migration&#8221; mail file, so that users who are already on Outlook still retain a mail file and can send email. Unfortunately, that means any email from them that we create in the UI is going to have values pointing back to the &#8220;migration&#8221; mail file. I spent my first few days on this trying to spoof the mail.box by changing Principal, ReplyTo, $InetAddress and Chair when sending via Notes calendaring. While changing Chair did make it appear to come from the current user, it always displayed the email address from the &#8220;migration&#8221; mail file. It might have been getting caught in our spam filter on the way to Outlook, as my test user on Notes was still receiving the notices. Nonetheless, by switching to using Outlook as the UI, it not only took away that problem, but was far simpler and future-proofed my application. As I look at these tools I&#8217;ve created in LotusScript to generate mail messages and calendar entries, I know that it&#8217;s but a short step to doing them in server-side Javascript or maybe in Java.</p>
  559. <p>There is hope for the Notes gurus of old. We just have to keep learning!</p>
  560. <p><a href="https://tools.ietf.org/html/rfc2446">iCal RFC (documentation?)</a></p>
  561. ]]></content:encoded>
  562. <wfw:commentRss>https://lostinxpages.com/2017/06/23/creating-a-meeting-notice-in-outlook-from-the-notes-client/feed/</wfw:commentRss>
  563. <slash:comments>0</slash:comments>
  564. <media:content url="https://1.gravatar.com/avatar/deb5781b7343da77e1203b1312a9dbc0?s=96&#38;d=identicon&#38;r=G" medium="image">
  565. <media:title type="html">habap</media:title>
  566. </media:content>
  567.  
  568. <media:content url="https://lostinxpages.files.wordpress.com/2017/06/sendupdate.jpg" medium="image" />
  569. </item>
  570. <item>
  571. <title>Getting email addresses from the Notes address book</title>
  572. <link>https://lostinxpages.com/2017/06/21/getting-email-addresses-from-the-notes-address-book/</link>
  573. <comments>https://lostinxpages.com/2017/06/21/getting-email-addresses-from-the-notes-address-book/#comments</comments>
  574. <pubDate>Wed, 21 Jun 2017 16:50:40 +0000</pubDate>
  575. <dc:creator><![CDATA[David Navarre]]></dc:creator>
  576. <category><![CDATA[Old Notes]]></category>
  577. <category><![CDATA[Utilities]]></category>
  578. <category><![CDATA[@DBLookup]]></category>
  579. <category><![CDATA[address book]]></category>
  580. <category><![CDATA[Ben Langhinrichs]]></category>
  581. <category><![CDATA[getEmailAddress]]></category>
  582. <category><![CDATA[internet address]]></category>
  583. <category><![CDATA[LotusScript]]></category>
  584. <category><![CDATA[names.nsf]]></category>
  585.  
  586. <guid isPermaLink="false">http://lostinxpages.com/?p=537</guid>
  587. <description><![CDATA[As we work to get our Notes applications functioning smoothly with our Outlook mail, I&#8217;m finding ways to keep the close binding between Notes applications and the user&#8217;s mail. It&#8217;s so much easier to click a button to generate an email associated to a particular Notes document than to copy-paste a document link. We&#8217;ve got [&#8230;]]]></description>
  588. <content:encoded><![CDATA[<p>As we work to get our Notes applications functioning smoothly with our Outlook mail, I&#8217;m finding ways to keep the close binding between Notes applications and the user&#8217;s mail. It&#8217;s so much easier to click a button to generate an email associated to a particular Notes document than to copy-paste a document link.</p>
  589. <p>We&#8217;ve got a Notes form for the Quarterly Project Report. Each quarter, various key members on the project are supposed to have a call to review the project. The form itself is ponderous, having something like 700 fields, but (using hide-whens) can be distilled down to a manageable number for the meeting&#8217;s agenda. The Notes names of the expected participants are computed from other documents within the database, though the fields are editable. In switching from <a href="https://lostinxpages.com/2015/01/15/creating-a-meeting-in-the-ui-in-ibmnotes/">using Notes mail to generate the meeting notice</a> to Outlook, I ended up switching to using <a href="http://www.kanzaki.com/docs/ical/">iCal</a>.</p>
  590. <p>It turns out that <strong>iCal is a far simpler way</strong> to initiate the meeting notice in the UI. All I need is something like this in an ICS file to have it open in my Outlook client as a meeting notice for me to send (as an update, but more on that in another post)</p>
  591. <pre class="brush: jscript; title: ; notranslate">BEGIN:VCALENDAR
  592. BEGIN:VEVENT
  593. DTSTART:20170622T211500
  594. DTEND:20170622T221500
  595. ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=&quot;David Navarre/Company&quot;;RSVP=TRUE:mailto:[email protected]
  596. ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=&quot;Another Person/Company&quot;;RSVP=TRUE:mailto:[email protected]
  597. ATTENDEE;ROLE=OPT-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE:mailto:[email protected]
  598. DESCRIPTION:
  599. SUMMARY:2017 Q2 QPR: Agribusiness Competitiveness Enhancement via file
  600. UID:AC1804D765C782CD8525814500073F37
  601. END:VEVENT
  602. END:VCALENDAR</pre>
  603. <p>One of the hurdles is that we need to have email addresses as well as names for all of the attendees. If you leave the mailto blank or put the Notes name there, it ignores it. Since our address book is still available in Notes and contains everyone&#8217;s email address, I thought I&#8217;d just google how to do it. Sadly, it wasn&#8217;t out there, so I took a few minutes and modified some script in the help documentation (<a href="https://www.ibm.com/support/knowledgecenter/de/SSVRGU_8.5.3/com.ibm.designer.domino.main.doc/H_EXAMPLES_ADDRESSBOOKS_PROPERTY.html">Examples: AddressBooks property</a>) to create a function to do the lookup.</p>
  604. <pre class="brush: jscript; title: ; notranslate">%REM
  605. Function getEmailAddress
  606. Description: This Function returns a string that is the email address from the address books
  607.  
  608. IMPORTANT: all address books are stored in the NotesDatabase list, addressBookList, which must be called BEFORE calling the getEmailAddress function
  609.  
  610. %END REM
  611. Function getEmailAddress ( recipientName As String ) As String
  612. Dim view As NotesView
  613. Dim doc As NotesDocument
  614. Dim internetAddress As Variant
  615. Dim found As Boolean
  616. Dim reason As String
  617.  
  618. On Error Goto errorhandler
  619.  
  620. ' if already an internet address, just return that value '
  621. If ( InStr ( recipientName, &quot;@&quot; ) ) Then
  622. getEmailAddress = recipientName
  623. Exit function
  624. End If
  625.  
  626. getEmailAddress = &quot;&quot;
  627. found = False
  628. ForAll addressBook In addressBookList
  629. ' all address books are stored in the NotesDatabase list, addressBookList, which must be called BEFORE calling the getEmailAddress function '
  630. ' check every Domino Directory, until found '
  631. If ( addressBook.IsPublicAddressBook ) And ( Not found ) Then
  632. ' look up name in the VIMPeople view of address book '
  633. Set view = addressBook.GetView( &quot;($VIMPeople)&quot; )
  634. If not ( view Is Nothing ) Then
  635. Set doc = view.GetDocumentByKey( recipientName )
  636. ' if person is found, get their internet addrress and stop '
  637. If Not ( doc Is Nothing ) Then
  638. internetAddress = doc.Getitemvalue(&quot;InternetAddress&quot;)
  639. If ( internetAddress (0) &lt;&gt; &quot;&quot; ) Then
  640. getEmailAddress = internetAddress (0)
  641. found = True
  642. Exit ForAll
  643. End If
  644. End If
  645. End If
  646. End If
  647. End ForAll
  648. ' if found is still False, the person was not found '
  649. If Not found Then
  650. MessageBox ( &quot;Unable to locate &quot; &amp; recipientName &amp; &quot; in the address book, using &quot; &amp; recipientName &amp; &quot; as their email addresss&quot; )
  651. getEmailAddress = recipientName
  652. End If
  653.  
  654. exiting:
  655. Exit Function
  656. errorhandler:' report all errors in a messagebox '
  657. reason = &quot;Function getEmailAddress: &quot;
  658. reason = reason &amp; &quot;Error #&quot; &amp; Cstr (Err) &amp; &quot; (&quot; &amp; Error &amp; &quot;) on line &quot; &amp; Cstr (Erl)
  659. Messagebox reason, 16, &quot;Error&quot;
  660. Resume exiting
  661. End Function</pre>
  662. <p>Hope someone else finds this useful&#8230;.</p>
  663. <h4>Addendum</h4>
  664. <pre>Dim addressBookList List As NotesDatabase</pre>
  665. <p>As Ben pointed out, re-opening every address book every time you want the email address is incredibly inefficient. So, declare a global variable for the address books and use the following function to open them. The code in getEmailAddress now reflects this&#8230;.</p>
  666. <pre class="brush: jscript; title: ; notranslate">%REM
  667. Function openAddressBooks
  668. Description: This Function assigns all address books to a NotesDatabase list and opens them
  669. %END REM
  670. Function openAddressBooks ( ) As Boolean
  671. Dim reason As String
  672.  
  673. On Error Goto errorhandler
  674.  
  675. openAddressBooks = False
  676. ForAll addressBook In session.Addressbooks
  677. ' open every Domino Directory '
  678. If ( addressBook.IsPublicAddressBook ) Then
  679. Set addressBookList (addressBook.FileName) = addressBook
  680. Call addressBookList (addressBook.FileName).Open( &quot;&quot;, &quot;&quot; )
  681. End If
  682. End ForAll
  683. openAddressBooks = True
  684.  
  685. exiting:
  686. Call agentLog.LogAction ( &quot;-------&quot; )
  687. Call agentLog.LogAction ( &quot;-------&quot; )
  688. Exit Function
  689. errorhandler:' report all errors in a messagebox '
  690. reason = &quot;Error #&quot; &amp; Cstr (Err) &amp; &quot; (&quot; &amp; Error &amp; &quot;) on line &quot; &amp; Cstr (Erl)
  691. Messagebox reason, 16, &quot;Error&quot;
  692. Call agentLog.LogAction ( reason )
  693. Resume exiting
  694. End Function</pre>
  695. ]]></content:encoded>
  696. <wfw:commentRss>https://lostinxpages.com/2017/06/21/getting-email-addresses-from-the-notes-address-book/feed/</wfw:commentRss>
  697. <slash:comments>3</slash:comments>
  698. <media:content url="https://1.gravatar.com/avatar/deb5781b7343da77e1203b1312a9dbc0?s=96&#38;d=identicon&#38;r=G" medium="image">
  699. <media:title type="html">habap</media:title>
  700. </media:content>
  701. </item>
  702. <item>
  703. <title>Progammatically opening a mailto link from the Notes client</title>
  704. <link>https://lostinxpages.com/2017/06/02/progammatically-opening-a-mailto-link-from-the-notes-client/</link>
  705. <comments>https://lostinxpages.com/2017/06/02/progammatically-opening-a-mailto-link-from-the-notes-client/#comments</comments>
  706. <pubDate>Fri, 02 Jun 2017 21:35:46 +0000</pubDate>
  707. <dc:creator><![CDATA[David Navarre]]></dc:creator>
  708. <category><![CDATA[Client-Side Javascript]]></category>
  709. <category><![CDATA[Old Notes]]></category>
  710. <category><![CDATA[mailto]]></category>
  711. <category><![CDATA[NotesUIWorkspace]]></category>
  712. <category><![CDATA[Outlook]]></category>
  713. <category><![CDATA[URLOpen]]></category>
  714.  
  715. <guid isPermaLink="false">http://lostinxpages.com/?p=475</guid>
  716. <description><![CDATA[Our company has been transitioning from Notes mail to Outlook for a little while. One of the hurdles for me has been getting Notes to send mail when the user no longer has a Notes mail file and also wants to send any editable emails via the Outlook client. Today, I&#8217;d like to have a [&#8230;]]]></description>
  717. <content:encoded><![CDATA[<p>Our company has been transitioning from Notes mail to Outlook for a little while. One of the hurdles for me has been getting Notes to send mail when the user no longer has a Notes mail file and also wants to send any editable emails via the Outlook client. Today, I&#8217;d like to have a look at my latest solution to opening those editable emails in the Outlook client.</p>
  718. <p>If you try using @URLOpen or ws.URLOpen, you&#8217;ll find that despite having set the default email to Outlook, Notes insists on opening a Notes document to send the mail. If you put the mailto link into a browser, it opens in the default mail client, Outlook, formatted properly. If you programmatically open a http link, it opens in the default browser. Yet, frustratingly, it won&#8217;t take that same mailto link that works in the browser and open it from LotusScript or a formula. So, we have to cheat.</p>
  719. <h3>mailto syntax</h3>
  720. <p>As a quick review, mailto links are actually very simple.</p>
  721. <p>There are five components to the link, but none are required.</p>
  722. <p><strong>mailto:<em>[email protected] </em></strong>Simply list the recipients email addresses. Outlook seems to prefer that you separate them with semi-colons, though most syntax guides suggest commas.</p>
  723. <p>The other four are passed as parameters in the query string. So, before you use any of them, you have to use a question mark to separate the query string from the URL, then separate each parameter with an ampersand (&amp;).</p>
  724. <p><strong>cc=<em>[email protected] </em></strong>or <strong>bcc=<em>[email protected] </em></strong>You can add carbon-copy folks or blind-copy folks in the same way.</p>
  725. <p><strong>subject=<em>That%20issue </em></strong>The subject line should be encoded so that there are no spaces and any unusual characters pass through to the email rather than disrupt the syntax of the query string.</p>
  726. <p><strong>body=<em>The%20contents%20of%20email</em> </strong>The body is, of course, the most important thing to us and we can simply compute the values to be used. Links back to Notes documents to be opened in the Notes client can even be used, so long as you provide a proper <em>notes://</em> URL.</p>
  727. <h3>Hard coded example</h3>
  728. <p>If we create a HTML document, store it locally and open it programmatically, it will execute any javascript we&#8217;ve got on the page as browsers ought to do. So, we can make it open the mailto link if our page has the following:</p>
  729. <pre class="brush: jscript; title: ; notranslate">&lt;script type=&quot;text/javascript&quot;&gt;
  730. subject = &quot;Change Order for your approval&quot;;
  731. body = &quot;Your approval has been requested for changes made... &quot;;
  732. body = body + &quot;%0A%0A&quot;;
  733. body = body + &quot;Please review these changes and approve, provide comments, or request more time to review within five business days of this notification. Otherwise, the change will be considered approved as per DAI policy.&quot;;
  734. body = body + &quot;%0A%0A&quot;;
  735. body = body + &quot;The pending change approval form and links to draft documents can be found here: &quot;;
  736. body = body + &quot;%0A&quot;;
  737. body = body + &quot;Notes:///852580E9007624A0/0/B82A2F4ABF0D56818525808400601DBE&quot;;
  738. mailtoString = &quot;mailto:[email protected]?subject=&quot; + subject + &quot;&amp;body=&quot; + body;
  739.  
  740. window.open(mailtoString)&lt;/script&gt;</pre>
  741. <h3>Sample code</h3>
  742. <p>So, all we have to do is generate the mailtoString, put it into a new HTML document and open it via NotesUIWorkspace.URLOpen to get our document to open and popup the Outlook client, populated with the correct information.</p>
  743. <pre class="brush: jscript; title: ; notranslate">Sub Click(Source As Button)
  744. Dim ws As New NotesUIWorkspace
  745. Dim session As New NotesSession
  746. Dim thisdb As NotesDatabase
  747. Dim uidoc As NotesUIDocument
  748. Dim approver As Variant
  749. Dim approverNames As String
  750. Dim i As Integer
  751.  
  752. Set thisdb = session.CurrentDatabase
  753. Set uidoc = ws.CurrentDocument
  754. Set doc = uidoc.Document
  755.  
  756. For i = 1 To 6
  757. approver = doc.getItemValue( &quot;Approver&quot;&amp;i )
  758. If i = 1 Then
  759. approverNames = approver (0)
  760. Else
  761. If ( approver (0) &lt;&gt; &quot;&quot; ) Then
  762. approverNames = approverNames &amp; &quot;;&quot; &amp; approver (0)
  763. End If
  764. End If
  765. Next
  766. Dim subject As String
  767. Dim body As String
  768. Dim mailtoString As String
  769. Dim changeOrderNumber As Variant
  770.  
  771. changeOrderNumber = doc.getItemValue (&quot;CONum&quot; )
  772. subject = &quot;Change Order &quot; &amp; changeOrderNumber (0) &amp; &quot; for your approval in &quot; &amp; thisdb.Title
  773. subject = Replace ( subject, &quot; &quot;, &quot;%20&quot; )
  774. body = &quot;Your approval has been requested for changes made using &quot; &amp; changeOrderNumber (0) &amp; &quot; in &quot; &amp; thisdb.Title
  775. body = body &amp; &quot;%0A%0A&quot;
  776. body = body &amp; &quot;Please review these changes and approve, provide comments, or request more time to review within five business days of this notification. Otherwise, the change will be considered approved as per DAI policy.&quot;
  777. body = body &amp; &quot;%0A%0A&quot;
  778. body = body &amp; &quot;The pending change approval form and links to draft documents can be found here: &quot;
  779. body = body &amp; &quot;%0A&quot;
  780. body = body &amp; &quot;Notes:///&quot; &amp; thisdb.ReplicaID &amp; &quot;/0/&quot; &amp; doc.UniversalID
  781. body = Replace ( body, &quot; &quot;, &quot;%20&quot; )
  782.  
  783. mailtoString = &quot;mailto:&quot; &amp; approverNames &amp; &quot;?subject=&quot; &amp; subject &amp; &quot;&amp;body=&quot; &amp; body
  784.  
  785. Dim fileName As String
  786. Dim dataDirectoryPath As String
  787. Dim url As String
  788. Dim fileNumber As Integer
  789.  
  790. fileNumber = 1
  791.  
  792. dataDirectoryPath = session.Getenvironmentstring(&quot;Directory&quot;, True)
  793. fileName = dataDirectoryPath &amp; &quot;\mailto.htm&quot;
  794.  
  795. Open fileName For Output As fileNumber
  796.  
  797. Print # fileNumber, {&lt;script type=&quot;text/javascript&quot;&gt;}
  798. Print # fileNumber, {mailtoString = &quot;} &amp; mailtoString {&quot;}
  799. Print # fileNumber, {window.open(mailtoString)&lt;/script&gt;}
  800.  
  801. Close # fileNumber
  802.  
  803. url = &quot;file:///&quot; &amp; fileName
  804. Call ws.Urlopen(url)
  805.  
  806. End Sub</pre>
  807. ]]></content:encoded>
  808. <wfw:commentRss>https://lostinxpages.com/2017/06/02/progammatically-opening-a-mailto-link-from-the-notes-client/feed/</wfw:commentRss>
  809. <slash:comments>4</slash:comments>
  810. <media:content url="https://1.gravatar.com/avatar/deb5781b7343da77e1203b1312a9dbc0?s=96&#38;d=identicon&#38;r=G" medium="image">
  811. <media:title type="html">habap</media:title>
  812. </media:content>
  813. </item>
  814. <item>
  815. <title>What good is the internet of things to people who don&#8217;t have internet?</title>
  816. <link>https://lostinxpages.com/2017/02/21/what-good-is-the-internet-of-things-to-people-who-dont-have-internet/</link>
  817. <comments>https://lostinxpages.com/2017/02/21/what-good-is-the-internet-of-things-to-people-who-dont-have-internet/#respond</comments>
  818. <pubDate>Tue, 21 Feb 2017 17:36:30 +0000</pubDate>
  819. <dc:creator><![CDATA[David Navarre]]></dc:creator>
  820. <category><![CDATA[General Interest]]></category>
  821. <category><![CDATA[Cambodia]]></category>
  822. <category><![CDATA[DAI]]></category>
  823. <category><![CDATA[Internet of Things]]></category>
  824. <category><![CDATA[Rob Ryan-Silva]]></category>
  825.  
  826. <guid isPermaLink="false">http://lostinxpages.com/?p=472</guid>
  827. <description><![CDATA[While preparing for a panel discussion this morning, Tami suggested that I check out the blogs by our technology team at DAI. Rob Ryan-Silva wrote an excellent think piece on using the Internet of Things to help people who have no access to the internet. In Cambodia, they relied on human intervention to get out [&#8230;]]]></description>
  828. <content:encoded><![CDATA[<p>While preparing for a panel discussion this morning, Tami suggested that I check out the blogs by our technology team at DAI. Rob Ryan-Silva wrote an excellent think piece on using the Internet of Things to help people who have no access to the internet. In Cambodia, they relied on human intervention to get out flood warnings. That&#8217;s not always reliable, but Rob was able to <a href="https://dai-global-digital.com/what-good-is-the-internet-of-things-to-people-who-dont-have-internet.html">use IoT to come up with an automated solution&#8230;.</a></p>
  829. ]]></content:encoded>
  830. <wfw:commentRss>https://lostinxpages.com/2017/02/21/what-good-is-the-internet-of-things-to-people-who-dont-have-internet/feed/</wfw:commentRss>
  831. <slash:comments>0</slash:comments>
  832. <media:content url="https://1.gravatar.com/avatar/deb5781b7343da77e1203b1312a9dbc0?s=96&#38;d=identicon&#38;r=G" medium="image">
  833. <media:title type="html">habap</media:title>
  834. </media:content>
  835. </item>
  836. </channel>
  837. </rss>
  838.  

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//lostinxpages.com/feed/

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