<?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>2018-11-25T14:26:03-08: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[Privacy Updates &amp; more]]></title>
    <link href="http://iknode.com//blog/2018/05/23/privacy-updates-and-more/"/>
    <updated>2018-05-23T20:25:00-07:00</updated>
    <id>http://iknode.com//blog/2018/05/23/privacy-updates-and-more</id>
    <content type="html"><![CDATA[<p>It has been a long time since we posted in this blog. We have been very busy for the past couple of years. But it is time we connect again with our users. iKnode is very much alive and we have been hard at work making it a world class service. The purpose of this post is to give you an update on what we are doing to be complaint with the GDPR.</p>

<br />


<h4>The General Data Protection Regulation (GDPR)</h4>

<p>The General Data Protection Regulation (GDPR) is a European Regulation that focuses on data protection and privacy for all individuals in the European Union, which goes into effect on friday May 25th, 2018. This regulation applies to all companies based in the European Union, but also any companies that processes data belonging to the EU citizens.</p>

<br />


<p>As such this regulation applies to Structum, the parent company of iKnode. We have many users which are European Citizens and this fact makes this regulation extremely important to us. At its most basic form the GDPR specifies how personal data should be collected, stored, protected and used. It is intended to put personal information control back in the hands of their owners.</p>

<br />


<p>We are committed to protecting and safeguarding your personal data and as part of this commitment, we have updated our <a href="http://iknode.com//privacy-policy">Privacy Policy</a> in preparation of the GDPR legislation. Due to the nature of our service, the iKnode family of services do not require changes to be GDPR compliant. There are no changes to the current settings of your account or how your information is processed.</p>

<br/>


<p>The GDPR introduces the following user rights and how they are addressed:</p>

<ul>
<li><i>Customers can easily request access to their personal information.</i>

<blockquote><p>Request your personal information <a href="https://structum.gdprform.io/">here.</a></p></blockquote></li>
</ul>


<br />


<ul>
<li><i>Customers can easily update their personal information to keep it up to that.</i>

<blockquote><p>All users can change their personal information using the iKnode Web Console, by clicking their name in the top right corner.</p></blockquote></li>
</ul>


<br />


<ul>
<li><i>Customer&#8217;s data can easily be removed once the information is no longer necessary.</i>

<blockquote><p>We have a removal policy of 30 days after a customer has cancelled their account with us.</p></blockquote></li>
</ul>


<br />


<ul>
<li><i>Customers can request the deletion of their data.</i>

<blockquote><p>Customers can request the deletion of their data before the 30 days policy is reached by requesting deletion <a href="https://structum.gdprform.io/">here.</a></p></blockquote></li>
</ul>


<br />


<ul>
<li><i>Customers can easily request that their data be delivered to themselves or a third party.</i>

<blockquote><p>Request your personal information <a href="https://structum.gdprform.io/">here.</a></p></blockquote></li>
</ul>


<br />


<p>There are 2 roles considered by the GDPR:</p>

<ul>
<li><strong>Data Processor</strong> - Processes and Stores the data collected.</li>
<li><strong>Data Controller</strong> - Determines what and why data is collected.</li>
</ul>


<br />


<p>Structum&#8217;s role when it refers to the iKnode family of services is a <strong>Data Processor</strong>. Developers hosting their apps on the iKnode Cloud are a <strong>Data Controller</strong>. Please review the GDPR Checklist to make sure you are GDPR compliant.</p>

<br />


<p>In order to help iKnode developers, we have added a data export feature that will allow you to extract data easily from iKnode to comply with your users right to request their information.</p>

<br />


<h4>Query Console Export</h4>

<p><a href="http://iknode.com//images/posts/2018/05/23/query_console_export.png" title="Query Console Export" class="fancybox clip"><img src="http://iknode.com//images/posts/2018/05/23/query_console_export.png" alt="Query Console Export" title="Version 1.0" /></a>
As you can see in the picture above you can type a query on an specific collection and export the results as pure JSON, either by copying it to the clipboard, or by exporting it to a file.</p>

<br />


<p>This feature will come in handy when a user of your application requests the data you have collected. You can query by an specific user identifier, and export the data as JSON.</p>

<br />


<h4>Data Storage Export</h4>

<p><a href="http://iknode.com//images/posts/2018/05/23/collection_export.png" title="Collection Export" class="fancybox clip"><img src="http://iknode.com//images/posts/2018/05/23/collection_export.png" alt="Collection Export" title="Version 1.0" /></a>
The other way to export your data is by exporting the full collection into JSON. This feature will come in handy if you store all of the data for a user or tenant in a collection. By clicking the &#8220;Export All&#8221; you will get a file with all of the documents in the collection.</p>

<br/>


<p>If you have any questions and/or concerns regarding privacy, please do not hestiate to contact us at: <a href="mailto:p%72ivacy@str%75c%74um%2En%65t">privacy@structum.net</a></p>

<br />


<p>To learn more about the GDPR please visit the following sites:</p>

<ul>
<li><a href="https://gdpr-info.eu/">General Data Protection Regulation</a></li>
<li><a href="https://gdprchecklist.io/">The GDPR check list</a></li>
<li><a href="https://www.gdpr-shield.io/">GDPR Shield</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Heartbleed Update]]></title>
    <link href="http://iknode.com//blog/2014/04/11/heartbleed-update/"/>
    <updated>2014-04-11T09:06:00-07:00</updated>
    <id>http://iknode.com//blog/2014/04/11/heartbleed-update</id>
    <content type="html"><![CDATA[<p>In the wake of the revelation of the <a href="http://heartbleed.com/">Heartbleed</a> bug in OpenSSL and the the posibilities for its exploitation to get certificate&#8217;s private key, we have been working around the clock to make sure we are fully secure.</p>

<p>This bug affects OpenSSL only and specifically versions <a href="http://www.openssl.org/news/vulnerabilities.html#2014-0160">1.0.1f, 1.0.1e, 1.0.1d, 1.0.1c, 1.0.1b, 1.0.1a, 1.0.1</a> and it is currently patched in version 1.0.1g.</p>

<p>Our infrastructure has some nodes that use Linux but they are not exposed to the web, and do not contain our SSL certificates. Even so, we do use Rackspace&#8217;s and Amazon&#8217;s Load Balancers which as it turns out are <a href="http://aws.amazon.com/security/security-bulletins/aws-services-updated-to-address-openssl-vulnerability/">vulnerable</a>. Interestingly enough when we first setup our infrastructure we decided to host our certificates in our web server images, instead of using the SSL termination in the load balancer. Since our web application is .Net based it is also hosted on Windows on IIS. This means that we are not vulnerable at all.</p>

<p>We planned to move our certificates to the Load Balancer in order to ease our image deployments. After this event, we are rethinking that strategy. It is interesting that we were unaffected by this by pure luck, since we were in the process of moving our infrastructure to a new engine (which we will talk more about later), we were also configuring SSL termination in the load balancer.</p>

<p>As of right now, you have nothing to worry about while using iKnode. We are not affected bythis bug at all. It is still recommended that you change your password for iKnode Management console.</p>

<p>If you want to check other sites to see if they are vulnerable to the bug, you can use any of the following:</p>

<ul>
<li><a href="http://filippo.io/Heartbleed/">Heartbleed test</a> (filipo.io)</li>
<li><a href="https://lastpass.com/heartbleed/">LastPass Heartbleed test</a> (lastpass.com)</li>
</ul>


<p>It seems that our great friends at Cloudflare have identified that this bug <a href="http://blog.cloudflare.com/answering-the-critical-question-can-you-get-private-ssl-keys-using-heartbleed">doesn&#8217;t leak the private key</a>. We&#8217;ll keep you updated as more information is revealed.</p>

<p>If you have any questions or concerns, please don&#8217;t hesitate to contact us. We can be reached by using the Support console.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[WeTheAdorned powered by iKnode]]></title>
    <link href="http://iknode.com//blog/2014/02/01/wetheadorned-powered-by-iknode/"/>
    <updated>2014-02-01T14:25:00-08:00</updated>
    <id>http://iknode.com//blog/2014/02/01/wetheadorned-powered-by-iknode</id>
    <content type="html"><![CDATA[<p><a href="http://www.wetheadorned.com/" target="_blank"><img src="http://iknode.com//images/posts/2014/02/wetheadorned_logo.jpg" title="WeTheAdorned" alt="WeTheAdorned" style="border:0px none;float:right;padding:0px 10px 0px 10px;" width="319" height="200"/></a>Today, I am happy to share the news that we have collaborated with the amazing team of Tim &amp; Cyia from <a href="http://www.tcyia.com/"  target="_blank">T.Cyia</a> on their project <a href="http://www.wetheadorned.com/" target="_blank">WeTheAdorned</a>.</p>

<p><strong>WeTheAdorned</strong> is a members-only online jewelry platform which is curated by the famous &#8220;Sex And the City&#8221; star, <strong>Sarah Jessica Parker</strong>. This exclusive platform will allow T.Cyia&#8217;s bold designs to reach other parts of the world first hand and interface directly with the consumer, and it will also empower the subscriber to be able to acquire the stunning jewerly that was only available to Hollywood stars. For iKnode, this project allowed us once more to create seamless technology that powers creativity while placing the focus on the product and not the technology itself.</p>

<p>We were tasked with designing a launch page to measure interest, first by allowing people to subscribe to the newsletter and second by allowing people to signup for the service for a reduced price during launch. We chose HTML5 and Bootstrap for the front-end, and iKnode as the backend.</p>

<p><a href="http://www.wetheadorned.com/" target="_blank"><img src="http://iknode.com//images/posts/2014/02/wta_landing.png" title="WeTheAdorned Models" alt="WeTheAdorned Models" style="border:0px none;float:left;padding: 0px 10px 0px 10px;" width="245" height="300"/></a>We built two applications: 1) One that manages the Newsletter subscriptions, and 2) one that manages the payments. For the Newsletter subscriptions we used the iKnode Package for MailChimp. We created a newsletter using MailChimp&#8217;s intuitive deisgner, and sent user subscriptions from the landing page all the way to mailchimp. In the case of payments we used the Stripe iKnode Package to signup and charge users for the service without us even worrying about storing credit card information on our servers or worrying aobut PCI compliance.</p>

<p>Using <strong>iKnode</strong> was not only a time saver in terms of development and maintenance, it was also an amazing platform for reliability and stability by handling high traffic peaks without being noticed. The iKnode cloud was able to handle approximately <em>10,000 requests per second</em> on the highest traffic day.</p>

<p>We are very lucky to be able to work with Tim &amp; Cyia in such a bold project. We are excited to see what is yet to come from this amazing duo and how technology will power one of the most creative profession of the world.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Announcing the new Documentation Site]]></title>
    <link href="http://iknode.com//blog/2013/06/26/announcing-the-new-documentation-site/"/>
    <updated>2013-06-26T04:39:00-07:00</updated>
    <id>http://iknode.com//blog/2013/06/26/announcing-the-new-documentation-site</id>
    <content type="html"><![CDATA[<p>Today we are announcing the new documentation site. We have been adding a lot of content lately to the documentation, and we have been complaining about how the structure wasn&#8217;t useful enough. The old design was just too cluttered and complicated.</p>

<p>The new design is clean and very well structured:
<img src="http://iknode.com//images/posts/2013/06/NewDocSite.png" title="New Document Site" alt="New Document Site" class="center max-img" /></p>

<p>With this new design we strived to improve the usability and structure to make it easier to navigate and read. The navigation was one of the most important improvements we added. Before it was just a simple Octopress menu, now it is a minimal but powerful side bar.</p>

<p><img src="http://iknode.com//images/posts/2013/06/docnavigation.png" title="Navigation" alt="Navigation" class="center max-img" /></p>

<p>The content is also less cluttered, now that it is divided into several pages, instead of having only one page for all. At the beginning, we thought having it all in one page would be easier for the user and for us to read and look for, but as it grew, it became too much. Multiple pages encapsulates the content better and it also helps you focus on what you are trying to learn.</p>

<p>Go check the documentation site yourself and let us know what you think.</p>

<p><a href="http://iknode.com//docs" title="iKnode Documentation">iKnode Documentation</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Improved Parameter passing in Javascript SDK]]></title>
    <link href="http://iknode.com//blog/2013/06/26/improved-parameter-passing-in-javascript-sdk/"/>
    <updated>2013-06-26T04:38:00-07:00</updated>
    <id>http://iknode.com//blog/2013/06/26/improved-parameter-passing-in-javascript-sdk</id>
    <content type="html"><![CDATA[<p>We the recent upgrades in the API iwth version 3, we are now able to improve the SDK as well.</p>

<p>Before API v3, the parameters had to be passed to the SDK using a Dictionary-like structure 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>
<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>
</pre></td><td class='code'><pre><code class='js'><span class='line'><span class="kd">var</span> <span class="nx">helloWorldSvc</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;HelloWorld&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">response</span> <span class="o">=</span> <span class="nx">helloWorldSvc</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;HelloYou&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;yourName&quot;</span><span class="p">,</span>
</span><span class='line'>        <span class="nx">value</span><span class="o">:</span> <span class="s2">&quot;John Doe&quot;</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 you can do 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>
<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>
</pre></td><td class='code'><pre><code class='js'><span class='line'><span class="kd">var</span> <span class="nx">helloWorldSvc</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;HelloWorld&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">response</span> <span class="o">=</span> <span class="nx">helloWorldSvc</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;HelloYou&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">yourName</span><span class="o">:</span> <span class="s2">&quot;John Doe&quot;</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>Instead of passing the parameters as a Key-Value pair, you just pass the parameter in a common JSON object format. It is way more javascript friendly, and API friendly as well. No need to format the parameters in weird ways, and no need for the parameter formatting used before.</p>

<p>The latest Javascript SDK is backward compatible, but in order for the SDK to work with Key-Value pair parameters, just add the following flag:</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>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='js'><span class='line'><span class="kd">var</span> <span class="nx">response</span> <span class="o">=</span> <span class="nx">helloWorldSvc</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;HelloYou&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nx">formatParameters</span><span class="o">:</span> <span class="kc">true</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;yourName&quot;</span><span class="p">,</span>
</span><span class='line'>        <span class="nx">value</span><span class="o">:</span> <span class="s2">&quot;John Doe&quot;</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 us know waht you think.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[New and improved API (version 3)]]></title>
    <link href="http://iknode.com//blog/2013/05/28/new-and-improved-api-version-3/"/>
    <updated>2013-05-28T21:36:00-07:00</updated>
    <id>http://iknode.com//blog/2013/05/28/new-and-improved-api-version-3</id>
    <content type="html"><![CDATA[<p>We are please to invite you to try our new and improved API, which is now at version 3. Version 2 of the API is still available and will remain until the end of the year. This new version includes a number of enhancements, mostly on the resquest side.</p>

<p>Version 2 of the API worked perfectly fine, but it wasn&#8217;t as simple as it could be. The POST body needed to be wrapped in a JSON object which only contained one field: &#8220;parameters&#8221;. This made the API calls cumbersome for complex objects. Escaping had to be done, since the parameters field expected an escaped json formatted string.</p>

<p>For example, calling and application method &#8220;HelloYou&#8221; form the application &#8220;HelloWorld&#8221; requiring one parameter, would need to be called like this in version 2:</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;{ yourName: \&quot;John Doe\&quot; }&quot; }&#39;</span> <span class="se">\</span>
</span><span class='line'>https://api.iknode.com/Applications/execute/HelloWorld/HelloYou
</span></code></pre></td></tr></table></div></figure>


<p>Notice how the parameters are wrapped and escaped in the POST body: <b>&#8217;{ &#8220;parameters&#8221; : &#8220;{ yourName: &#34;John Doe&#34; }&#8221; }&#8217;</b></p>

<p>With the new API, the POST body contains your JSON object exactly as you serialized. No need for escaping or encoding. Additionally, the User Identifier is now part of the URL, only the API Key needs to be added in the header.</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>
</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-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;yourName&quot;: &quot;John Doe&quot; }&#39;</span> <span class="se">\</span>
</span><span class='line'>https://api.iknode.com/v3/<span class="o">[</span>YOUR-USERID<span class="o">]</span>/HelloWorld/HelloYou
</span></code></pre></td></tr></table></div></figure>


<p>Notice the parameters are no longer wrapped, and the JSON parameter is represented as is: <b>{ &#8220;yourName&#8221;: &#8220;John Doe&#8221; }</b></p>

<p>Needles to say, that if you are using the SDK, this change doesn&#8217;t change anything in your code. The newesst SDKs already support Version 3 of the API. Just upgrade to the latest version of the SDK and you are set to go. No need to change your code.</p>

<p>For more information check the documentation <a href="http://iknode.com//docs#remoteCall">here</a>.</p>
]]></content>
  </entry>
  
  <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>
  
</feed>
