<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[iKnode]]></title>
  <link href="http://iknode.com//atom.xml" rel="self"/>
  <link href="http://iknode.com//"/>
  <updated>2013-05-14T23:30:02-07:00</updated>
  <id>http://iknode.com//</id>
  <author>
    <name><![CDATA[iKnode]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[To infinity and beyond]]></title>
    <link href="http://iknode.com//blog/2013/04/15/to-infinity-and-beyond/"/>
    <updated>2013-04-15T23:05:00-07:00</updated>
    <id>http://iknode.com//blog/2013/04/15/to-infinity-and-beyond</id>
    <content type="html"><![CDATA[<p>We started working on changing the Web in 2011 with the creation of iKnode. Our dreams filled our heart and our soul with the vision to make distributed systems via web services at every developers reach. We dreamed of recent graduates building their dreams on the web. Back then it was only me (Alex), Jorge and Joel. Fully funded by ourselves. Living the bootstrap dream.</p>

<br />


<p>We coded for days and nights to realize the vision. To create every single building block that made the iKnode cloud. Learning from our beta users, and our testing. We were 3 at the time. With Joel doing the Graphics and the fron-end, Jorge and me working on the engine.</p>

<br />


<p>We saw Backend as a Service providers pop up from everywhere. It seemed like the market started to get full of competitors, and that made us feel excited, empowered even. It validate our idea, but most importantly it validated our dream. We welcomed the competition enriching the market and make it more fun.</p>

<br />


<p>Around May 2012, we noticed more BaaS providers started to popup. A lot of them were companies that seemed to be cloning other BaaS providers features, and most of them didn&#8217;t bring anything new to the table. The competition started to get boring.</p>

<br />


<p>Nothing interesting was coming out, except for one company: Spire.io. We glanced through their site, and saw a spark of new, but something about them seemed very familiar. Their passion, it seems, was the same as ours: making developers life easier by creating a serverless world. The best way to make distributed computing easy, is to remove servers. We felt the competition was getting too close this time. For a moment we were afraid, but also happy. We were not alone.</p>

<br />


<p>We kept a close eye on them for the following months and then dozed back in to our own product and our own vision. We began to ramp up development to release at the DEMO conference in October. With Sophie&#8217;s help, and an amazing design by Joel, we invested in T-Shirts, Stickers and swag. We were proud to wear and iKnode T-Shirt, we still are.</p>

<br />


<p>October (2012) came and we launched iKnode at DEMO. We were a great success, attracting a big number of users into our dream cloud. Sophie joined to run the business, which was just starting. The following months after that we kept the feedback loop active learning and learning from our users.</p>

<br />


<p>By December 2012, I was able to get back to market analysis. Moving away a bit from our own user base to the information on the web. The first thing my list was to check on Spire.io. I was afraid to find them ahead of us. After all we were the only providers going after the web in the same way.</p>

<br />


<p>So I typed on my chrome instance: spire.io&#8230;.. Nothing. The site was down. I thought. It seemed crazy that a Cloud provider would allow their site to go down. So I tried again. And again I got Nothing. I checked www.downforeveryoneorjustme.com, and validated. Their site was down. Completly down. <em>What happenned ?</em></p>

<br />


<p>I began to tirelessly look for news around the web regarding Spire.io, to see if there were any press releases, blog post, etc. Checked Hacker News first, then Reddit, then Tech Crunch, and every other imaginable tech news site. Got Nothing. Nada.</p>

<br />


<p>I was perplexed. I was scared even. How can a company disappear over night? I began to be very scared. What happens if our dream is wrong ? What happens if what we are looking for is unattainable ? The team at Spire.io had the answer and I had to find out.</p>

<br />


<p>I first sent a tweet to the @spireio account:</p>

<blockquote align="center" class="twitter-tweet"><p>@<a href="https://twitter.com/spireio">spireio</a> Hey guys we are in Orange County, and building a BaaS (@<a href="https://twitter.com/iknode">iknode</a>) as well. We should get together to talk BaaS :D</p>&mdash; Alex Espinoza (@alespinoza) <a href="https://twitter.com/alespinoza/status/276100591875407873">December 4, 2012</a></blockquote>


<script async src="http://iknode.com///platform.twitter.com/widgets.js" charset="utf-8"></script>




<br />


<p>The CEO responded:</p>

<blockquote align="center" class="twitter-tweet" data-conversation="none"><p>@<a href="https://twitter.com/alespinoza">alespinoza</a> @<a href="https://twitter.com/spireio">spireio</a> @<a href="https://twitter.com/iknode">iknode</a> hi Alex, unfortunately, we had to wind down spire. But thank you very much for reaching out.</p>&mdash; Diego Prats (@mexitlan) <a href="https://twitter.com/mexitlan/status/276105151725576193">December 4, 2012</a></blockquote>


<script async src="http://iknode.com///platform.twitter.com/widgets.js" charset="utf-8"></script>




<br />


<p>He was very nice, but still I needed to know more, so I insisted.</p>

<blockquote align="center" class="twitter-tweet" data-conversation="none"><p>@<a href="https://twitter.com/mexitlan">mexitlan</a> @<a href="https://twitter.com/spireio">spireio</a> @<a href="https://twitter.com/iknode">iknode</a> I would still love to talk to you, if you are interested. I would love to hear what went wrong.</p>&mdash; Alex Espinoza (@alespinoza) <a href="https://twitter.com/alespinoza/status/276105601854087168">December 4, 2012</a></blockquote>


<script async src="http://iknode.com///platform.twitter.com/widgets.js" charset="utf-8"></script>




<br />


<p>To make the story short, he contacted me over email, and we were able to talk over the phone for an hour or so. Several interesting things happened during that phone call. Not only did we had the same dream to make a serverless world, but also he is from Mexico, just like us. And he lives in LA, which is pretty close to us; we are in Orange County. I thought that was amazing. And it seemed to me to be a cosmical connection.</p>

<br />


<p>After I hanged up, I felt relieved to know that our dream was still attainable. Additionally I made a friend, which shares our dream. I was a happy camper.</p>

<br />


<p>In the following months Diego, began helping more and more to pave the way for iKnode. For the iKnode team, Diego seemed part of it already, so we decided to officially invite him to be part of the iKnode family.</p>

<br />


<p>Today, we are proud to announce, Diego Prats joins the iKnode team as Chief Strategy Officer. His experience and expertise is first rate in the Backend as a Service industry. He will be mainly helping to build the dream on solid ground with a real solid business framework that will hold iKnode&#8217;s feet in the ground, but keep the heart flying in the serverless clouds.</p>

<p>And now with a complete team, in the words of Buzz Light Year:</p>

<div style="text-align:center;">
    <h2>&#8220;To inifity and Beyond!&#8221;</h2>
</div>


<br />


<br />



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Introducing Packages]]></title>
    <link href="http://iknode.com//blog/2013/04/06/introducing-packages/"/>
    <updated>2013-04-06T19:18:00-07:00</updated>
    <id>http://iknode.com//blog/2013/04/06/introducing-packages</id>
    <content type="html"><![CDATA[<p>We are so excited to announce the availability of a new iKnode feature: <em>Packages</em>. With Packages we provide a prebuilt set of applications for you to use directly through the API or through your own your applications.</p>

<p>Packages are prebuilt themselves are applications, and as such can be executed from the dashboard, directly from the API or from inside your application just like any other iKnode application. The same properties that apply to custom applications apply to packages with  the only difference is that packages are not editable. &#8220;Packages&#8221; is inspired by the spirit of NuGet and apt-get. The idea is to allow the installation applications that are already built and that you can start using by just the click of a button.</p>

<h3>Installation</h3>

<p>To install a package, just go to the packages section and clik the &#8220;Install&#8221; button for the package you want to install. The package will be installed and it will appear in the Dashboard with the &#8220;.App&#8221; postfix. If for example, you were to install the Twitter package you would see &#8220;Twitter.App&#8221; in your dashboard. You would not see it in the Apps section though, due to the fact that packages are not editable.</p>

<p><img src="http://iknode.com//images/posts/2013/04/packages.png" title="Packages" alt="Packages Image" class="img-br" /></p>

<p>If you decide you don&#8217;t want to use the package anymore, just go to the Packages section, click the &#8220;Installed Packages&#8221; button. The list of Installed packages will be displayed. Just click the Remove button for the package you want to remove and the package will be removed.</p>

<h3>Configuration</h3>

<p>Some package require configuration, like the Emailer. The emailer is used to send emails using an external email server like Gmail. You can configure the package by using the CreateConfig Package.</p>

<p><img src="http://iknode.com//images/posts/2013/04/createConfig.png" title="Create Config" alt="CreateConfig Image" class="img-br" /></p>

<p>This method in the Emailer App creates a record in the AppConfig collection in the Data section. You can change the configuration at anytime by just going to the AppConfig collection and edit the selected item.</p>

<p><img src="http://iknode.com//images/posts/2013/04/appConfig.png" title="AppConfig" alt="AppConfig Image" class="img-br" /></p>

<h3>Social Packages</h3>

<p>The Social Packages like Facebook or Twitter require OAuth as an authentication mechanism to do anything useful. For that we created the Social Connector. The main purpose of the social connector is guide you through the OAuth process so that you can integrate with Twitter and Facebook without you having to do any coding whatsoever.</p>

<p>To use the social connector simply go to the apps section, and click on the Social Connector button.</p>

<p><img src="http://iknode.com//images/posts/2013/04/appsSocialConnector.png" title="AppSocialConnector" alt="AppSocialConnector Image" class="img-br" /></p>

<p>You will then get a tab that shows the Connectors that we have. Currently we only support Twitter and Facebook, but more are on the way. Just select the Service you want to connect to (Facebook or Twitter) and the Social Connector will guide you through the process.</p>

<p><img src="http://iknode.com//images/posts/2013/04/socialConnector.png" title="SocialConnector" alt="SocialConnector Image" class="img-br" /></p>

<p>Once the process is done, the OAuth credentials will be stored in the SocialMedia collection.</p>

<h3>Available Packages</h3>

<ul>
<li><a href="http://iknode.com//docs#emailerPkg">Emailer</a>: Send emails using your own Emailer Server.</li>
<li><a href="http://iknode.com//docs#facebookPkg">Facebook</a>: Post messages to your facebook timeline.</li>
<li><a href="http://iknode.com//docs#ftpPkg">FTP</a>: Upload and Download Text Files using your own FTP Server.</li>
<li><a href="http://iknode.com//docs#loggerPkg">Logger</a>: Log Errors and Events with this application.</li>
<li><a href="http://iknode.com//docs#siteMonitorPkg">Site Monitor</a>: Application that helps you Keep track of your site by checking the status of your http/https site or your net.tcp services.</li>
<li><a href="http://iknode.com//docs#twitterPkg">Twitter</a>: Post messages to your twitter timeline.</li>
</ul>


<p>In future releases we will be upgrading the current packages and adding new ones. If you have a package that you wish to see implemented, drop us a line, we will gladly consider it.</p>

<p>For more information go to:
<a href="http://iknode.com//docs#pkgs">Packages Documentation.</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Welcome to the new iKnode]]></title>
    <link href="http://iknode.com//blog/2013/02/10/welcome-to-the-new-iknode/"/>
    <updated>2013-02-10T13:05:00-08:00</updated>
    <id>http://iknode.com//blog/2013/02/10/welcome-to-the-new-iknode</id>
    <content type="html"><![CDATA[<p>We have always strived to make a design that helped the user get things done. In the past months we noticed that the UI was getting too complex. Too many menu items, too many options on so many of the forms, so we decided to give iKnode a makeover. One thing we were sure is that the colors had to stay. Joel did an amazing job selecting them and we feel it is part of our branding.</p>

<p><img src="http://iknode.com//images/posts/2013/02/dashboard.png" alt="New Dashboard"/></p>

<h2>The Login Page</h2>

<p>The first thing we tackled was the login. We felt the login seems old and resembled a Desktop application. The login is important, because this is the first thing you see when you log into iKnode. It had to be cleaner and attractive. So we remove most of the text, focused on making the login screen more iconic and easier to understand.</p>

<table width="100%"><tr>
       <td><img src="http://iknode.com//images/posts/2013/02/old-login.png" alt="Old Login"/></td>
       <td><img src="http://iknode.com//images/posts/2013/02/login.png" alt="New Login"/></td>
</tr></table>


<p>Instead of having the word &#8220;Email :&#8221; next to the email field we added an email icon, and next to the password field a lock. By removing the field labels the login screen automatically looked more pleasing and inviting, so we knew we were going in the right direction. We also simplified the welcome message. Nobody really reads it or pays attention to it, so we made it more functional; instead of a welcome message we replaced it with &#8220;Login or Create a new Account&#8221;.</p>

<p>Before you could only create an account from the main site, but we noticed that some tried to create an account directly from the login, so we added the link to the login.</p>

<hr />

<h2>The Sidebar</h2>

<p>The second thing we focused our attention to was the ever growing sidebar. It had too many options and only a handful of options were really being used. But the biggest problem was that the sidebar didn&#8217;t make it clear what features were offered. Too many choices, and not a clear part on where to start.</p>

<table width="100%"><tr>
       <td><img src="http://iknode.com//images/posts/2013/02/old-sidebar.png" alt="Old Sidebar"/></td>
       <td><img src="http://iknode.com//images/posts/2013/02/sidebar.png" alt="New Sidebar"/></td>
</tr></table>


<p>With the new sidebar we make clear that we have 3 main features: Backend Apps, Data Storage and Scheduling. The order is also set to let the user know where to start. The first thing to do in iKnode is create an App. Then create Data Stores and if needed Schedule some apps to run at a specified period in time.</p>

<p>The new sidebar also improves the usage for mobile devices where screens are smaller. For this iteration we focused completly on tablets like the iPad, Nexus 7 and the Surface RT. The sidebar buttons are now big enough for a very precise finger button click, when before you usually needed to zoom in.</p>

<p>Additionally we removed the &#8220;Feedback &amp; Support&#8221; floating tab and added it to the sidebar. This decision was made to unify the design, the tab always looked out of place. With the Support button as part of the sidebar it feels more accessible and consistent.</p>

<hr />

<h2>The Topbar</h2>

<p>The third place we focused our attention to was the top bar. This top bar has changed considerably since iKnode started. In this time, we made the top bar a kindda scoreboard. We had the metrics on the dashboard before, but nobody really saw them, because most users spent their time coding in the editor. So we moved the stats to the top where they are visible no matter where you are in the site.</p>

<table width="100%"><tr>
       <td>
        <img src="http://iknode.com//images/posts/2013/02/old-topbar.png" alt="Old Topbar"/>
        <img src="http://iknode.com//images/posts/2013/02/topbar.png" alt="New topbar"/>
       </td>
</tr></table>


<hr />

<h2>The Application List</h2>

<p>The fourth item we decided to improve was the Application List. The application list used to look like a small desktop grid, which made usage in tablets very complicated because of the size of each row. What we decided to do was make the grid line higher and wider, with big buttons at the end. It still needs improvement, but the this is a start. We also added the Application icon to make applications easier to identify.</p>

<table width="100%"><tr>
       <td><img src="http://iknode.com//images/posts/2013/02/apps.png" alt="New App List"/></td>
</tr></table>


<hr />

<h2>The Editor</h2>

<p>The fifth place and one of the most important ones is the editor. We have been working tirelessly to make the editor more usable. We are using ACE and for sometime we used a really old version of it. In the past month Jorge decided to put some love into the editor integrating the latest version of ACE and adding some well deserved keyboard bindings. It was frustrating to save an app by cliking the button. I usually save my code everytime I finish a line, which means that my development time was impacted considerably.</p>

<table width="100%"><tr>
       <td><img src="http://iknode.com//images/posts/2013/02/old-editor.png" alt="Old Editor"/></td>
       <td><img src="http://iknode.com//images/posts/2013/02/editor.png" alt="New Editor"/></td>
</tr></table>


<p>So in the editor, we first focused on making the code editor itself larger, so that we can focus on the code. The references and Properties that were part an editor sidebar were only used around 5% of the time, where the editor was used approximately 95% of the time. Additionally I am an avid Emacs user, and I love the simplicity of the editor with no toolbar, sidebar or anything else.</p>

<p>In order to achieve what a lot of developers call the &#8220;Zen Mode&#8221; we had to allow the editor to take the rest of the screen. So we moved the References and Properties tabs out of the way. We created a tab for the editor, one for the references and one for the properties. This made a hell of a difference. It feels like Emacs, and I love it.</p>

<p>We also changed the icons. We felt the Disk icon, which reprented the save process, was outdated. I think the Disk is no longer the best way to represent the save operation, so we changed to a Server Save icon.</p>

<hr />

<p>This UI improvement experience was amazing. We had been so focused on pumping up our infrastructure that we overlooked the user interface. We put a lot of heart and love into iKnode, most of the time it can&#8217;t be seen with the naked eye, but in this case, it is out there for everybody to enjoy.</p>

<p>Please let use know your thoughts about the new changes.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Editor Improvements]]></title>
    <link href="http://iknode.com//blog/2013/01/10/editor-improvements/"/>
    <updated>2013-01-10T17:33:00-08:00</updated>
    <id>http://iknode.com//blog/2013/01/10/editor-improvements</id>
    <content type="html"><![CDATA[<p>Hi there, we are now pleased to announce that some important features are being implemented in the Application Editor. We&#8217;ve planned a set of new features to improve the user experience when it comes to code your apps on iKnode.</p>

<p>One of the major changes is the upgrade of the application editor, this will allow us to extend the editor functionality and features plus the improvements and fixes that come with the upgrade, e.g. you&#8217;ll notice you are now able to collapse or expand code blocks.</p>

<p>So as a start we&#8217;ve added some key shortcuts for what we consider the most common operations when using the editor, we are talking about saving, compiling and publishing your apps, so here are the key shortcuts you may use when using the editor, for PC and MAC:</p>

<ul>
<li>Save (Ctrl+S, Command+S).</li></li>
<li>Compile (Ctrl+Alt+B, Command+Alt+B).</li></li>
<li>Publish (Ctrl+Alt+P, Command+Alt+P).</li></li>
</ul>


<p>As I mentioned, this is just the beginning, we are planning to add more features that make the editor better and easier to use, as an example:</p>

<ul>
<li>Toggle comments blocks.</li>
<li>Indent code regions.</li>
<li>Search and replace.</li>
</ul>


<p>Your comments and suggestions are of course more than welcome. More things are on the way, so stay tuned.</p>

<p>Happy Coding!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The iOS SDK]]></title>
    <link href="http://iknode.com//blog/2013/01/03/the-ios-sdk/"/>
    <updated>2013-01-03T20:19:00-08:00</updated>
    <id>http://iknode.com//blog/2013/01/03/the-ios-sdk</id>
    <content type="html"><![CDATA[<p>Today we announce the availability of the iOS SDK which enables iOS apps to access your iKnode API. You can download the code @ SDK&#8217;s <a href="https://github.com/Structum/iKnodeSdk/tree/master/Objective-C">github repository</a>.</p>

<p>The SDKs are built with the purpose of making it easier to access your API through the REST interface. It is not required for you to learn how to use the SDKs at all. Our REST API is very friendly as well, but we do recommend using it; it makes it so much easier.</p>

<p>The SDK follows exactly the same philosophy for all platforms. This means that if you know how to use the Javascript SDK or the C# SDK, the iOS SDK will be a piece of cake.</p>

<p>For this example we are going to use the following API:</p>

<figure class='code'><figcaption><span>UserService iKnode Application  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
<span class='line-number'>80</span>
<span class='line-number'>81</span>
<span class='line-number'>82</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span>
</span><span class='line'><span class="k">using</span> <span class="nn">iKnode.Applications</span><span class="p">;</span>
</span><span class='line'><span class="k">using</span> <span class="nn">iKnodeSdk.UnitTest.Domain</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">namespace</span> <span class="nn">iKnodeSdkTest</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>  <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>  <span class="c1">/// Defines the User Service.</span>
</span><span class='line'>  <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'><span class="na">  [Application]</span>
</span><span class='line'>  <span class="k">public</span> <span class="k">class</span> <span class="nc">UserService</span>
</span><span class='line'>  <span class="p">{</span>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Gets the User First Name by its identifier.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;id&quot;&gt;User Identifier.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;User First Name/.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="nf">GetFirstNameById</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">return</span> <span class="s">&quot;Robert&quot;</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Gets the Most Common User First Name.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;Most Common User First Name/.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="nf">GetMostCommonFirstName</span><span class="p">()</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">return</span> <span class="s">&quot;John&quot;</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Gets the User by its identifier.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;id&quot;&gt;User Identifier.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;User Information.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="n">User</span> <span class="nf">GetById</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">if</span><span class="p">(</span><span class="n">id</span> <span class="p">!=</span> <span class="m">1</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">return</span> <span class="k">null</span><span class="p">;</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">return</span> <span class="k">new</span> <span class="nf">User</span><span class="p">(</span><span class="m">1</span><span class="p">,</span> <span class="k">new</span> <span class="n">FullName</span><span class="p">(</span><span class="s">&quot;John&quot;</span><span class="p">,</span> <span class="s">&quot;Doe&quot;</span><span class="p">));</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Saves the User Information.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;user&quot;&gt;User Information.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;User Identifier.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">int</span> <span class="nf">Save</span><span class="p">(</span><span class="n">User</span> <span class="n">user</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">if</span><span class="p">(</span><span class="n">user</span> <span class="p">==</span> <span class="k">null</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">return</span> <span class="p">-</span><span class="m">1</span><span class="p">;</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="c1">//TODO: Here your store the User Information.</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">return</span> <span class="n">user</span><span class="p">.</span><span class="n">Id</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Creates a new User with the Default Information.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;User Information.&lt;/returns&gt;        </span>
</span><span class='line'>        <span class="k">public</span> <span class="n">User</span> <span class="nf">CreateDefault</span><span class="p">()</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">return</span> <span class="k">new</span> <span class="nf">User</span><span class="p">(</span><span class="m">2</span><span class="p">,</span> <span class="k">new</span> <span class="n">FullName</span><span class="p">(</span><span class="s">&quot;Jane&quot;</span><span class="p">,</span> <span class="s">&quot;Doe&quot;</span><span class="p">));</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Creates a new User.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;id&quot;&gt;Identifier.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;name&quot;&gt;Name.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;User Information.&lt;/returns&gt;        </span>
</span><span class='line'>        <span class="k">public</span> <span class="n">User</span> <span class="nf">Create</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">,</span> <span class="n">FullName</span> <span class="n">name</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">return</span> <span class="k">new</span> <span class="nf">User</span><span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">name</span><span class="p">);</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>The model used by the iKnode Application is the following:</p>

<figure class='code'><figcaption><span>Model  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">namespace</span> <span class="nn">iKnodeSdkTest</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>    <span class="c1">/// Defines the Full Name class.</span>
</span><span class='line'>    <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'><span class="na">    [Serializable]</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">class</span> <span class="nc">FullName</span>
</span><span class='line'>    <span class="p">{</span>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// First Name.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="n">FirstName</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Last Name.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="n">LastName</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Initializes a new instance of the &lt;see cref=&quot;FullName&quot;/&gt; class.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;firstName&quot;&gt;First Name/&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;lastName&quot;&gt;Last Name.&lt;/param&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="nf">FullName</span><span class="p">(</span><span class="kt">string</span> <span class="n">firstName</span><span class="p">,</span> <span class="kt">string</span> <span class="n">lastName</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">this</span><span class="p">.</span><span class="n">FirstName</span> <span class="p">=</span> <span class="n">firstName</span><span class="p">;</span>
</span><span class='line'>            <span class="k">this</span><span class="p">.</span><span class="n">LastName</span> <span class="p">=</span> <span class="n">lastName</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>    <span class="c1">/// Defines the User class.</span>
</span><span class='line'>    <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'><span class="na">    [Serializable]</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">class</span> <span class="nc">User</span>
</span><span class='line'>    <span class="p">{</span>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Identifier.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">int</span> <span class="n">Id</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Full Name.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="n">FullName</span> <span class="n">Name</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Initializes a new instance of the &lt;see cref=&quot;User&quot;/&gt; class.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;id&quot;&gt;Identifier.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;name&quot;&gt;Name.&lt;/param&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="nf">User</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">,</span> <span class="n">FullName</span> <span class="n">name</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">this</span><span class="p">.</span><span class="n">Id</span> <span class="p">=</span> <span class="n">id</span><span class="p">;</span>
</span><span class='line'>            <span class="k">this</span><span class="p">.</span><span class="n">Name</span> <span class="p">=</span> <span class="n">name</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>This API is the same used to demostrate the usage with the Javascript and C# SDKs.</p>

<p>Using just the REST endpoint we would call this API in the following way:</p>

<figure class='code'><figcaption><span>Using curl  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>curl -X POST <span class="se">\</span>
</span><span class='line'>-H <span class="s2">&quot;iKnode-UserId: [YOUR-USERID]&quot;</span> <span class="se">\</span>
</span><span class='line'>-H <span class="s2">&quot;iKnode-ApiKey: [YOUR-APIKEY]&quot;</span> <span class="se">\</span>
</span><span class='line'>-H <span class="s2">&quot;Content-Type: application/json&quot;</span> <span class="se">\</span>
</span><span class='line'>-d <span class="s1">&#39;{ &quot;parameters&quot; : &quot;{ id: \&quot;1\&quot; }&quot; }&#39;</span> <span class="se">\</span>
</span><span class='line'>https://api.iknode.com/Applications/execute/UserSvc/GetById
</span></code></pre></td></tr></table></div></figure>


<p>In the iOS SDK the return type is usually NSDictionary for complex objects as seen in the following example:</p>

<figure class='code'><figcaption><span>Using Objective-C  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="n">ApplicationClient</span> <span class="o">*</span><span class="n">client</span> <span class="o">=</span> <span class="p">[[</span><span class="n">ApplicationClient</span> <span class="n">alloc</span><span class="p">]</span> <span class="nl">initWithServiceUrl:</span><span class="n">BaseUrl</span>
</span><span class='line'>                                                              <span class="nl">AndUserId:</span><span class="n">UserId</span>
</span><span class='line'>                                                                <span class="nl">AndApiKey:</span><span class="n">ApiKey</span>
</span><span class='line'>                                                               <span class="nl">AndAppName:</span><span class="s">@&quot;UserService&quot;</span><span class="p">];</span>
</span><span class='line'>
</span><span class='line'><span class="n">NSDictionary</span> <span class="o">*</span><span class="n">params</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSDictionary</span> <span class="nl">dictionaryWithObject:</span><span class="s">@&quot;1&quot;</span> <span class="nl">forKey:</span><span class="s">@&quot;id&quot;</span><span class="p">];</span>
</span><span class='line'><span class="n">NSData</span> <span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="p">[</span><span class="n">client</span> <span class="nl">ExecuteWithMethodName:</span><span class="s">@&quot;GetById&quot;</span> <span class="nl">AndParameters:</span><span class="n">params</span><span class="p">];</span>
</span><span class='line'>
</span><span class='line'><span class="n">NSDictionary</span> <span class="o">*</span><span class="n">user</span> <span class="o">=</span> <span class="p">(</span><span class="n">NSDictionary</span> <span class="o">*</span><span class="p">)</span> <span class="n">data</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="c1">// User Id</span>
</span><span class='line'><span class="n">user</span><span class="p">[</span><span class="s">&quot;Id&quot;</span><span class="p">];</span>
</span><span class='line'>
</span><span class='line'><span class="c1">// User Full Name</span>
</span><span class='line'><span class="n">user</span><span class="p">[</span><span class="s">&quot;FullName&quot;</span><span class="p">];</span>
</span></code></pre></td></tr></table></div></figure>


<p>Hope you find it useful. This SDK, as well as all the others are open source and can be found in <a href="https://github.com/Structum/iKnodeSdk">here</a>. You can use them as you wish.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Happy new Year 2013!]]></title>
    <link href="http://iknode.com//blog/2013/01/01/happy-new-year-2013/"/>
    <updated>2013-01-01T12:38:00-08:00</updated>
    <id>http://iknode.com//blog/2013/01/01/happy-new-year-2013</id>
    <content type="html"><![CDATA[<p>The iKnode team wishes you a very prosperous new year. We hope that all of your endevours are successful. We are very excited about this new year. We have so many new features and enhancements planned and we know you are going to love them.</p>

<p><img src="http://iknode.com//images/posts/2013/01/HappyNewYear2013.jpg"/></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Introducing the iKnode Chrome Store App]]></title>
    <link href="http://iknode.com//blog/2012/11/14/introducing-the-iknode-chrome-store-app/"/>
    <updated>2012-11-14T06:19:00-08:00</updated>
    <id>http://iknode.com//blog/2012/11/14/introducing-the-iknode-chrome-store-app</id>
    <content type="html"><![CDATA[<p>Hi there folks! this last weeks have been pretty exciting since there have been a lot of updates, we updated our SDK for .NET, Java, Android and Javascript and also our SDK for .NET is now available on NuGet, read more about it <a href='http://iknode.com/blog/2012/11/10/iknode-sdk-on-nuget/' target='_new'>here</a>.</p>

<p>We decided to submit our own app to the Chrome Web Store so it&#8217;ll be easier for the iKnode developers to access iKnode, now just a click away ;) for Google Chrome lovers, so just search for &#8220;iknode&#8221; on Web Store or click <a href='https://chrome.google.com/webstore/detail/iknode/nniobcbgfbahmocfpnaakkkahfcdiemi' target='_new'>here</a> to go directly to it.</p>

<p>We are working really hard to improve the iKnode experience, enjoy.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[iKnode SDK on NuGet]]></title>
    <link href="http://iknode.com//blog/2012/11/10/iknode-sdk-on-nuget/"/>
    <updated>2012-11-10T16:52:00-08:00</updated>
    <id>http://iknode.com//blog/2012/11/10/iknode-sdk-on-nuget</id>
    <content type="html"><![CDATA[<p>We are very excited about NuGet and we use it extensively in our source code. Today, we released the <a href="https://nuget.org/packages/iKnodeSdk">iKnode SDK for .NET</a> on NuGet.</p>

<p>You can install the SDK for your projects using:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>PM> Install-Package iKnodeSdk</span></code></pre></td></tr></table></div></figure>


<p>Don&#8217;t forget that you can always get the latest source code and binary releases directly from our <a href="https://github.com/Structum/iKnodeSdk">Github Page</a>. If you want to download the latest version of the SDK without using NuGet, you can do so by going to the <a href="https://github.com/Structum/iKnodeSdk/downloads">Downloads Section in Github</a>.</p>

<p>Happy Coding!!!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Happy Halloween!!!]]></title>
    <link href="http://iknode.com//blog/2012/10/30/happy-halloween/"/>
    <updated>2012-10-30T23:55:00-07:00</updated>
    <id>http://iknode.com//blog/2012/10/30/happy-halloween</id>
    <content type="html"><![CDATA[<center><img src="http://iknode.com//images/bag_300.png" title="Happy Halloween!!!" alt="Halloween Logo"/>
<h1>In this spooky day, we wish everybody a Happy Halloween!!! We are getting our costumes set, and our bags are ready to be filled with a lot of candy.</h1>
</center>


<br />


<p>By the way, the halloween icons used in this site are courtesy of RocketTheme Halloween Icon Pack 1 by RocketTheme - <a href="http://www.rockettheme.com">http://www.rockettheme.com</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Introducing the New iKnode SDK]]></title>
    <link href="http://iknode.com//blog/2012/10/30/introducing-the-new-iknode-sdk/"/>
    <updated>2012-10-30T21:36:00-07:00</updated>
    <id>http://iknode.com//blog/2012/10/30/introducing-the-new-iknode-sdk</id>
    <content type="html"><![CDATA[<p>Have you ever tried to call a Web Service from .Net or Javascript ? It is pretty simple. Right? This is true if you are only doing GET requests without security. Things start to get complicated once your start using security and doing POST requests.</p>

<p>There are frameworks that make it easier, but even after you reduce the complexity by adding a library to handle Web Requests, parsing adds to the problem. Thinking about these two problem we designed an SDK for iKnode Applications that makes it extremely simple to execute from your client.</p>

<p>First, by handling <em>ALL</em> Web Requests without your client having to know about the security or how to do POST requests. Second it parses the results as as native C# classes or Javascript objects.</p>

<p>One very important aspect of the new SDK, is that you learn it once in any language, and you learn it for the rest. Right now we are only supporting C# and Javascript, but the Android and iOS SDKs are on the way and will be handled in the same way, focused completly on consitency.</p>

<p>It&#8217;s time to look at some code. Let&#8217;s say that we are building a User Service which is used to manage User information in the cloud:</p>

<figure class='code'><figcaption><span>UserService iKnode Application  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
<span class='line-number'>80</span>
<span class='line-number'>81</span>
<span class='line-number'>82</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span>
</span><span class='line'><span class="k">using</span> <span class="nn">iKnode.Applications</span><span class="p">;</span>
</span><span class='line'><span class="k">using</span> <span class="nn">iKnodeSdk.UnitTest.Domain</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">namespace</span> <span class="nn">iKnodeSdkTest</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>    <span class="c1">/// Defines the User Service.</span>
</span><span class='line'>    <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'><span class="na"> [Application]</span>
</span><span class='line'>  <span class="k">public</span> <span class="k">class</span> <span class="nc">UserService</span>
</span><span class='line'>  <span class="p">{</span>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Gets the User First Name by its identifier.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;id&quot;&gt;User Identifier.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;User First Name/.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="nf">GetFirstNameById</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">return</span> <span class="s">&quot;Robert&quot;</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Gets the Most Common User First Name.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;Most Common User First Name/.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="nf">GetMostCommonFirstName</span><span class="p">()</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">return</span> <span class="s">&quot;John&quot;</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Gets the User by its identifier.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;id&quot;&gt;User Identifier.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;User Information.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="n">User</span> <span class="nf">GetById</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">if</span><span class="p">(</span><span class="n">id</span> <span class="p">!=</span> <span class="m">1</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">return</span> <span class="k">null</span><span class="p">;</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">return</span> <span class="k">new</span> <span class="nf">User</span><span class="p">(</span><span class="m">1</span><span class="p">,</span> <span class="k">new</span> <span class="n">FullName</span><span class="p">(</span><span class="s">&quot;John&quot;</span><span class="p">,</span> <span class="s">&quot;Doe&quot;</span><span class="p">));</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Saves the User Information.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;user&quot;&gt;User Information.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;User Identifier.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">int</span> <span class="nf">Save</span><span class="p">(</span><span class="n">User</span> <span class="n">user</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">if</span><span class="p">(</span><span class="n">user</span> <span class="p">==</span> <span class="k">null</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">return</span> <span class="p">-</span><span class="m">1</span><span class="p">;</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="c1">//TODO: Here your store the User Information.</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">return</span> <span class="n">user</span><span class="p">.</span><span class="n">Id</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Creates a new User with the Default Information.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;User Information.&lt;/returns&gt;        </span>
</span><span class='line'>        <span class="k">public</span> <span class="n">User</span> <span class="nf">CreateDefault</span><span class="p">()</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">return</span> <span class="k">new</span> <span class="nf">User</span><span class="p">(</span><span class="m">2</span><span class="p">,</span> <span class="k">new</span> <span class="n">FullName</span><span class="p">(</span><span class="s">&quot;Jane&quot;</span><span class="p">,</span> <span class="s">&quot;Doe&quot;</span><span class="p">));</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Creates a new User.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;id&quot;&gt;Identifier.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;name&quot;&gt;Name.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;User Information.&lt;/returns&gt;        </span>
</span><span class='line'>        <span class="k">public</span> <span class="n">User</span> <span class="nf">Create</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">,</span> <span class="n">FullName</span> <span class="n">name</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">return</span> <span class="k">new</span> <span class="nf">User</span><span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">name</span><span class="p">);</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>In this case we are going to have the following classes as part of the model to be shared by the service and the C# client. For the Javascript client the model is not required.</p>

<figure class='code'><figcaption><span>Model  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">namespace</span> <span class="nn">iKnodeSdkTest</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>    <span class="c1">/// Defines the Full Name class.</span>
</span><span class='line'>    <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'><span class="na">    [Serializable]</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">class</span> <span class="nc">FullName</span>
</span><span class='line'>    <span class="p">{</span>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// First Name.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="n">FirstName</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Last Name.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="n">LastName</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Initializes a new instance of the &lt;see cref=&quot;FullName&quot;/&gt; class.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;firstName&quot;&gt;First Name/&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;lastName&quot;&gt;Last Name.&lt;/param&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="nf">FullName</span><span class="p">(</span><span class="kt">string</span> <span class="n">firstName</span><span class="p">,</span> <span class="kt">string</span> <span class="n">lastName</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">this</span><span class="p">.</span><span class="n">FirstName</span> <span class="p">=</span> <span class="n">firstName</span><span class="p">;</span>
</span><span class='line'>            <span class="k">this</span><span class="p">.</span><span class="n">LastName</span> <span class="p">=</span> <span class="n">lastName</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>    <span class="c1">/// Defines the User class.</span>
</span><span class='line'>    <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'><span class="na">    [Serializable]</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">class</span> <span class="nc">User</span>
</span><span class='line'>    <span class="p">{</span>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Identifier.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">int</span> <span class="n">Id</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Full Name.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="n">FullName</span> <span class="n">Name</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Initializes a new instance of the &lt;see cref=&quot;User&quot;/&gt; class.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;id&quot;&gt;Identifier.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;name&quot;&gt;Name.&lt;/param&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="nf">User</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">,</span> <span class="n">FullName</span> <span class="n">name</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">this</span><span class="p">.</span><span class="n">Id</span> <span class="p">=</span> <span class="n">id</span><span class="p">;</span>
</span><span class='line'>            <span class="k">this</span><span class="p">.</span><span class="n">Name</span> <span class="p">=</span> <span class="n">name</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Now in the C# client side, you would call the UserService in the following way:</p>

<figure class='code'><figcaption><span>C# Client  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="c1">// Creating User Id 1 with Name jdoe.</span>
</span><span class='line'><span class="n">ApplicationClient</span> <span class="n">userSvc</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ApplicationClient</span><span class="p">(</span>
</span><span class='line'>                        <span class="s">&quot;https://api.iknode.com&quot;</span><span class="p">,</span>
</span><span class='line'>                        <span class="n">UserId</span><span class="p">,</span>
</span><span class='line'>                        <span class="n">ApiKey</span><span class="p">,</span>
</span><span class='line'>                        <span class="s">&quot;UserService&quot;</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'><span class="n">User</span> <span class="n">user</span> <span class="p">=</span> <span class="n">userSvc</span><span class="p">.</span><span class="n">Execute</span><span class="p">&lt;</span><span class="n">User</span><span class="p">&gt;(</span>
</span><span class='line'>                      <span class="s">&quot;Create&quot;</span><span class="p">,</span>
</span><span class='line'>                      <span class="k">new</span> <span class="nf">MethodParameter</span><span class="p">(</span><span class="s">&quot;id&quot;</span><span class="p">,</span> <span class="m">1</span><span class="p">),</span>
</span><span class='line'>                      <span class="k">new</span> <span class="nf">MethodParameter</span><span class="p">(</span><span class="s">&quot;name&quot;</span><span class="p">,</span> <span class="s">&quot;jdoe&quot;</span><span class="p">));</span>
</span></code></pre></td></tr></table></div></figure>


<p>Now in Javascript the same call would look like this:</p>

<figure class='code'><figcaption><span>Javascript Client  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'>   <span class="kd">var</span> <span class="nx">userSvc</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">iKnodeSdk</span><span class="p">.</span><span class="nx">ApplicationClient</span><span class="p">({</span>
</span><span class='line'>      <span class="nx">userId</span><span class="o">:</span> <span class="nx">USERID</span><span class="p">,</span>
</span><span class='line'>      <span class="nx">apiKey</span><span class="o">:</span> <span class="nx">APIKEY</span><span class="p">,</span>
</span><span class='line'>      <span class="nx">appName</span><span class="o">:</span> <span class="s2">&quot;UserService&quot;</span>
</span><span class='line'>  <span class="p">});</span>
</span><span class='line'>
</span><span class='line'>  <span class="kd">var</span> <span class="nx">user</span> <span class="o">=</span> <span class="nx">userSvc</span><span class="p">.</span><span class="nx">execute</span><span class="p">({</span>
</span><span class='line'>      <span class="nx">methodName</span><span class="o">:</span> <span class="s2">&quot;Create&quot;</span><span class="p">,</span>
</span><span class='line'>      <span class="nx">parameters</span><span class="o">:</span> <span class="p">[{</span>
</span><span class='line'>              <span class="nx">name</span><span class="o">:</span> <span class="s2">&quot;id&quot;</span><span class="p">,</span>
</span><span class='line'>              <span class="nx">value</span><span class="o">:</span> <span class="mi">1</span>
</span><span class='line'>          <span class="p">},{</span>
</span><span class='line'>              <span class="nx">name</span><span class="o">:</span> <span class="s2">&quot;name&quot;</span><span class="p">,</span>
</span><span class='line'>              <span class="nx">value</span><span class="o">:</span> <span class="s2">&quot;jdoe&quot;</span>
</span><span class='line'>          <span class="p">}</span>
</span><span class='line'>      <span class="p">]</span>
</span><span class='line'>  <span class="p">});</span>
</span></code></pre></td></tr></table></div></figure>


<p>It is as simple as that. The source code for the SDK can be found <a href="https://github.com/Structum/iKnodeSdk">here</a>. Each platform SDK has a set of Unit Tests that show how the SDK can be used.</p>

<p>If you have any questions don&#8217;t hesitate to ask questions in the <a href="http://iknode.uservoice.com">forums</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[We are launching at DEMO 2012]]></title>
    <link href="http://iknode.com//blog/2012/10/02/we-are-launching-at-demo-2012/"/>
    <updated>2012-10-02T15:26:00-07:00</updated>
    <id>http://iknode.com//blog/2012/10/02/we-are-launching-at-demo-2012</id>
    <content type="html"><![CDATA[<p>We are launching at DEMO Fall 2012!!! Look for us in the Pavilion in kiosk S12. As part of the launch we have posted the pricing, a new website and a special offer: anybody that <a href="https://manage.iknode.com/Registration.aspx"/>registers</a> during the month of October will get November free as well. No credit card is required, so go ahead and just signup if you haven&#8217;t already.</p>

<p>We want to thank our Beta users, we really appreciate your feedback. All your data and applications will still be there, and you will get the rest of the year free.</p>

<p>Finally We also want to thank Microsoft for sponsoring us to launch at DEMO. We have been working with Microsoft&#8217;s technologies for the past 10 years, and we are proud to be part of the Bizspark program.</p>

<p>And with no further ado, here are some pictures of the event:</p>

<p>Our Badges:
<img src="http://iknode.com//images/posts/2012/10/badges.jpg" title="DEMO Badges" alt="DEMO Badges" /></p>

<p>Beautifully created flyer for DEMO:
<img src="http://iknode.com//images/posts/2012/10/flyer.jpg" title="DEMO Flyer" alt="DEMO Flyer" /></p>

<p>iKnode Signage:
<img src="http://iknode.com//images/posts/2012/10/kiosk_signage.jpg" title="DEMO Signage" alt="DEMO Signage" /></p>

<p>iKnode kiosk&#8217;s next to Windows 8 Kiosk:
<img src="http://iknode.com//images/posts/2012/10/next-to-microsoft.jpg" title="Windows 8 Kiosk" alt="Windows 8 Kiosk" /></p>

<p>Sophie at the Kiosk:
<img src="http://iknode.com//images/posts/2012/10/iknode_kiosk.jpg" title="Sophie in the Kiosk" alt="Sophie in the Kiosk" /></p>

<p>Alex at the Kiosk:
<img src="http://iknode.com//images/posts/2012/10/alex.jpg" title="Alex in the Kiosk" alt="Alex in the Kiosk" /></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[New Dashboard Icons and Cleaner Console JSON viewer]]></title>
    <link href="http://iknode.com//blog/2012/09/18/new-dashboard-icons-and-cleaner-console-json-viewer/"/>
    <updated>2012-09-18T12:00:00-07:00</updated>
    <id>http://iknode.com//blog/2012/09/18/new-dashboard-icons-and-cleaner-console-json-viewer</id>
    <content type="html"><![CDATA[<p>Today we are excited to introduce two really cool features: Dashboard Icons for Applications and an improved JSON Viewer for Query Console Results. Without further ado, let&#8217;s jump to the details:</p>

<h2>Introducing Icons in the Dashboard</h2>

<p><img src="http://iknode.com//images/posts/2012/09/iknode_dashboard_icons.png" title="Dashboard Icons." alt="Dashboard Icons." /></p>

<p>Applications can now have their own icon for the Dashboard. This will make it easy to find apps in the dashboard, while also making it beautiful. Choose from 152 beautifully crafted icons by <a href="http://icondock.com/icons/sets/deck-complete-set">IconDock</a>.</p>

<!--more-->


<p>In order to set an icon for your app, all you have to do is go to the properties tab of your applicaiton and select an icon. By default all applicaitons have the &#8216;window&#8217; icon set. You can change it easily by selecting the icon that best identifies your app from the list of available icons.</p>

<p><img src="http://iknode.com//images/posts/2012/09/iknode_app_properties_icon.png" title="Application Properties" alt="Application Properties" /></p>

<h2>Improved JSON Viewer for the Query Console.</h2>

<p><img src="http://iknode.com//images/posts/2012/09/iknode_console_json_viewer.png" title="JSON Viewer" alt="JSON Viewer" /></p>

<p>The Query console is now friendlier by displaying the JSON results with a fresh JSON viewer. The JSON viewer makes it easier to browse through the results of your query by allowing the object collapse and expand, and you can still select, copy and paste to anotehr screen. So it pvodies the ability to browse JSON objects without loosing the flexibility of text results.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[New Code Editor Theme]]></title>
    <link href="http://iknode.com//blog/2012/08/20/new-code-editor-theme/"/>
    <updated>2012-08-20T00:34:00-07:00</updated>
    <id>http://iknode.com//blog/2012/08/20/new-code-editor-theme</id>
    <content type="html"><![CDATA[<p>We have been focusing so hard on making the platform bug-free and fast that we have neglected the User Interface for a while, specially the Code Editor. So we decided to give a little love to the UI.</p>

<!--more-->


<p>We had been using the default theme which defaults to the Monaco font (if you have it) on the editor. The problem is that the Monaco Font is created for a font rendering scheme that focuses on the shape of the font which looks blurry sometimtes like the Mac OS. But when you are developing in windows, Monaco looks too blurry, because Windows rendering algorithm forces the font into pixels. So we decided to put Consolas first (which looks amazing on Windows Systems) and then Monaco (which looks amazing in *nix and Mac).</p>

<p>We also decided to change the colors to match the site colors, and preferred a dark background. We created our own theme which we think it is pretty cool.</p>

<p>Let us know what you think. Here is an screenshot of the new theme:</p>

<ul class="post-gallery">
    <li class="clipwrapper">
        <a href="http://iknode.com//images/posts/2012/08/editorTheme.png" title="Application Editor Theme" class="fancybox clip">
           <img src="http://iknode.com//images/posts/2012/08/editorTheme.png" title="Editor Theme" alt="Editor Theme" class="center max-img" />
        </a>
    </li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Using Custom Objects in an iKnode Application]]></title>
    <link href="http://iknode.com//blog/2012/08/19/using-custom-objects-in-an-iknode-application/"/>
    <updated>2012-08-19T23:35:00-07:00</updated>
    <id>http://iknode.com//blog/2012/08/19/using-custom-objects-in-an-iknode-application</id>
    <content type="html"><![CDATA[<p>iKnode applications have supported native types as a return and as parameters since its inception. This obviously limited the information that could be received and returned from an iKnode application, and in the end also its functionality.</p>

<p>One way to solve this was to serialize the input and outputs of the application using a JSON Serializer (or an XML Serializer). This worked ok, but it poluted the iKnode application with unnecessary serialize/deserialize code, making the application code more difficult to maintain.</p>

<!--more-->


<p>The full purpose of iKnode is to make it extremely simple to create services in the cloud, automating things like security configuration, performance configuration and also serialization of custom objects.</p>

<p>We are proud to announce that iKnode now supports custom objects as input and as output. The way it works is with automatic serialization of custom objects into JSON.</p>

<p>Let&#8217;s try an example:</p>

<figure class='code'><figcaption><span>Custom Objects Test  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span>
</span><span class='line'><span class="k">using</span> <span class="nn">iKnode.Applications</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">namespace</span> <span class="nn">Applications</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>    <span class="c1">/// Defines the Custom Objects Test Application.</span>
</span><span class='line'>    <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'><span class="na">    [Application]</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">class</span> <span class="nc">CustomObjectsTest</span>
</span><span class='line'>    <span class="p">{</span>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Creates a Default User.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;remarks&gt;</span>
</span><span class='line'>        <span class="c1">/// This method tests the return of a custom object of Type &lt;c&gt;Client&lt;/c&gt;.</span>
</span><span class='line'>        <span class="c1">/// &lt;/remakrs&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;Client Information.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="n">Client</span> <span class="nf">CreateDefault</span><span class="p">()</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">return</span> <span class="k">new</span> <span class="nf">Client</span><span class="p">(</span><span class="m">1</span><span class="p">,</span> <span class="k">new</span> <span class="n">FullName</span><span class="p">(</span><span class="s">&quot;Alex&quot;</span><span class="p">,</span> <span class="s">&quot;Espinoza&quot;</span><span class="p">));</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Creates the select User.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;remarks&gt;</span>
</span><span class='line'>        <span class="c1">/// This method tests the return of a custom object of Type &lt;c&gt;Client&lt;/c&gt;.</span>
</span><span class='line'>        <span class="c1">/// And also the input of a custom object of Type &lt;c&gt;FullName&lt;/c&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;/remakrs&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;Client Information.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="n">Client</span> <span class="nf">CreateClient</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">,</span> <span class="n">FullName</span> <span class="n">name</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">return</span> <span class="k">new</span> <span class="nf">Client</span><span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">name</span><span class="p">);</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>    <span class="c1">/// Defines the Full Name class.</span>
</span><span class='line'>    <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'><span class="na">    [Serializable]</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">class</span> <span class="nc">FullName</span>
</span><span class='line'>    <span class="p">{</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="n">FirstName</span><span class="p">;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="n">LastName</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">public</span> <span class="nf">FullName</span><span class="p">(</span><span class="kt">string</span> <span class="n">firstName</span><span class="p">,</span> <span class="kt">string</span> <span class="n">lastName</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">this</span><span class="p">.</span><span class="n">FirstName</span> <span class="p">=</span> <span class="n">firstName</span><span class="p">;</span>
</span><span class='line'>            <span class="k">this</span><span class="p">.</span><span class="n">LastName</span> <span class="p">=</span> <span class="n">lastName</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>    <span class="c1">/// Defines the Client class.</span>
</span><span class='line'>    <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'><span class="na">    [Serializable]</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">class</span> <span class="nc">Client</span>
</span><span class='line'>    <span class="p">{</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">int</span> <span class="n">Id</span><span class="p">;</span>
</span><span class='line'>        <span class="k">public</span> <span class="n">FullName</span> <span class="n">Name</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">public</span> <span class="nf">Client</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">,</span> <span class="n">FullName</span> <span class="n">name</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="k">this</span><span class="p">.</span><span class="n">Id</span> <span class="p">=</span> <span class="n">id</span><span class="p">;</span>
</span><span class='line'>            <span class="k">this</span><span class="p">.</span><span class="n">Name</span> <span class="p">=</span> <span class="n">name</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>We have 3 classes in our application, one that defines the Application class <em>CustomObjectsTest</em> and two classes used as input and output for the application <em>Client</em> and <em>FullName</em>. As you can see, both the <em>Client</em> class and the <em>FullName</em> class have the serializable attribute. Classes used as input/output for the application need to be serializable to work.</p>

<p>Let&#8217;s execute the method CreateDefaultUser():
<img src="http://iknode.com//images/posts/2012/08/customobjExe1.png"></p>

<p>As you can see, the output is already formatted as a JSON object. If you look at the result in the JSON viewer, you&#8217;ll be able to see the full client object in a nicer way.</p>

<p>Now let&#8217;s try the other method, to test the FullName object as a parameter. Input the following JSON in the fullName parameter and then click execute:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>{"FirstName":"John","LastName":"Doe"}</span></code></pre></td></tr></table></div></figure>


<p>As you can see newly created object includes the correct full name:
<img src="http://iknode.com//images/posts/2012/08/customobjExe2.png"></p>

<p>Now when the iKnode Application gets call, it can be easily deserialized with the Newtonsoft JSON Library:</p>

<figure class='code'><figcaption><span>Deserialize the Client Object  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="n">Client</span> <span class="n">defaultClient</span> <span class="p">=</span> <span class="n">JsonConvert</span><span class="p">.</span><span class="n">DeserializeObject</span><span class="p">&lt;</span><span class="n">Client</span><span class="p">&gt;(</span><span class="n">jsonClient</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>And Serialized like this:</p>

<figure class='code'><figcaption><span>Serialize the FullName Object  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="kt">string</span> <span class="n">output</span> <span class="p">=</span> <span class="n">JsonConvert</span><span class="p">.</span><span class="n">SerializeObject</span><span class="p">(</span><span class="n">fullName</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>For this to work, you would need to share the Client and FullName object. This example includes the Client and FullName object inside of the iKnode App for demostration purposes, but I recommend you have those in an assembly that can be shared between your Mobile or Web App and the iKnode App.</p>

<p>Let us know what you think.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Using our Javascript Library]]></title>
    <link href="http://iknode.com//blog/2012/08/08/using-our-javascript-library/"/>
    <updated>2012-08-08T09:01:00-07:00</updated>
    <id>http://iknode.com//blog/2012/08/08/using-our-javascript-library</id>
    <content type="html"><![CDATA[<p>We just made available our Javascript library, which so far is pretty basic but will allow you to call your iKnode apps from your Web applications or mobile apps.</p>

<p>The purpose of this post is to show you the usage of this library, as an example we will develop a password manager app on iKnode, so basically it will allow us to:</p>

<ul>
<li>Store a new password entry.</li>
<li>List current passwords.</li>
<li>Update and delete passwords.</li>
</ul>


<!--more-->


<p>So our password entry which in this case we&#8217;d call Credential, consists of the following fields:</p>

<ul>
<li>Id</li>
<li>Name</li>
<li>Login</li>
<li>Password</li>
</ul>


<p>Ok, so the first step is to create our iKnode application, so we go ahead to iKnode Command Center Application Editor and code. This application was shown as a demo in MobileDevNJ</p>

<figure class='code'><figcaption><span>Password Manager  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
<span class='line-number'>80</span>
<span class='line-number'>81</span>
<span class='line-number'>82</span>
<span class='line-number'>83</span>
<span class='line-number'>84</span>
<span class='line-number'>85</span>
<span class='line-number'>86</span>
<span class='line-number'>87</span>
<span class='line-number'>88</span>
<span class='line-number'>89</span>
<span class='line-number'>90</span>
<span class='line-number'>91</span>
<span class='line-number'>92</span>
<span class='line-number'>93</span>
<span class='line-number'>94</span>
<span class='line-number'>95</span>
<span class='line-number'>96</span>
<span class='line-number'>97</span>
<span class='line-number'>98</span>
<span class='line-number'>99</span>
<span class='line-number'>100</span>
<span class='line-number'>101</span>
<span class='line-number'>102</span>
<span class='line-number'>103</span>
<span class='line-number'>104</span>
<span class='line-number'>105</span>
<span class='line-number'>106</span>
<span class='line-number'>107</span>
<span class='line-number'>108</span>
<span class='line-number'>109</span>
<span class='line-number'>110</span>
<span class='line-number'>111</span>
<span class='line-number'>112</span>
<span class='line-number'>113</span>
<span class='line-number'>114</span>
<span class='line-number'>115</span>
<span class='line-number'>116</span>
<span class='line-number'>117</span>
<span class='line-number'>118</span>
<span class='line-number'>119</span>
<span class='line-number'>120</span>
<span class='line-number'>121</span>
<span class='line-number'>122</span>
<span class='line-number'>123</span>
<span class='line-number'>124</span>
<span class='line-number'>125</span>
<span class='line-number'>126</span>
<span class='line-number'>127</span>
<span class='line-number'>128</span>
<span class='line-number'>129</span>
<span class='line-number'>130</span>
<span class='line-number'>131</span>
<span class='line-number'>132</span>
<span class='line-number'>133</span>
<span class='line-number'>134</span>
<span class='line-number'>135</span>
<span class='line-number'>136</span>
<span class='line-number'>137</span>
<span class='line-number'>138</span>
<span class='line-number'>139</span>
<span class='line-number'>140</span>
<span class='line-number'>141</span>
<span class='line-number'>142</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span>
</span><span class='line'><span class="k">using</span> <span class="nn">System.Text</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">using</span> <span class="nn">iKnode.Applications</span><span class="p">;</span>
</span><span class='line'><span class="k">using</span> <span class="nn">iKnode.Applications.Data</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">namespace</span> <span class="nn">MobileDevNJ</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>    <span class="c1">/// Defines the Password Manager Application.</span>
</span><span class='line'>    <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'><span class="na">    [Application]</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">class</span> <span class="nc">PasswordManager</span>
</span><span class='line'>    <span class="p">{</span>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Executing User Identifier.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="k">private</span> <span class="k">static</span> <span class="k">readonly</span> <span class="n">Guid</span> <span class="n">UserId</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Guid</span><span class="p">(</span><span class="s">&quot;&quot;</span><span class="p">);</span> <span class="c1">// Put your userId here.</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Repository Instance.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="k">private</span> <span class="k">static</span> <span class="n">DocumentRepository</span> <span class="n">Repository</span> <span class="p">=</span> <span class="k">new</span> <span class="n">DocumentRepository</span><span class="p">(</span><span class="n">UserId</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Collection Name.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="k">private</span> <span class="k">static</span> <span class="k">readonly</span> <span class="kt">string</span> <span class="n">CollectionName</span> <span class="p">=</span> <span class="s">&quot;PasswordManager&quot;</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Returns the list of items.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;List of Items in JSON.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="nf">GetList</span><span class="p">()</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="n">PagedList</span><span class="p">&lt;</span><span class="n">Document</span><span class="p">&gt;</span> <span class="n">items</span> <span class="p">=</span> <span class="n">Repository</span><span class="p">.</span><span class="n">GetPagedList</span><span class="p">(</span><span class="n">CollectionName</span><span class="p">);</span>
</span><span class='line'>            <span class="k">return</span> <span class="n">DocumentFactory</span><span class="p">.</span><span class="n">DocListToJson</span><span class="p">(</span><span class="n">items</span><span class="p">.</span><span class="n">List</span><span class="p">).</span><span class="n">Replace</span><span class="p">(</span><span class="n">Environment</span><span class="p">.</span><span class="n">NewLine</span><span class="p">,</span> <span class="n">String</span><span class="p">.</span><span class="n">Empty</span><span class="p">);</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Returns the selected item (if found) by identifier.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;id&quot;&gt;Item identifier.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;Found Item in JSON, &lt;c&gt;String.Empty&lt;/c&gt; otherwise..&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="nf">GetById</span><span class="p">(</span><span class="kt">string</span> <span class="n">id</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="n">Document</span> <span class="n">item</span> <span class="p">=</span> <span class="n">Repository</span><span class="p">.</span><span class="n">QueryScalar</span><span class="p">(</span><span class="n">CollectionName</span><span class="p">,</span> <span class="s">&quot;{ \&quot;Id\&quot;: \&quot;&quot;</span><span class="p">+</span><span class="n">id</span><span class="p">+</span><span class="s">&quot;\&quot; }&quot;</span><span class="p">);</span>
</span><span class='line'>            <span class="k">if</span><span class="p">(</span><span class="n">item</span> <span class="p">!=</span> <span class="k">null</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">return</span> <span class="n">item</span><span class="p">.</span><span class="n">ToJson</span><span class="p">();</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">return</span> <span class="n">String</span><span class="p">.</span><span class="n">Empty</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Returns the selected item (if found) by name.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;name&quot;&gt;Item name.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;Found Item in JSON, &lt;c&gt;String.Empty&lt;/c&gt; otherwise.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="nf">GetByName</span><span class="p">(</span><span class="kt">string</span> <span class="n">name</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="n">Document</span> <span class="n">item</span> <span class="p">=</span> <span class="n">Repository</span><span class="p">.</span><span class="n">QueryScalar</span><span class="p">(</span><span class="n">CollectionName</span><span class="p">,</span> <span class="s">&quot;{ \&quot;Name\&quot;: \&quot;&quot;</span><span class="p">+</span><span class="n">name</span><span class="p">+</span><span class="s">&quot;\&quot; }&quot;</span><span class="p">);</span>
</span><span class='line'>            <span class="k">if</span><span class="p">(</span><span class="n">item</span> <span class="p">!=</span> <span class="k">null</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">return</span> <span class="n">item</span><span class="p">.</span><span class="n">ToJson</span><span class="p">();</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">return</span> <span class="n">String</span><span class="p">.</span><span class="n">Empty</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Adds a new item and returns the item&#39;s identifier if successful.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;name&quot;&gt;Item Name.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;login&quot;&gt;Item Login.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;password&quot;&gt;Item Password.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;New Item Identifier.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="nf">AddNew</span><span class="p">(</span><span class="kt">string</span> <span class="n">name</span><span class="p">,</span> <span class="kt">string</span> <span class="n">login</span><span class="p">,</span> <span class="kt">string</span> <span class="n">password</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="n">Document</span> <span class="n">item</span> <span class="p">=</span> <span class="n">CreateItem</span><span class="p">(</span><span class="k">null</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">login</span><span class="p">,</span> <span class="n">password</span><span class="p">);</span>
</span><span class='line'>            <span class="n">item</span><span class="p">[</span><span class="s">&quot;Id&quot;</span><span class="p">]</span> <span class="p">=</span> <span class="n">Repository</span><span class="p">.</span><span class="n">Save</span><span class="p">(</span><span class="n">item</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">return</span> <span class="n">item</span><span class="p">[</span><span class="s">&quot;Id&quot;</span><span class="p">];</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Updates an existing item.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;id&quot;&gt;Item Identifier.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;name&quot;&gt;Item Name.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;login&quot;&gt;Item Login.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;password&quot;&gt;Item Password.&lt;/param&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="k">void</span> <span class="nf">Update</span><span class="p">(</span><span class="kt">string</span> <span class="n">id</span><span class="p">,</span> <span class="kt">string</span> <span class="n">name</span><span class="p">,</span> <span class="kt">string</span> <span class="n">login</span><span class="p">,</span> <span class="kt">string</span> <span class="n">password</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="n">Document</span> <span class="n">item</span> <span class="p">=</span> <span class="n">Repository</span><span class="p">.</span><span class="n">QueryScalar</span><span class="p">(</span><span class="n">CollectionName</span><span class="p">,</span> <span class="s">&quot;{ \&quot;Id\&quot;: \&quot;&quot;</span><span class="p">+</span><span class="n">id</span><span class="p">+</span><span class="s">&quot;\&quot; } &quot;</span><span class="p">);</span>
</span><span class='line'>            <span class="k">if</span><span class="p">(</span><span class="n">item</span> <span class="p">==</span> <span class="k">null</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">throw</span> <span class="k">new</span> <span class="nf">Exception</span><span class="p">(</span><span class="s">&quot;Item with id &#39;&quot;</span><span class="p">+</span><span class="n">id</span><span class="p">+</span><span class="s">&quot;&#39; not found.&quot;</span><span class="p">);</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="n">item</span><span class="p">[</span><span class="s">&quot;Name&quot;</span><span class="p">]</span> <span class="p">=</span> <span class="n">name</span><span class="p">;</span>
</span><span class='line'>            <span class="n">item</span><span class="p">[</span><span class="s">&quot;Login&quot;</span><span class="p">]</span> <span class="p">=</span> <span class="n">login</span><span class="p">;</span>
</span><span class='line'>            <span class="n">item</span><span class="p">[</span><span class="s">&quot;Password&quot;</span><span class="p">]</span> <span class="p">=</span> <span class="n">password</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>            <span class="n">Repository</span><span class="p">.</span><span class="n">Save</span><span class="p">(</span><span class="n">item</span><span class="p">);</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Deletes an existing item.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;id&quot;&gt;Item Identifier.&lt;/param&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="k">void</span> <span class="nf">Delete</span><span class="p">(</span><span class="kt">string</span> <span class="n">id</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="n">Document</span> <span class="n">item</span> <span class="p">=</span> <span class="n">Repository</span><span class="p">.</span><span class="n">QueryScalar</span><span class="p">(</span><span class="n">CollectionName</span><span class="p">,</span> <span class="s">&quot;{ \&quot;Id\&quot;: \&quot;&quot;</span><span class="p">+</span><span class="n">id</span><span class="p">+</span><span class="s">&quot;\&quot; } &quot;</span><span class="p">);</span>
</span><span class='line'>            <span class="k">if</span><span class="p">(</span><span class="n">item</span> <span class="p">==</span> <span class="k">null</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">throw</span> <span class="k">new</span> <span class="nf">Exception</span><span class="p">(</span><span class="s">&quot;Item with id &#39;&quot;</span><span class="p">+</span><span class="n">id</span><span class="p">+</span><span class="s">&quot;&#39; not found.&quot;</span><span class="p">);</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="n">Repository</span><span class="p">.</span><span class="n">Delete</span><span class="p">(</span><span class="n">item</span><span class="p">);</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Creates an Item Document.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;id&quot;&gt;Item Identifier.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;name&quot;&gt;Item Name.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;login&quot;&gt;Item Login.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;password&quot;&gt;Item Password.&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;Item Document.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">private</span> <span class="k">static</span> <span class="n">Document</span> <span class="nf">CreateItem</span><span class="p">(</span><span class="kt">string</span> <span class="n">id</span><span class="p">,</span> <span class="kt">string</span> <span class="n">name</span><span class="p">,</span> <span class="kt">string</span> <span class="n">login</span><span class="p">,</span> <span class="kt">string</span> <span class="n">password</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="n">Document</span> <span class="n">item</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Document</span><span class="p">(</span><span class="n">CollectionName</span><span class="p">);</span>
</span><span class='line'>            <span class="n">item</span><span class="p">[</span><span class="s">&quot;Name&quot;</span><span class="p">]</span> <span class="p">=</span> <span class="n">name</span><span class="p">;</span>
</span><span class='line'>            <span class="n">item</span><span class="p">[</span><span class="s">&quot;Login&quot;</span><span class="p">]</span> <span class="p">=</span> <span class="n">login</span><span class="p">;</span>
</span><span class='line'>            <span class="n">item</span><span class="p">[</span><span class="s">&quot;Password&quot;</span><span class="p">]</span> <span class="p">=</span> <span class="n">password</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">if</span><span class="p">(!</span><span class="n">String</span><span class="p">.</span><span class="n">IsNullOrEmpty</span><span class="p">(</span><span class="n">id</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>                <span class="n">item</span><span class="p">[</span><span class="s">&quot;Id&quot;</span><span class="p">]</span> <span class="p">=</span> <span class="n">id</span><span class="p">;</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">return</span> <span class="n">item</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>So the application basically provides methods for the usual CRUD operations, just as a reminder, only the public methods in your iKnode app will be, let&#8217;s say, callable as tasks, the private method will not be visible, it is more a support method.</p>

<p>Then we save, compile and publish our app and make sure it appears in our app library:</p>

<p><img src="http://iknode.com//images/posts/2012/08/passwdmanager_applibrary.png"></p>

<p>Remeber to set the name of your app in the Properties tab in the editor, the Class does not act as the application name. So let&#8217;s go ahead and test our new app:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>curl -X POST
</span><span class='line'>     -d "{\"parameters\":\"{}\"}"
</span><span class='line'>     -H "Content-Type:application/json"
</span><span class='line'>     -H "iKnode-UserId:&lt;YOUR_OWN_USER_ID&gt;"
</span><span class='line'>     -H "iKnode-ApiKey:&lt;YOU_OWN_API_KEY&gt;"
</span><span class='line'>     https://api.iknode.com/Applications/execute/PasswordManager/GetList</span></code></pre></td></tr></table></div></figure>


<p>We should get a JSON array of credential entries.</p>

<p>The next step is to show how to call this iKnode app from our web app, we&#8217;ll develop a simple chrome extension that will show a grid with the current passwords, we&#8217;d be using <a href="http://www.sencha.com/products/extjs/">ExtJS 4.1</a> to render our widgets. You can browse the example extension <a href="https://github.com/jgemedina/iKnodeAgentChromeExt">here</a>.</p>

<p>As you can see there&#8217;s a file called <strong>iknode-client-0.1.min.js</strong> which is our library, this is a minified version but you should be able to view it <a href="https://github.com/aespinoza/iKnodeClients/tree/master/Javascript">here</a> in our clients repository.</p>

<p>Edit <strong>agent.js</strong> and go near line 59, this is where we create an instance of the client and provide our user id and api key:</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='js'><span class='line'><span class="kd">var</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">iknode</span><span class="p">.</span><span class="nx">Client</span><span class="p">({</span><span class="nx">userId</span><span class="o">:</span><span class="s1">&#39;&lt;YOUR_USER_ID&gt;&#39;</span> <span class="p">,</span> <span class="nx">apiKey</span><span class="o">:</span> <span class="s1">&#39;&lt;YOUR_APIKEY_ID&gt;&#39;</span><span class="p">});</span>
</span></code></pre></td></tr></table></div></figure>


<p>Then you just need to call the <code>exec(config)</code> function, where config has the following structure:</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='js'><span class='line'><span class="p">{</span> <span class="nx">task</span><span class="o">:</span> <span class="s1">&#39;taskexpr&#39;</span><span class="p">,</span> <span class="nx">params</span><span class="o">:</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="p">[</span><span class="nx">callback</span><span class="p">]</span><span class="o">:</span><span class="s1">&#39;&#39;</span><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>The field task must contain the task we want to execute, the task name follows the pattern <em>ApplicationName</em>:<em>Method</em>, so in our case we want to list the credentials, thus, our task would be <strong>PasswordManager</strong>:<strong>GetList</strong> considering you did not change the method names from the example iKnode app provided above and you set your app name to be PasswordManager, if choosed a different application name you must use that one instead. The <em>callback</em> field is optional, you can avoid it if you are executing and don&#8217;t care about the server response.</p>

<p>Our call looks like this:</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='js'><span class='line'><span class="nx">response</span> <span class="o">=</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">({</span> <span class="nx">task</span><span class="o">:</span> <span class="s1">&#39;PasswordManager:GetList&#39;</span><span class="p">,</span>
</span><span class='line'>           <span class="nx">params</span><span class="o">:</span> <span class="nx">iknode</span><span class="p">.</span><span class="nx">Client</span><span class="p">.</span><span class="nx">EMPTY_PARAMS</span><span class="p">,</span>
</span><span class='line'>           <span class="nx">callback</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                 <span class="c1">// callback method body</span>
</span><span class='line'>                 <span class="p">}});</span>
</span></code></pre></td></tr></table></div></figure>


<p>As you can see we provided the task name we mentioned, and as for the parameters we are using a constant already defined in our library for empty params, you should be using it in case that your tasks requires no parameters, but if we need to send the password name, our call would be</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='js'><span class='line'><span class="nx">response</span> <span class="o">=</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">({</span> <span class="nx">task</span><span class="o">:</span> <span class="s1">&#39;PasswordManager:GetByName&#39;</span><span class="p">,</span>
</span><span class='line'>           <span class="nx">params</span><span class="o">:</span> <span class="s2">&quot;{\&quot;parameters\&quot;:\&quot;{&#39;name&#39;:&#39;credential_name&#39;}\&quot;}&quot;</span><span class="p">,</span>
</span><span class='line'>           <span class="nx">callback</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                 <span class="c1">// callback method body</span>
</span><span class='line'>                 <span class="p">}});</span>
</span></code></pre></td></tr></table></div></figure>


<p>You should be able to see the full callback method in the example code, we process the response text a bit, the <em>result</em> parameter constains the raw <em>responseText</em> obtained from the server, and then we parse to get an array of objects which in this case we iterate to populate the <em>GridPanel</em>.</p>

<p>Hope this post helps to get you started with our javascript library, we&#8217;d be pleased to hear comments from you or help you solve any doubts you might have.</p>

<p>Happy coding!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Introducing the Social Connector]]></title>
    <link href="http://iknode.com//blog/2012/08/03/social-connector/"/>
    <updated>2012-08-03T23:17:00-07:00</updated>
    <id>http://iknode.com//blog/2012/08/03/social-connector</id>
    <content type="html"><![CDATA[<p>We know how important it is to share, share whatever comes to our minds no matter what it is for. We have released a new feature called &#8220;Social Connector&#8221;, this will allow our users to share content from their iKnode apps to Social Accounts, with the simplicity of 2 lines of code. Right now we are supporting Twitter and Facebook services, we allow our users to post tweets or content to the user Facebook feed.</p>

<p>It is also very easy to set this up, once you are in Command Center locate the section called &#8220;Social Connector&#8221;:</p>

<p><img src="http://iknode.com//images/posts/2012/07/social-connector-section.png"></p>

<p>This will display on the right panel two buttons</p>

<p><img src="http://iknode.com//images/posts/2012/07/connect-buttons.png"></p>

<p>Each of those buttons will begin the traditional authentication/authorization process, if you are already logged on those services you will just have to authorize our app, otherwise you will have to authenticate against the service first, what it is going to happen is that we are going to store your access tokens in your user storage, the collection will be called social media, so you can just look at it right away after you authorize iKnode to access your social accounts.</p>

<p>If you have multiple accounts, iKnode will handle that by naming your token records so you can choose which one to use in your apps. This is how the records will look like:</p>

<p><img src="http://iknode.com//images/posts/2012/07/tokens-collection.png"></p>

<p>among other columns, you should see the ones shown below, of course you will a token string for each document (record) in the collection. What you should consider is the column name, on your apps you would refer to this tokens by the name, so let&#8217;s say if you wanted to post some random message to one of your twitter accounts, you would have to use the name of the token record to use, you can of couse edit the document and change the name to whatever you like, something that would make more sense to you than twitter1, twitter2, etc.</p>

<p>Now, how to use this? easy, take a look at the iKnode app shown below, your apps method &#8216;Shout&#8217; will try to post a message (provided as a parameter) to facebook and twitter, we will make use of our twitter and facebook accounts, twitter1 and facebook1 respectively.</p>

<figure class='code'><figcaption><span>Social Poster iKnode Application  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span>
</span><span class='line'><span class="k">using</span> <span class="nn">iKnode.Applications</span><span class="p">;</span>
</span><span class='line'><span class="k">using</span> <span class="nn">iKnode.Applications.Social.Clients</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">namespace</span> <span class="nn">Applications</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'><span class="na">    [Application]</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">class</span> <span class="nc">SocialPoster</span>
</span><span class='line'>    <span class="p">{</span>
</span><span class='line'>        <span class="k">private</span> <span class="n">TwitterClient</span> <span class="n">twClient</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TwitterClient</span><span class="p">(</span><span class="s">&quot;twitter1&quot;</span><span class="p">,</span> <span class="s">&quot;yourNumericUserId&quot;</span><span class="p">);</span>
</span><span class='line'>        <span class="k">private</span> <span class="n">FacebookClient</span> <span class="n">fbClient</span> <span class="p">=</span> <span class="k">new</span> <span class="n">FacebookClient</span><span class="p">(</span><span class="s">&quot;facebook1&quot;</span><span class="p">,</span> <span class="s">&quot;yourNumericUserId&quot;</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="nf">Shout</span><span class="p">(</span><span class="kt">string</span> <span class="n">message</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="kt">string</span> <span class="n">result</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">try</span> <span class="p">{</span>
</span><span class='line'>                <span class="n">twClient</span><span class="p">.</span><span class="n">Post</span><span class="p">(</span><span class="n">String</span><span class="p">.</span><span class="n">Concat</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="s">&quot;!!&quot;</span><span class="p">));</span>
</span><span class='line'>                <span class="n">fbClient</span><span class="p">.</span><span class="n">Post</span><span class="p">(</span><span class="n">String</span><span class="p">.</span><span class="n">Concat</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="s">&quot;!!&quot;</span><span class="p">));</span>
</span><span class='line'>
</span><span class='line'>                <span class="n">result</span> <span class="p">=</span> <span class="s">&quot;true&quot;</span><span class="p">;</span>
</span><span class='line'>            <span class="p">}</span> <span class="k">catch</span><span class="p">(</span><span class="n">Exception</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="n">result</span> <span class="p">=</span> <span class="s">&quot;false&quot;</span><span class="p">;</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">return</span> <span class="n">result</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Of course you have to provide your own user id, you can take your user id from the profile section, just click your name on the top right corner of Command Center and you should see your user information, your user id should be the first field.</p>

<p>Copy as paste this app in the Command Center application editor, save, compile and execute to test! you should be able to see the text provided as a parameter to the <strong>Shout</strong> method in your Twitter and Facebook timelines with the string &#8220;!!&#8221; as a suffix.</p>

<p>Happy iKnode coding!.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[It's Alive! Alive!: Apps that Create and Execute other Apps]]></title>
    <link href="http://iknode.com//blog/2012/07/26/its-alive-alive-apps-that-create-and-execute-other-apps/"/>
    <updated>2012-07-26T11:53:00-07:00</updated>
    <id>http://iknode.com//blog/2012/07/26/its-alive-alive-apps-that-create-and-execute-other-apps</id>
    <content type="html"><![CDATA[<p>A few weeks ago we were talking to an iKnode user which was trying to write a code generator. While trying to help solve the problem, we came up with a solution that ended up being a really cool feature. Apps that Write other Apps.</p>

<p>We were already writing a service to allow iKnode Apps to call others, but to Create, Compile and Publish Applications from an iKnode Application was an amazing idea which would give iKnode Apps a lot more power and flexibility. We went ahead to spec, design and implement the feature. And today, we unveil the Frankestein Feature as we like to call it.</p>

<p>The iKnode engine is already implemented as a set of Services which are only accessible from the inside of our network. When an iKnode application runs, it is running inside our network, so it made sense to just allow iKnode Apps to just call our services. We created a service in the assembly iKnode.Applications (which is used by <em>ALL</em> iKnode Applications) to simplify the call to our internal service, allowing the caller to Save, Publish and Execute iKnode Applications.</p>

<h2>Programming Interface</h2>

<p>The Service is called &#8220;iKnode.Applications.ApplicationService&#8221; (<a href="http://docs.iknode.com/apps/html/9db5bcfe-908a-14bb-e9d3-a91d1ab32bd5.htm">docs</a>) and handles &#8220;Application&#8221; (<a href="http://docs.iknode.com/apps/html/c6bee0ed-cbe3-42eb-7e81-6611d322a363.htm">docs</a>) objects. The Application class represents an application for the service. Let&#8217;s look at the structure:</p>

<p><img src="http://iknode.com//images/posts/2012/07/ApplicationClass.png" title="Application Class" alt="Application Class" class="center max-img" /></p>

<p>The ApplicationService is the class that allows the application to perform operations in the iKnode engine. The structure is defined below:</p>

<p><img src="http://iknode.com//images/posts/2012/07/ApplicationServiceClass.png" title="Application Service Class" alt="Application Service Class" class="center max-img" /></p>

<p>The important operations for the Application Service are:</p>

<h3>Save</h3>

<p>Allows the Application to be Saved. There is not compilation or validation of code. A &#8216;Saved&#8217; application is considered in Draft mode, which means it cannot be executed. Use this method to store partial or drafts of an application.</p>

<figure class='code'><figcaption><span>C# Code  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="n">Guid</span> <span class="n">userId</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Guid</span><span class="p">(</span><span class="s">&quot;YOUR_USERID&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">ApplicationService</span> <span class="n">svc</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ApplicationService</span><span class="p">(</span><span class="n">userId</span><span class="p">);</span>
</span><span class='line'><span class="n">svc</span><span class="p">.</span><span class="n">Save</span><span class="p">(</span><span class="n">app</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<h3>Publish</h3>

<p>Allows the Application to published. The Application is first saved, then compiled and then published so that it can be executed. If there is any compilation errors, and exception will be generated. A successfully published Application can be Executed.</p>

<figure class='code'><figcaption><span>C# Code  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="n">Guid</span> <span class="n">userId</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Guid</span><span class="p">(</span><span class="s">&quot;YOUR_USERID&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">ApplicationService</span> <span class="n">svc</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ApplicationService</span><span class="p">(</span><span class="n">userId</span><span class="p">);</span>
</span><span class='line'><span class="n">svc</span><span class="p">.</span><span class="n">Publish</span><span class="p">(</span><span class="n">app</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<h3>Execute</h3>

<p>Executes the Application and returns the application result if any.</p>

<figure class='code'><figcaption><span>C# Code  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="n">Guid</span> <span class="n">userId</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Guid</span><span class="p">(</span><span class="s">&quot;YOUR_USERID&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">ApplicationService</span> <span class="n">svc</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ApplicationService</span><span class="p">(</span><span class="n">userId</span><span class="p">);</span>
</span><span class='line'><span class="n">svc</span><span class="p">.</span><span class="n">Execute</span><span class="p">(</span><span class="n">appName</span><span class="p">,</span> <span class="n">appMethod</span><span class="p">,</span> <span class="n">methodParamsInJson</span><span class="p">));</span>
</span></code></pre></td></tr></table></div></figure>


<h3>Remove</h3>

<p>Removes an existing application even if the application has been published. If removal is successful the Application will not longer be available.</p>

<figure class='code'><figcaption><span>C# Code  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="n">Guid</span> <span class="n">userId</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Guid</span><span class="p">(</span><span class="s">&quot;YOUR_USERID&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">ApplicationService</span> <span class="n">svc</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ApplicationService</span><span class="p">(</span><span class="n">userId</span><span class="p">);</span>
</span><span class='line'><span class="n">svc</span><span class="p">.</span><span class="n">Remove</span><span class="p">(</span><span class="n">app</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<h3>GetById</h3>

<p>Returns the Application Information by using the Application Identifier. It will return null if not found.</p>

<figure class='code'><figcaption><span>C# Code  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="n">Guid</span> <span class="n">userId</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Guid</span><span class="p">(</span><span class="s">&quot;YOUR_USERID&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">Guid</span> <span class="n">appId</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Guid</span><span class="p">(</span><span class="s">&quot;APPID&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">ApplicationService</span> <span class="n">svc</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ApplicationService</span><span class="p">(</span><span class="n">userId</span><span class="p">);</span>
</span><span class='line'><span class="n">svc</span><span class="p">.</span><span class="n">GetById</span><span class="p">(</span><span class="n">appId</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<h3>GetByName</h3>

<p>Returns the Application Information by using the Application Name. It will return null if not found.</p>

<figure class='code'><figcaption><span>C# Code  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="n">Guid</span> <span class="n">userId</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Guid</span><span class="p">(</span><span class="s">&quot;YOUR_USERID&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">ApplicationService</span> <span class="n">svc</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ApplicationService</span><span class="p">(</span><span class="n">userId</span><span class="p">);</span>
</span><span class='line'><span class="n">svc</span><span class="p">.</span><span class="n">GetByName</span><span class="p">(</span><span class="n">appName</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Example</h2>

<p>We have built an example that covers all of the operations. Throughout this example we will class this Application &#8220;The Host&#8221;. The host&#8217;s main purpose is to create the Guest Application if it doesn&#8217;t exist, and then run it. But if the application already exists then it sohuld only execute it.</p>

<p>The code for the Host is shown below:</p>

<figure class='code'><figcaption><span>C# Code  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
<span class='line-number'>80</span>
<span class='line-number'>81</span>
<span class='line-number'>82</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span>
</span><span class='line'><span class="k">using</span> <span class="nn">System.Text</span><span class="p">;</span>
</span><span class='line'><span class="k">using</span> <span class="nn">iKnode.Applications</span><span class="p">;</span>
</span><span class='line'><span class="k">using</span> <span class="nn">System.Collections.Generic</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">namespace</span> <span class="nn">Applications</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>    <span class="c1">/// Defines the Application Service Test.</span>
</span><span class='line'>    <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'><span class="na">    [Application]</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">class</span> <span class="nc">ApplicationServiceTest</span>
</span><span class='line'>    <span class="p">{</span>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// User Identifier.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="k">private</span> <span class="k">static</span> <span class="k">readonly</span> <span class="n">Guid</span> <span class="n">UserId</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Guid</span><span class="p">(</span><span class="s">&quot;YOUR_USERID&quot;</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Tests the Application Service.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;Trace Information.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">public</span> <span class="kt">string</span> <span class="nf">TestAppService</span><span class="p">()</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="kt">string</span> <span class="n">appName</span> <span class="p">=</span> <span class="s">&quot;GuestApp&quot;</span><span class="p">;</span>
</span><span class='line'>            <span class="n">StringBuilder</span> <span class="n">trace</span> <span class="p">=</span> <span class="k">new</span> <span class="n">StringBuilder</span><span class="p">();</span>
</span><span class='line'>
</span><span class='line'>            <span class="n">ApplicationService</span> <span class="n">svc</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ApplicationService</span><span class="p">(</span><span class="n">UserId</span><span class="p">);</span>
</span><span class='line'>            <span class="n">Application</span> <span class="n">app</span> <span class="p">=</span> <span class="n">svc</span><span class="p">.</span><span class="n">GetByName</span><span class="p">(</span><span class="n">appName</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">if</span><span class="p">(</span><span class="n">app</span> <span class="p">==</span> <span class="k">null</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="n">trace</span><span class="p">.</span><span class="n">AppendLine</span><span class="p">(</span><span class="s">&quot;App was not found!&quot;</span><span class="p">);</span>
</span><span class='line'>                <span class="n">Guid</span> <span class="n">id</span> <span class="p">=</span> <span class="k">this</span><span class="p">.</span><span class="n">CreateApplication</span><span class="p">(</span><span class="n">appName</span><span class="p">);</span>
</span><span class='line'>                <span class="n">trace</span><span class="p">.</span><span class="n">AppendLine</span><span class="p">(</span><span class="s">&quot;App &#39;&quot;</span><span class="p">+</span><span class="n">appName</span><span class="p">+</span><span class="s">&quot;&#39; created with Id - &quot;</span><span class="p">+</span><span class="n">id</span><span class="p">);</span>
</span><span class='line'>            <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span><span class='line'>                <span class="n">trace</span><span class="p">.</span><span class="n">AppendLine</span><span class="p">(</span><span class="s">&quot;App &#39;&quot;</span><span class="p">+</span><span class="n">appName</span><span class="p">+</span><span class="s">&quot;&#39; found!&quot;</span><span class="p">);</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="n">trace</span><span class="p">.</span><span class="n">AppendLine</span><span class="p">(</span><span class="s">&quot;Application Executed: &quot;</span><span class="p">+</span> <span class="n">svc</span><span class="p">.</span><span class="n">Execute</span><span class="p">(</span><span class="n">appName</span><span class="p">,</span> <span class="s">&quot;Sum&quot;</span><span class="p">,</span> <span class="s">&quot;{ a:&#39;10&#39;, b:&#39;20&#39;}&quot;</span><span class="p">));</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">return</span> <span class="n">trace</span><span class="p">.</span><span class="n">ToString</span><span class="p">();</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'>        <span class="c1">/// Creates an application with the selected name.</span>
</span><span class='line'>        <span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;param name=&quot;appName&quot;&gt;Application Name&lt;/param&gt;</span>
</span><span class='line'>        <span class="c1">/// &lt;returns&gt;Application Identifier of the created application.&lt;/returns&gt;</span>
</span><span class='line'>        <span class="k">private</span> <span class="n">Guid</span> <span class="nf">CreateApplication</span><span class="p">(</span><span class="kt">string</span> <span class="n">appName</span><span class="p">)</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="kt">string</span> <span class="n">content</span> <span class="p">=</span> <span class="s">@&quot;using System;</span>
</span><span class='line'><span class="s">using iKnode.Applications;</span>
</span><span class='line'>
</span><span class='line'><span class="s">[Application]</span>
</span><span class='line'><span class="s">public class GuestApp</span>
</span><span class='line'><span class="s">{        </span>
</span><span class='line'><span class="s">    public Double Sum(Double a, Double b)</span>
</span><span class='line'><span class="s">    {</span>
</span><span class='line'><span class="s">        return a + b;</span>
</span><span class='line'><span class="s">    }</span>
</span><span class='line'><span class="s">}&quot;</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>            <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;</span> <span class="n">dependencies</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;();</span>
</span><span class='line'>
</span><span class='line'>            <span class="n">Application</span> <span class="n">app</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Application</span><span class="p">(</span><span class="n">appName</span><span class="p">,</span> <span class="s">&quot;Test Application&quot;</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="s">&quot;1.0&quot;</span><span class="p">,</span> <span class="n">dependencies</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>            <span class="n">ApplicationService</span> <span class="n">svc</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ApplicationService</span><span class="p">(</span><span class="n">UserId</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>            <span class="c1">// Saves the App but no publish. Cannot be executed.</span>
</span><span class='line'>            <span class="k">if</span><span class="p">(!</span><span class="n">svc</span><span class="p">.</span><span class="n">Save</span><span class="p">(</span><span class="n">app</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">return</span> <span class="n">Guid</span><span class="p">.</span><span class="n">Empty</span><span class="p">;</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="c1">// Saves, Compiles and Publishes. If successful, then app can be executed.</span>
</span><span class='line'>            <span class="k">if</span><span class="p">(!</span><span class="n">svc</span><span class="p">.</span><span class="n">Publish</span><span class="p">(</span><span class="n">app</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">return</span> <span class="n">Guid</span><span class="p">.</span><span class="n">Empty</span><span class="p">;</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">return</span> <span class="n">app</span><span class="p">.</span><span class="n">Id</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>What the Host application does is create another application named &#8220;Test&#8221; which performs a &#8220;Sum&#8221; operation. We will refer to the generated application as the Guest. The code this new Application will have is:</p>

<figure class='code'><figcaption><span>C# Code  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">using</span> <span class="nn">iKnode.Applications</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="na">[Application]</span>
</span><span class='line'><span class="k">public</span> <span class="k">class</span> <span class="nc">GuestApp</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>  <span class="k">public</span> <span class="n">Double</span> <span class="nf">Sum</span><span class="p">(</span><span class="n">Double</span> <span class="n">a</span><span class="p">,</span> <span class="n">Double</span> <span class="n">b</span><span class="p">)</span>
</span><span class='line'>  <span class="p">{</span>
</span><span class='line'>      <span class="k">return</span> <span class="n">a</span> <span class="p">+</span> <span class="n">b</span><span class="p">;</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Let&#8217;s test the Host application. Before executing the Host, this is how the Application Library looks like:</p>

<p><img src="http://iknode.com//images/posts/2012/07/appListBefore.png" title="" alt="" class="center max-img" /></p>

<p>If we execute the application the first time, this is what we will see:</p>

<p><img src="http://iknode.com//images/posts/2012/07/frankensteinExecution1.png" title="" alt="" class="center max-img" /></p>

<p>As we can see the application was not found by the Host application and created it before executing it. If we run it a second time, this is what we&#8217;ll see:</p>

<p><img src="http://iknode.com//images/posts/2012/07/frankensteinExecution2.png" title="" alt="" class="center max-img" /></p>

<p>As we can see the guest application was found, so it was just executed. If we go to the Application Library we&#8217;ll see the GuestApp, just like any other application.</p>

<p><img src="http://iknode.com//images/posts/2012/07/appListAfter.png" title="" alt="" class="center max-img" /></p>

<p>We hope you enjoy this new feature, we had a lot of fun writing it and coming up with applications to use it. Try it and let us know what you think.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Happy 4th of July]]></title>
    <link href="http://iknode.com//blog/2012/07/04/happy-4th-of-july/"/>
    <updated>2012-07-04T13:38:00-07:00</updated>
    <id>http://iknode.com//blog/2012/07/04/happy-4th-of-july</id>
    <content type="html"><![CDATA[<p>From all of us at the iKnode HQ, we wish a Happy independence day!!! Happy 4th of July!!!</p>

<center><img src="http://iknode.com//images/posts/2012/07/4july.png" title="" alt="" class="center max-img" /></center>


<p>Image Reference: <a href="http://riteshpatelblog.blogspot.com/2010/06/wish-you-happy-independence-day-united.html" target="_blank">Link</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Post to WordPress with iKnode]]></title>
    <link href="http://iknode.com//blog/2012/07/02/post-to-wordpress-with-iknode/"/>
    <updated>2012-07-02T23:25:00-07:00</updated>
    <id>http://iknode.com//blog/2012/07/02/post-to-wordpress-with-iknode</id>
    <content type="html"><![CDATA[<p>We are avid users of Wordpress. I have been using Wordpress as the Blog engine in my personal blog for years now. I really like the platform. Recently we have been helping several of our users integrate iKnode with Wordpress, specially for inserting Blog posts automatically. So we have built an wrapper to make it easy for iKnode apps to automatically insert posts into an existing wordpress blog.</p>

<h3>Setting up Wordpress.</h3>

<p>Wordpress uses the XML RPC protocol for integration. In order for iKnode to be able to interact with a Wordpress blog, XMLRPC needs to be enabled in the site. You can do this by going to Settings > Writings, in the Remote Publishing Section check the XML-RPC check box.</p>

<p><img src="http://iknode.com//images/posts/2012/07/wordpress-xmlrpc.png" title="" alt="" class="center max-img" /><br />
<img src="http://iknode.com//images/posts/2012/07/wordpress-xmlrpc2.png" title="" alt="" class="center max-img" /></p>

<p>Now we ready to create the iKnode App.</p>

<h3>Creating the iKnode Application</h3>

<p>The wrapper we created is in iKnode.Applications, so we don&#8217;t need to add any other assemblies. We just need to use the iKnode.Applications.Web namespace.</p>

<p>The signature of the method to add a new post is displayed below:</p>

<figure class='code'><figcaption><span>Code</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='c'><span class='line'><span class="c1">/// &lt;summary&gt;</span>
</span><span class='line'><span class="c1">/// Posts a news Document into a wordpress blog.</span>
</span><span class='line'><span class="c1">/// &lt;/summary&gt;</span>
</span><span class='line'><span class="c1">/// &lt;param name=&quot;title&quot;&gt;Post Title.&lt;/param&gt;</span>
</span><span class='line'><span class="c1">/// &lt;param name=&quot;content&quot;&gt;Post Content.&lt;/param&gt;</span>
</span><span class='line'><span class="c1">/// &lt;param name=&quot;categories&quot;&gt;Categories Array.&lt;/param&gt;</span>
</span><span class='line'><span class="c1">/// &lt;param name=&quot;keywords&quot;&gt;Keywords.&lt;/param&gt;</span>
</span><span class='line'><span class="c1">/// &lt;param name=&quot;excerpt&quot;&gt;Excerpt.&lt;/param&gt;</span>
</span><span class='line'><span class="c1">/// &lt;returns&gt;Post Identifier if successful.&lt;/returns&gt;</span>
</span><span class='line'><span class="n">public</span> <span class="n">string</span> <span class="n">NewPost</span><span class="p">(</span><span class="n">string</span> <span class="n">title</span><span class="p">,</span> <span class="n">string</span> <span class="n">content</span><span class="p">,</span> <span class="n">string</span><span class="p">[]</span> <span class="n">categories</span><span class="p">,</span> <span class="n">string</span><span class="p">[]</span> <span class="n">keywords</span><span class="p">,</span> <span class="n">string</span> <span class="n">excerpt</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>Code</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='c'><span class='line'><span class="n">WordPressClient</span> <span class="n">wp</span> <span class="o">=</span> <span class="n">new</span> <span class="n">WordPressClient</span><span class="p">(</span><span class="s">&quot;http://my.domain.com/xmlrpc.php&quot;</span><span class="p">,</span> <span class="s">&quot;myUserName&quot;</span><span class="p">,</span> <span class="s">&quot;MyPassword&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">wp</span><span class="p">.</span><span class="n">NewPost</span><span class="p">(</span><span class="s">&quot;Test Title&quot;</span><span class="p">,</span> <span class="s">&quot;Hello World!&quot;</span><span class="p">,</span> <span class="n">new</span> <span class="n">string</span><span class="p">[]</span> <span class="p">{</span><span class="s">&quot;Uncategorized&quot;</span><span class="p">},</span> <span class="n">new</span> <span class="n">string</span><span class="p">[]{},</span> <span class="n">String</span><span class="p">.</span><span class="n">Empty</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>It is as simple as initializing the WordPressClient and then just passing the parameters to the NewPost method.</p>

<p>Here is the complete sample</p>

<figure class='code'><figcaption><span>Code</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class='c'><span class='line'><span class="n">using</span> <span class="n">System</span><span class="p">;</span>
</span><span class='line'><span class="n">using</span> <span class="n">iKnode</span><span class="p">.</span><span class="n">Applications</span><span class="p">;</span>
</span><span class='line'><span class="n">using</span> <span class="n">iKnode</span><span class="p">.</span><span class="n">Applications</span><span class="p">.</span><span class="n">Web</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="n">namespace</span> <span class="n">Applications</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>  <span class="p">[</span><span class="n">Application</span><span class="p">]</span>
</span><span class='line'>  <span class="n">public</span> <span class="n">class</span> <span class="n">MyWordpressApp</span>
</span><span class='line'>  <span class="p">{</span>
</span><span class='line'>        <span class="n">public</span> <span class="n">string</span> <span class="n">HelloWorld</span><span class="p">()</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="n">WordPressClient</span> <span class="n">wp</span> <span class="o">=</span> <span class="n">new</span> <span class="n">WordPressClient</span><span class="p">(</span><span class="s">&quot;http://my.blog.com/xmlrpc.php&quot;</span><span class="p">,</span> <span class="s">&quot;myUserName&quot;</span><span class="p">,</span> <span class="s">&quot;myPassword&quot;</span><span class="p">);</span>
</span><span class='line'>            <span class="k">return</span> <span class="n">wp</span><span class="p">.</span><span class="n">NewPost</span><span class="p">(</span><span class="s">&quot;Test Title&quot;</span><span class="p">,</span> <span class="s">&quot;Hello World!&quot;</span><span class="p">,</span> <span class="n">new</span> <span class="n">string</span><span class="p">[]</span> <span class="p">{</span><span class="s">&quot;Uncategorized&quot;</span><span class="p">},</span> <span class="n">new</span> <span class="n">string</span><span class="p">[]{},</span> <span class="n">String</span><span class="p">.</span><span class="n">Empty</span><span class="p">);</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Just run this sample. Once it finishes it will return the blog post id and you should be able to see it in your Wordpress site.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Documentation: Using iKnode and Creating Applications]]></title>
    <link href="http://iknode.com//blog/2012/03/08/documentation-using-iknode-and-creating-applications/"/>
    <updated>2012-03-08T20:10:00-08:00</updated>
    <id>http://iknode.com//blog/2012/03/08/documentation-using-iknode-and-creating-applications</id>
    <content type="html"><![CDATA[<p>We have been working hard on documentation and today we released the first bit, which refers to the general user interface overview, the editor user interface and writing applications for iKnode.</p>

<p>We will be updating and improving the documentation regularly. If you find there is an specific topic you want to have documented first, please let us know. Right now we are going to tackle it by topic, starting with Applications, then Data Storage, Application scheduling and finally Application Monitoring. We will also start posting complete samples which include complete applications.</p>

<p>You can read the documentation here: <a href="http://iknode.com//help/documentation.html">Documentation.</a></p>
]]></content>
  </entry>
  
</feed>
