<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>Sarmaad Amin</title>
	<atom:link href="http://www.sarmaad.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://www.sarmaad.com</link>
	<description>Cloud Software Development</description>
	<lastBuildDate>Tue, 13 Nov 2018 20:53:07 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><item>
		<title>Setup RavenDB 4.0 Cluster using Ubuntu on Digital Ocean</title>
		<link>https://www.sarmaad.com/2018/03/setup-ravendb-4-0-cluster-using-ubuntu-on-digital-ocean/</link>
		<comments>https://www.sarmaad.com/2018/03/setup-ravendb-4-0-cluster-using-ubuntu-on-digital-ocean/#respond</comments>
		<pubDate>Tue, 20 Mar 2018 05:35:13 +0000</pubDate>
		<dc:creator><![CDATA[Sarmaad]]></dc:creator>
				<category><![CDATA[Digital Ocean]]></category>
		<category><![CDATA[RavenDB]]></category>

		<guid isPermaLink="false">https://www.sarmaad.com/?p=362</guid>
		<description><![CDATA[Today I have built a RavenDB 4.0 cluster that spanned over 3 machines. This post is to document the process  needed to build and secure the cluster on Ubuntu 16.x using Digital Ocean droplets with custom SSL certificates. This is a completely manual process from creating the user, setting ravendb settings.json and setting LetsEncrypt certificates. Getting Ready [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="float: right; margin: 0 0 10px 15px; width:240px; height: auto;">
		<img src="https://www.sarmaad.com/wp-content/uploads/2018/03/test-node-1.png" width="240" style="max-width: 100%; height: auto;" />
		</p><p>Today I have built a RavenDB 4.0 cluster that spanned over 3 machines. This post is to document the process  needed to build and secure the cluster on Ubuntu 16.x using Digital Ocean droplets with custom SSL certificates.</p>
<p>This is a completely manual process from creating the user, setting ravendb settings.json and setting LetsEncrypt certificates.</p>
<h1>Getting Ready</h1>
<h2><span class="TextRun SCXO64700259" lang="EN-AU" xml:lang="EN-AU"><span class="NormalTextRun SCXO64700259">Digital Ocean Droplets</span></span></h2>
<p>Let&#8217;s start by creating 3 droplets with the following spec:</p>
<ul>
<li data-aria-posinset="1" data-aria-level="2">Ubuntu 16.x operating system</li>
<li data-aria-posinset="2" data-aria-level="2">2GB Ram, 1 vCPU, 50GB SSD</li>
</ul>
<p>You can choose to increase the specs as you require. However, for RavenDB community, license 3 vCPU are included in the community license. Any more are not available unless you have a paid license. <a href="https://ravendb.net/buy">https://ravendb.net/buy</a></p>
<p><a href="https://www.sarmaad.com/wp-content/uploads/2018/03/digital-ocean-droplet-setup.gif"><img class="alignnone wp-image-401 size-full" src="https://www.sarmaad.com/wp-content/uploads/2018/03/digital-ocean-droplet-setup-play.gif" alt="" width="768" height="632" /></a></p>
<h2><span class="TextRun SCXO186561123" lang="EN-AU" xml:lang="EN-AU"><span class="NormalTextRun SCXO186561123">SSL Certificates</span></span><span class="EOP SCXO186561123"> </span></h2>
<p>For this demo, we will be using <a href="https://letsencrypt.org/" target="_blank" rel="noopener">LetsEncrypt</a> ssl certificate for each of the nodes in the cluster.</p>
<p><span class="shortcode-highlight">However, you could use your own paid wildcard ssl certificates without any change in the process outlined here</span><!--/.shortcode-highlight-->.</p>
<p>The easiest way to acquire LetsEncrypt ssl certificate is to use this service here. <a href="https://www.sslforfree.com/" target="_blank" rel="noopener">https://www.sslforfree.com</a></p>
<p>If you are not using a wildcard certificate, you will need to obtain a certificate for each ravendb node you have in the cluster. You are required to have an active and valid domain name for this process.</p>
<p><a href="https://www.sarmaad.com/wp-content/uploads/2018/03/ssl-for-nodes-sslforfree_com.png"><img class="alignnone wp-image-367 size-medium" src="https://www.sarmaad.com/wp-content/uploads/2018/03/ssl-for-nodes-sslforfree_com-300x79.png" alt="" width="300" height="79" srcset="https://www.sarmaad.com/wp-content/uploads/2018/03/ssl-for-nodes-sslforfree_com-300x79.png 300w, https://www.sarmaad.com/wp-content/uploads/2018/03/ssl-for-nodes-sslforfree_com-768x203.png 768w, https://www.sarmaad.com/wp-content/uploads/2018/03/ssl-for-nodes-sslforfree_com.png 1021w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Go through this process of validating the sub-domain names and downloading the certificate files.</p>
<p><a href="https://www.sarmaad.com/wp-content/uploads/2018/03/download-certificate.png"><img class="alignnone size-medium wp-image-374" src="https://www.sarmaad.com/wp-content/uploads/2018/03/download-certificate-287x300.png" alt="" width="287" height="300" srcset="https://www.sarmaad.com/wp-content/uploads/2018/03/download-certificate-287x300.png 287w, https://www.sarmaad.com/wp-content/uploads/2018/03/download-certificate-768x804.png 768w, https://www.sarmaad.com/wp-content/uploads/2018/03/download-certificate.png 840w" sizes="(max-width: 287px) 100vw, 287px" /></a></p>
<p>Once you downloaded the certificates, you must generate a PFX file to be able to use the certificates with RavenDB.</p>
<p>Use openssl to generate the PFX file. On windows 10, run &#8220;bash&#8221; to get a bash command line, which have openssl already installed.</p>
<p>Navigate to the location of the extracted certificates. I placed mine somewhere easy and simple to get to &#8220;c:\temp\certs&#8221;</p>
<div class="woo-sc-quote"><p>openssl pkcs12 -export -out &#8220;certificate_combined.pfx&#8221; -inkey &#8220;private.key&#8221; -in &#8220;certificate.crt&#8221; -certfile ca_bundle.crt</p></div>
<p>provide an export password for your newly created pfx file.</p>
<p><a href="https://www.sarmaad.com/wp-content/uploads/2018/03/openssl-pfx.png"><img class="alignnone size-medium wp-image-375" src="https://www.sarmaad.com/wp-content/uploads/2018/03/openssl-pfx-300x122.png" alt="" width="300" height="122" srcset="https://www.sarmaad.com/wp-content/uploads/2018/03/openssl-pfx-300x122.png 300w, https://www.sarmaad.com/wp-content/uploads/2018/03/openssl-pfx.png 744w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>You should now have a file called &#8220;certificate_combined.pfx&#8221;.</p>
<p>Go ahead and import this PFX file in your system by double clicking on the file name (you will need this for later use).</p>
<p>You can verify you have everything right, open  &#8220;Manage user certificates&#8221;</p>
<p><a href="https://www.sarmaad.com/wp-content/uploads/2018/03/user-certificates.png"><img class="alignnone size-medium wp-image-377" src="https://www.sarmaad.com/wp-content/uploads/2018/03/user-certificates-184x300.png" alt="" width="184" height="300" srcset="https://www.sarmaad.com/wp-content/uploads/2018/03/user-certificates-184x300.png 184w, https://www.sarmaad.com/wp-content/uploads/2018/03/user-certificates.png 392w" sizes="(max-width: 184px) 100vw, 184px" /></a> <a href="https://www.sarmaad.com/wp-content/uploads/2018/03/verify-certificate.png"><img class="alignnone size-medium wp-image-378" src="https://www.sarmaad.com/wp-content/uploads/2018/03/verify-certificate-300x300.png" alt="" width="300" height="300" srcset="https://www.sarmaad.com/wp-content/uploads/2018/03/verify-certificate-300x300.png 300w, https://www.sarmaad.com/wp-content/uploads/2018/03/verify-certificate-150x150.png 150w, https://www.sarmaad.com/wp-content/uploads/2018/03/verify-certificate.png 698w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<h1><span class="TextRun SCXO130618620" lang="EN-AU" xml:lang="EN-AU"><span class="NormalTextRun SCXO130618620">Installation</span></span></h1>
<p>Now that we have done the initial preparation from setting up the droplets to generating the SSL certificate, we can move on to the actual installation and configuration of RavenDB.</p>
<p><span class="shortcode-highlight">This process will need to be repeated on each node in the cluster</span><!--/.shortcode-highlight-->.</p>
<h2>Step 1 &#8211; Login</h2>
<p>Digital Ocean would have sent you an email for each droplet with username and password. I am using Putty to SSH to the droplet and change the password.</p>
<p><a href="https://www.sarmaad.com/wp-content/uploads/2018/03/putty-node-1.png"><img class="alignnone size-medium wp-image-380" src="https://www.sarmaad.com/wp-content/uploads/2018/03/putty-node-1-300x211.png" alt="" width="300" height="211" srcset="https://www.sarmaad.com/wp-content/uploads/2018/03/putty-node-1-300x211.png 300w, https://www.sarmaad.com/wp-content/uploads/2018/03/putty-node-1.png 661w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<h2>Step 2 &#8211; Upload Certificate</h2>
<p>Use WinSCP to upload the PFX certificate. Login using the same credentials used for Putty and upload the PFX file to root directory.</p>
<p><a href="https://www.sarmaad.com/wp-content/uploads/2018/03/winscp-upload-cert.png"><img class="alignnone size-medium wp-image-381" src="https://www.sarmaad.com/wp-content/uploads/2018/03/winscp-upload-cert-300x163.png" alt="" width="300" height="163" srcset="https://www.sarmaad.com/wp-content/uploads/2018/03/winscp-upload-cert-300x163.png 300w, https://www.sarmaad.com/wp-content/uploads/2018/03/winscp-upload-cert-768x418.png 768w, https://www.sarmaad.com/wp-content/uploads/2018/03/winscp-upload-cert-1024x557.png 1024w, https://www.sarmaad.com/wp-content/uploads/2018/03/winscp-upload-cert.png 1042w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<h2>Step 3 &#8211; Run Bash file</h2>
<p>I have written installation bash script that run through the process of downloading ravendb binaries, installing them, configuring the service, etc.</p>
<p><span class="shortcode-highlight"><strong>Please DO NOT run script files from the internet without reading them first</strong> </span><!--/.shortcode-highlight-->.</p>
<p>You can find it at <a href="https://github.com/Sarmaad/ravendb-cluster" target="_blank" rel="noopener">https://github.com/Sarmaad/ravendb-cluster</a></p>
<p>Back to Putty, while you are at the root directory, clone the repository:</p>
<p>cmd&gt; git clone https://github.com/sarmaad/ravendb-cluster</p>
<p><span class="TextRun SCXO210887537" lang="EN-AU" xml:lang="EN-AU"><span class="NormalTextRun SCXO210887537">This will download the latest stable scripts from github. </span></span>Then run the following commands:</p>
<p>cmd&gt; cd ravendb-cluster/ubuntu<br />
cmd&gt; chmod +x install.sh<br />
cmd&gt; ./install.sh db01.sarmaad.com /root/certificate_combined.pfx password123!</p>
<span class="shortcode-highlight"><strong>Make sure to change the sub-domain, certificate file name and password based on what you have specified</strong> </span><!--/.shortcode-highlight-->
<p>This script will prepare your environment, download ravendb linux packages (currently version RavenDB-4.0.3-patch-40033-linux-x64 *at the time of writing*) and configure ravendb settings with the correct certificate details and data folder location.</p>
<p>After the scripts completes successfully, make sure to add your FQDN/sub-domain in hosts file so ravendb service can bind to the correct domain.</p>
<p>cmd&gt; echo &#8220;128.199.224.104 db01.sarmaad.com&#8221; &gt;&gt; /etc/hosts</p>
<span class="shortcode-highlight">Change the IP address and sub-domain to match your droplet!</span><!--/.shortcode-highlight-->
<p>Then start ravendb service by executing:</p>
<p>cmd&gt; systemctl start ravendb</p>
<p>Check the logs to make sure the service started correctly and without any issue:</p>
<p>cmd&gt; tail /var/log/syslog</p>
<p>You are looking for ravendb service started and listening for requests.</p>
<p><a href="https://www.sarmaad.com/wp-content/uploads/2018/03/install-ravendb-bash.gif"><img class="alignnone wp-image-404 size-full" src="https://www.sarmaad.com/wp-content/uploads/2018/03/install-ravendb-bash-play.png" alt="" width="662" height="466" srcset="https://www.sarmaad.com/wp-content/uploads/2018/03/install-ravendb-bash-play.png 662w, https://www.sarmaad.com/wp-content/uploads/2018/03/install-ravendb-bash-play-300x211.png 300w" sizes="(max-width: 662px) 100vw, 662px" /></a></p>
<p>This is what you are looking for in the logs for a successful ravendb service installation/running</p>
<p><a href="https://www.sarmaad.com/wp-content/uploads/2018/03/ravendb-service-running-successfully.png"><img class="alignnone wp-image-389 size-large" src="https://www.sarmaad.com/wp-content/uploads/2018/03/ravendb-service-running-successfully-1024x313.png" alt="" width="1024" height="313" srcset="https://www.sarmaad.com/wp-content/uploads/2018/03/ravendb-service-running-successfully-1024x313.png 1024w, https://www.sarmaad.com/wp-content/uploads/2018/03/ravendb-service-running-successfully-300x92.png 300w, https://www.sarmaad.com/wp-content/uploads/2018/03/ravendb-service-running-successfully-768x235.png 768w, https://www.sarmaad.com/wp-content/uploads/2018/03/ravendb-service-running-successfully.png 1157w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<h2>Step 4 &#8211; Test the Node</h2>
<p>Type in the sub-domain directly in your browser and test that the browser prompting for client certificate. If you are prompted, then you have successfully installed a ravendb node.</p>
<p>If you have installed the certificate in your system, choose the certificate from the list and access the node.</p>
<p><a href="https://www.sarmaad.com/wp-content/uploads/2018/03/test-node-1.png"><img class="alignnone wp-image-407 size-medium" src="https://www.sarmaad.com/wp-content/uploads/2018/03/test-node-1-300x290.png" alt="" width="300" height="290" srcset="https://www.sarmaad.com/wp-content/uploads/2018/03/test-node-1-300x290.png 300w, https://www.sarmaad.com/wp-content/uploads/2018/03/test-node-1.png 719w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p><img class="alignnone wp-image-406 size-large" src="https://www.sarmaad.com/wp-content/uploads/2018/03/test-node-2-1024x598.png" alt="" width="1024" height="598" srcset="https://www.sarmaad.com/wp-content/uploads/2018/03/test-node-2-1024x598.png 1024w, https://www.sarmaad.com/wp-content/uploads/2018/03/test-node-2-300x175.png 300w, https://www.sarmaad.com/wp-content/uploads/2018/03/test-node-2-768x448.png 768w, https://www.sarmaad.com/wp-content/uploads/2018/03/test-node-2.png 1372w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<span class="shortcode-highlight">Repeat these steps in all nodes updating the sub-domain, certificate and ip address.</span><!--/.shortcode-highlight-->
<h1>Cluster Configuration</h1>
<p>Now that we have the 3 nodes up and running (db01, db02 and db03) we are going to login to db01 and start the cluster formation.</p>
<h2>Get a License</h2>
<p>RavenDB community license is for FREE and you can get it here. <a href="https://ravendb.net/license/request/community" target="_blank" rel="noopener">https://ravendb.net/license/request/community</a></p>
<p><span class="shortcode-highlight">You will need a license to continue building your cluster</span><!--/.shortcode-highlight-->.</p>
<p>Once you receive your License, click on &#8220;About&#8221;  menu or the red document icon on the footer bar to navigate to about page.</p>
<p>Click &#8220;Register&#8221; and copy paste your license details received from Hibernating Rhinos.</p>
<h2>Add Nodes</h2>
<p>After you have registered your license. Click on &#8220;Manage Server&#8221; -&gt; &#8220;Cluster&#8221; -&gt; &#8220;Add Node to cluster&#8221;</p>
<p>Enter the second node you need to add, in this case is: https://db02.sarmaad.com:8080. Make sure to include the HTTPS and Port number.</p>
<p>You can &#8220;Test connection&#8221; to make sure your servers can reach each other (that is important that each node can reach and communicate with each other).</p>
<p>Then click &#8220;Add&#8221; button to add this node to cluster.</p>
<p>Repeat these steps for the third node and you are done.</p>
<div style="width: 1154px;" class="wp-video"><!--[if lt IE 9]><script>document.createElement('video');</script><![endif]-->
<video class="wp-video-shortcode" id="video-362-1" width="1154" height="782" preload="metadata" controls="controls"><source type="video/mp4" src="https://www.sarmaad.com/wp-content/uploads/2018/03/cluster-build-video.mp4?_=1" /><a href="https://www.sarmaad.com/wp-content/uploads/2018/03/cluster-build-video.mp4">https://www.sarmaad.com/wp-content/uploads/2018/03/cluster-build-video.mp4</a></video></div>
<h1></h1>
<h1>Summary</h1>
<p>Hopefully this blog helped you answer the question on how to setup ravendb cluster on linux infrastructure and demonstrated that is its not very hard.</p>
<p>Your cluster is not done yet. The topic of securing your droplets, firewalls and access restrictions are not covered here.</p>
<p>The guys at RavenDB done a great job with their documentation <a href="https://ravendb.net/docs/article-page/4.0/csharp/" target="_blank" rel="noopener">https://ravendb.net/docs/article-page/4.0/csharp/</a></p>
<p>Make sure to take your time to read it and understand how to operate and manage your new found cluster.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.sarmaad.com/2018/03/setup-ravendb-4-0-cluster-using-ubuntu-on-digital-ocean/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure length="2775322" type="video/mp4" url="https://www.sarmaad.com/wp-content/uploads/2018/03/cluster-build-video.mp4"/>
		</item>
		<item>
		<title>Scheduled Azure Functions Explained</title>
		<link>https://www.sarmaad.com/2017/06/scheduled-azure-functions-explained/</link>
		<comments>https://www.sarmaad.com/2017/06/scheduled-azure-functions-explained/#respond</comments>
		<pubDate>Sat, 17 Jun 2017 14:00:45 +0000</pubDate>
		<dc:creator><![CDATA[Sarmaad]]></dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Azure Functions]]></category>

		<guid isPermaLink="false">http://www.sarmaad.com/?p=314</guid>
		<description><![CDATA[Often as part of an overall solution, you will need scheduled tasks to run on fixed intervals. These tasks are usually administrative, maintenance or integration. There are a lot of ways to achieve this, usually involve deploying windows services that have a scheduler built in like Quartz or using built-in windows task scheduler. One of the major advantage [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="float: right; margin: 0 0 10px 15px; width:240px; height: auto;">
		<img src="https://www.sarmaad.com/wp-content/uploads/2017/06/azure-functions.png" width="240" style="max-width: 100%; height: auto;" />
		</p><p>Often as part of an overall solution, you will need scheduled tasks to run on fixed intervals. These tasks are usually administrative, maintenance or integration. There are a lot of ways to achieve this, usually involve deploying windows services that have a scheduler built in like <a href="http://www.quartz-scheduler.net/" target="_blank" rel="noopener">Quartz</a> or using built-in windows <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa383614(v=vs.85).aspx" target="_blank" rel="noopener">task scheduler</a>. One of the major advantage we have in azure functions is server-less architecture, which means no deployment required and no need to pay for a virtual machine to host our service or tasks.</p>
<h2>Overview</h2>
<p>In this post, I will explain how Azure Functions time trigger works and what are CRON expressions.</p>
<p>This post assumes you have Azure account and you are familiar with Azure Portal</p>
<p>&nbsp;</p>
<h2>Create Azure Time Trigger Function</h2>
<p>Lets start by creating a new time triggered function in azure portal:</p>
<ol>
<li>If you don&#8217;t have an existing function app, create a new one. please read my earlier post about <a href="http://www.sarmaad.com/2016/07/microsoft-azure-functions-tutorial-new-function-app/" target="_blank" rel="noopener">creating azure function app</a></li>
<li>Open your Function App and click &#8220;New Function&#8221;</li>
<li>Find and select &#8220;Timer Trigger &#8211; C#&#8221;</li>
<li>Give it a name and accept the default schedule expression.</li>
</ol>
<p><a href="http://www.sarmaad.com/wp-content/uploads/2016/07/new-azure-timer-triggered-function.png"><img class="alignnone size-large wp-image-317" src="http://www.sarmaad.com/wp-content/uploads/2016/07/new-azure-timer-triggered-function-1024x976.png" alt="new- zure timer triggered function" width="1024" height="976" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/new-azure-timer-triggered-function-1024x976.png 1024w, https://www.sarmaad.com/wp-content/uploads/2016/07/new-azure-timer-triggered-function-300x286.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/new-azure-timer-triggered-function-768x732.png 768w, https://www.sarmaad.com/wp-content/uploads/2016/07/new-azure-timer-triggered-function.png 1025w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>Congratulation, you have just created your first time triggered function. However, we skipped over the most important part, &#8220;<strong>Schedule&#8221; </strong>Expression. Let us spend sometime explaining what that is in details.</p>
<h2>Schedule Expression (Cron Expression)</h2>
<p>The origin of the name <em>cron</em> is from the Greek word for time (chronos) from <a href="https://en.wikipedia.org/wiki/Cron" target="_blank" rel="noopener">Wikipidia</a>. It expresses time scheduled jobs as a string format often segmented to 6 or 7 fields separated by a space. Let us examine the format with examples to help explain it.</p>
<p>These fields represent the following:</p>
<div style="direction: ltr;">
<div style="direction: ltr;">
<div style="direction: ltr;">
<table style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" title="" border="1" summary="" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="background-color: #d8d8d8; vertical-align: top; width: .7333in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span style="font-weight: bold;">Seconds</span></p>
</td>
<td style="background-color: #d8d8d8; vertical-align: top; width: .7347in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span style="font-weight: bold;">Minutes</span></p>
</td>
<td style="background-color: #d8d8d8; vertical-align: top; width: .6673in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span style="font-weight: bold;">Hours</span></p>
</td>
<td style="background-color: #d8d8d8; vertical-align: top; width: 1.068in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span style="font-weight: bold;">Day of month</span></p>
</td>
<td style="background-color: #d8d8d8; vertical-align: top; width: 1.3118in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span style="font-weight: bold;">Month</span></p>
</td>
<td style="background-color: #d8d8d8; vertical-align: top; width: 1.3493in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span style="font-weight: bold;">Day of week</span></p>
</td>
<td style="background-color: #d8d8d8; vertical-align: top; width: 1.0791in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span style="font-weight: bold;">Year (Optional)</span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: .7138in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">0-59</p>
</td>
<td style="vertical-align: top; width: .7152in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">0-59</p>
</td>
<td style="vertical-align: top; width: .6673in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">0-23</p>
</td>
<td style="vertical-align: top; width: 1.0493in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">1-31</p>
</td>
<td style="vertical-align: top; width: 1.3312in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">1-12 or JAN-DEC</p>
</td>
<td style="vertical-align: top; width: 1.3687in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">0-6 or MON-SUN</p>
</td>
<td style="vertical-align: top; width: .975in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">1970-2099</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<p>Lets look at some basic examples expressions:</p>
<div style="direction: ltr;">
<table style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" title="" border="1" summary="" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="background-color: #d8d8d8; vertical-align: top; width: 2.2472in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span style="font-weight: bold;">Expression</span></p>
</td>
<td style="background-color: #d8d8d8; vertical-align: top; width: 5.7583in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span style="font-weight: bold;">Behaviour</span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 2.2472in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">0 * * * * *</p>
</td>
<td style="vertical-align: top; width: 5.7583in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Trigger at Zero second on any minute, any hour, any day.</p>
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Effectively triggering once every 60 seconds</p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 2.2472in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">0 0 * * * *</p>
</td>
<td style="vertical-align: top; width: 5.7583in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Trigger at Zero second and Zero minute on any hour, any day.</p>
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Effectively triggering once every 60 minutes. Because the occurrence of 0 second and 0 minute happens once an hour</p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 2.2472in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">0 15 * * * *</p>
</td>
<td style="vertical-align: top; width: 5.7583in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Trigger at Zero second and 15th minute, any hour, any day.</p>
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Effectively triggering once every 60 minutes at the 15th minute mark</p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 2.2472in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">30 30 1 * * *</p>
</td>
<td style="vertical-align: top; width: 5.7583in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Trigger at 30th second and 30th minute and 1st hour, any day.</p>
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Effectively triggering once a day at 01:30:30 AM</p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 2.2472in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">0 0 0 * MON, TUE, WED,FRI</p>
</td>
<td style="vertical-align: top; width: 5.7944in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Trigger at Zero second and Zero minute and Zero hour, any day of the Month and on MON,TUE, WED, FRI.</p>
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Effectively triggering at midnight on the days of Monday, Tuesday, Wednesday and Friday</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Let us explore a more useful feature of the expression:</p>
</div>
</div>
<div style="direction: ltr;">
<div style="direction: ltr;">
<table style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" title="" border="1" summary="" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="background-color: #d8d8d8; vertical-align: top; width: 2.2215in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;"><span style="font-weight: bold;">Expression</span></p>
</td>
<td style="background-color: #d8d8d8; vertical-align: top; width: 5.7812in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;"><span style="font-weight: bold;">Behaviour</span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 2.2215in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">*/1 * * * * *</p>
</td>
<td style="vertical-align: top; width: 5.7812in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Trigger at any second.</p>
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Effectively triggering every second</p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 2.2215in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">*/30 * * * * *</p>
</td>
<td style="vertical-align: top; width: 5.7812in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Trigger at any 30 seconds</p>
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Effectively triggering every 30 seconds</p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 2.2215in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">0 */5 * * * *</p>
</td>
<td style="vertical-align: top; width: 5.7812in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Trigger at Zero second and any 5th minutes</p>
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Effectively triggering at zero second every 5 minutes</p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 2.2215in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">0 30 */6 * * *</p>
</td>
<td style="vertical-align: top; width: 5.7812in; padding: 4pt 4pt 4pt 4pt; border: 1pt solid #A3A3A3;">
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Trigger at Zero second and 30th minute at any six hours</p>
<p style="margin: 0in; font-family: inherit; font-size: 12.0pt; color: #333333;">Effectively triggering every 6 hours at 30min and zero second</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<p>Let us try some of these expression on our newly created function</p>
<p>Click on &#8220;View Files&#8221; then Select file named &#8220;function.json&#8221;, change the schedule property to the expression &#8220;0/30 * * * * *&#8221;</p>
<p>This should trigger the function every 30 seconds starting from zero seconds.</p>
<p><a href="http://www.sarmaad.com/wp-content/uploads/2016/07/30sec-triggered-function.png"><img class="alignnone size-full wp-image-322" src="http://www.sarmaad.com/wp-content/uploads/2016/07/30sec-triggered-function.png" alt="30sec triggered function" width="684" height="750" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/30sec-triggered-function.png 684w, https://www.sarmaad.com/wp-content/uploads/2016/07/30sec-triggered-function-274x300.png 274w" sizes="(max-width: 684px) 100vw, 684px" /></a></p>
<h2>Conclusion</h2>
<p>Azure functions are very flexible and versatile. There are a lot of use-cases were you need to run code on time bases to perform a business function. Some of the common use-cases for time based execution like triggering a backup based on conditions, generate financial statements at the end of the month, send out weekly audit emails, etc</p>
]]></content:encoded>
			<wfw:commentRss>https://www.sarmaad.com/2017/06/scheduled-azure-functions-explained/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Azure WebJobs and RabbitMQ</title>
		<link>https://www.sarmaad.com/2016/11/azure-webjobs-and-rabbitmq/</link>
		<comments>https://www.sarmaad.com/2016/11/azure-webjobs-and-rabbitmq/#comments</comments>
		<pubDate>Tue, 01 Nov 2016 18:06:00 +0000</pubDate>
		<dc:creator><![CDATA[Sarmaad]]></dc:creator>
				<category><![CDATA[Azure WebJobs]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[RabbitMQ]]></category>

		<guid isPermaLink="false">http://www.sarmaad.com/?p=329</guid>
		<description><![CDATA[As I am working on a project that leverages RabbitMQ and Azure WebJobs. I needed to write webjob functions that are triggered by a message on a queue in RabbitMQ. While searching around, I have not found an extension that integrates with Azure WebJobs in a nice way and that is how WebJobs.Extensions.RabbitMQ was born. The library exposes 3 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="float: right; margin: 0 0 10px 15px; width:240px; height: auto;">
		<img src="https://www.sarmaad.com/wp-content/uploads/2016/11/NuGet_project_logo.svg_.png" width="240" style="max-width: 100%; height: auto;" />
		</p><p>As I am working on a project that leverages RabbitMQ and Azure WebJobs. I needed to write webjob functions that are triggered by a message on a queue in RabbitMQ.</p>
<p>While searching around, I have not found an extension that integrates with Azure WebJobs in a nice way and that is how <strong><a href="https://github.com/Sarmaad/WebJobs.Extensions.RabbitMQ" data-pjax="#js-repo-pjax-container">WebJobs.Extensions.RabbitMQ</a></strong> was born.</p>
<p>The library exposes 3 attributes.</p>
<p><strong>RabbitQueueTriggerAttribute</strong>: this attribute will subscribe to the queue and triggers whenever a message arrives.<br />
<code>[RabbitQueueTrigger("queueName")]<br />
</code></p>
<p><strong>RabbitQueueBinderAttribute</strong>: this attribute extends RabbitQueueTriggerAttribute to allow for dynamic creation of the queue and bind it to the exchange.<br />
<code>[RabbitQueueBinder("exchangeName", "routingKey", "errorExchangeName(optional)","autoDelete=false(optional)","durable=true(optional)","exclusive=false(optional)")]<br />
</code></p>
<p><strong>RabbitMessageAttribute</strong>: this attribute allows you to publish a message to an exchange.<br />
<code>[RabbitMessage("exchangeName","routingKey","mandatory=false(optional)"]<br />
</code></p>
<p>&nbsp;</p>
<p>Example of subscription example:</p>
<p><code>public void IntegrateApprovedProductToMarketPlace(<br />
[RabbitQueueBinder("product", "product.approved", "error")]<br />
[RabbitQueueTrigger("integration-product-approved")]<br />
ProductApproved message, TextWriter log)<br />
{<br />
[handle message here]<br />
}</code></p>
<p>Example of a publisher:</p>
<p><code>public void ProcessBulkOrders([some trigger],<br />
[RabbitMessage("order","order.processed")]<br />
out OrderProcessed message, TextWriter log)<br />
{<br />
[assign message value here]<br />
}</code></p>
<p>The code is available on <a href="https://github.com/Sarmaad/WebJobs.Extensions.RabbitMQ">GitHub </a>and <a href="https://www.nuget.org/packages/WebJobs.Extensions.RabbitMQ/">Nuget</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.sarmaad.com/2016/11/azure-webjobs-and-rabbitmq/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Azure Functions Tutorial – Sql Database</title>
		<link>https://www.sarmaad.com/2016/07/azure-functions-tutorial-sql-database/</link>
		<comments>https://www.sarmaad.com/2016/07/azure-functions-tutorial-sql-database/#comments</comments>
		<pubDate>Tue, 05 Jul 2016 14:00:11 +0000</pubDate>
		<dc:creator><![CDATA[Sarmaad]]></dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Azure Functions]]></category>
		<category><![CDATA[CodeProject]]></category>
		<category><![CDATA[Azure Series]]></category>

		<guid isPermaLink="false">http://www.sarmaad.com/?p=277</guid>
		<description><![CDATA[In my previous post, I touched on how to create a simple Azure Function and invoke it through a web request. In this post, I want to do something more interesting that has not yet been covered in any of the template provided. My objective is to insert a record into Sql Azure Database every time [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="float: right; margin: 0 0 10px 15px; width:240px; height: auto;">
		<img src="https://www.sarmaad.com/wp-content/uploads/2016/07/logoAzureSql.png" width="240" style="max-width: 100%; height: auto;" />
		</p><p>In my previous post, I touched on how to <a href="http://www.sarmaad.com/2016/07/microsoft-azure-functions-tutorial-new-function-app/">create a simple Azure Function and invoke it through a web request</a>.</p>
<p>In this post, I want to do something more interesting that has not yet been covered in any of the template provided.</p>
<p><strong>My objective is to insert a record into Sql Azure Database every time I receive a request</strong>.</p>
<p>For this post, we are going to assume you already have Azure Sql database up and running and already have a function app created.</p>
<h2><strong>Prerequisites:</strong></h2>
<ol>
<li>create an Azure Sql Database from the portal.</li>
<li>create a table called LogRequest with two columns (Id [PK, int, identity] ,  Log [nvarchar(max)]<br />
<div class="woo-sc-box  info   ">I used <a href="https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx">visual studio 2015 community</a> to connect to sql database can created the new table.</div><a href="http://www.sarmaad.com/wp-content/uploads/2016/07/sql-database-with-table.png"><img class="alignnone wp-image-281 size-large" src="http://www.sarmaad.com/wp-content/uploads/2016/07/sql-database-with-table-1024x474.png" alt="sql database with table" width="1024" height="474" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/sql-database-with-table-1024x474.png 1024w, https://www.sarmaad.com/wp-content/uploads/2016/07/sql-database-with-table-300x139.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/sql-database-with-table-768x355.png 768w, https://www.sarmaad.com/wp-content/uploads/2016/07/sql-database-with-table.png 1319w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></li>
</ol>
<p>&nbsp;</p>
<h2>Function Code and Database Configuration:</h2>
<ol>
<li>Click on &#8220;<strong>New Function</strong>&#8220;, then select &#8220;<strong>HttpTrigger &#8211; C#</strong>&#8220;, Name your function &#8220;<strong>HttpTriggerSqlDatabase</strong>&#8221; to make it easy to locate</li>
<li>Once you get the default code view, find the small link down the bottom of the code text box called &#8220;<strong>View files</strong>&#8220;</li>
<li>Click on the &#8220;+&#8221; sign to add new file, name the file &#8220;<strong>project.json</strong>&#8221; we are going to use this file to add all required nuget packages.<br />
copy and paste the json content bellow and hit save.<br />
<div class="woo-sc-box  normal   ">
<pre>{
  "frameworks": {
    "net46":{
      "dependencies": {
        "Dapper": "1.42.0",
        "System.Data.SqlClient":"4.1.0",
        "Microsoft.WindowsAzure.ConfigurationManager":"3.2.1"
      }
    }
   }
}
</pre>
</div><br />
you should start seeing the logs restoring all missing nuget packages, then compile the code.</li>
<li>Associate your database connection string to the Function App. To do that, click on the top link &#8220;<strong>Function app settings</strong>&#8221; then click the button &#8220;<strong>Go to App Service Settings</strong>&#8221;<br />
<a href="http://www.sarmaad.com/wp-content/uploads/2016/07/azure-function-manage-app-service-settings.png"><img class="alignnone wp-image-288 size-medium" src="http://www.sarmaad.com/wp-content/uploads/2016/07/azure-function-manage-app-service-settings-300x215.png" alt="azure function manage app service settings" width="300" height="215" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/azure-function-manage-app-service-settings-300x215.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/azure-function-manage-app-service-settings-768x551.png 768w, https://www.sarmaad.com/wp-content/uploads/2016/07/azure-function-manage-app-service-settings-1024x735.png 1024w, https://www.sarmaad.com/wp-content/uploads/2016/07/azure-function-manage-app-service-settings.png 1314w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
It will open your Function App settings page, then click on <strong>Data Contentions, Add<br />
</strong><a href="http://www.sarmaad.com/wp-content/uploads/2016/07/add-new-data-connection.png"><img class="alignnone size-medium wp-image-290" src="http://www.sarmaad.com/wp-content/uploads/2016/07/add-new-data-connection-300x161.png" alt="add new data connection" width="300" height="161" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/add-new-data-connection-300x161.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/add-new-data-connection-768x413.png 768w, https://www.sarmaad.com/wp-content/uploads/2016/07/add-new-data-connection-1024x550.png 1024w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
once you successfully added a connection called &#8220;<strong>SqlConnection</strong>&#8220;, close the views and navigate back to your function using the breadcrumbs.</li>
<li>Click on your function named &#8220;HttpTriggerSqlDatabase&#8221;, copy the snippet bellow.<br />
<div class="woo-sc-box  normal   ">
<pre>using System.Net;
using Dapper;
using System.Data.SqlClient;
using System.Configuration;


public static async Task&lt;HttpResponseMessage&gt; Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}");

    var successful =true;
    try
    {
        var cnnString  = ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString;
        
        using(var connection = new SqlConnection(cnnString))
        {
            connection.Open();
            
            var rLog = await req.Content.ReadAsAsync&lt;LogRequest&gt;();
            
            // insert a log to the database
            // NOTE: Execute is an extension method from Dapper library
            connection.Execute("INSERT INTO [dbo].[LogRequest] ([Log]) VALUES (@Log)", rLog);
            log.Info("Log added to database successfully!");
        }
    }
    catch
    {
        successful=false;
    }
    
    return !successful
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Unable to process your request!")
        : req.CreateResponse(HttpStatusCode.OK, "Data saved successfully!");
}
public class LogRequest
{
    public int Id{get;set;}
    public string Log{get;set;}
}
</pre>
</div></li>
</ol>
<p>&nbsp;</p>
<p>Now save the code and ensure the logs shows the function compiled successfully.</p>
<h2>Testing the Function</h2>
<p>Scrolling down the page to the <strong>Run</strong> section, you can invoke your API</p>
<p><a href="http://www.sarmaad.com/wp-content/uploads/2016/07/testing-the-api.png"><img class="alignnone wp-image-298 size-large" src="http://www.sarmaad.com/wp-content/uploads/2016/07/testing-the-api-1024x525.png" alt="testing the api" width="1024" height="525" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/testing-the-api-1024x525.png 1024w, https://www.sarmaad.com/wp-content/uploads/2016/07/testing-the-api-300x154.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/testing-the-api-768x394.png 768w, https://www.sarmaad.com/wp-content/uploads/2016/07/testing-the-api.png 1362w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>I used <a href="https://www.linqpad.net/">LinqPad</a> to retrieve the record from the database to verify that my data was actually saved successfully.</p>
<p><a href="http://www.sarmaad.com/wp-content/uploads/2016/07/linqpad-test.png"><img class="alignnone size-large wp-image-299" src="http://www.sarmaad.com/wp-content/uploads/2016/07/linqpad-test-1024x607.png" alt="linqpad test" width="1024" height="607" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/linqpad-test-1024x607.png 1024w, https://www.sarmaad.com/wp-content/uploads/2016/07/linqpad-test-300x178.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/linqpad-test-768x455.png 768w, https://www.sarmaad.com/wp-content/uploads/2016/07/linqpad-test.png 1046w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<h2>Conclusion</h2>
<p>It was relatively easy to have my Azure Function connect to a database and insert a record triggered by a web request.</p>
<p>Using  nuget to download packages and reference them in the function is extremely useful, given that most of .Net framework and 3rd party are available as packages.</p>
<p>This scenario gives us the opportunity to design solutions that store request&#8217;s data into a relational database which is a step closer to real business application&#8217;s requirement.</p>
<p>In feature posts, we will take this a step further and emit events to trigger other Functions to perform other actions meaningful to the data received.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.sarmaad.com/2016/07/azure-functions-tutorial-sql-database/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Azure Functions Tutorial – New Function App</title>
		<link>https://www.sarmaad.com/2016/07/microsoft-azure-functions-tutorial-new-function-app/</link>
		<comments>https://www.sarmaad.com/2016/07/microsoft-azure-functions-tutorial-new-function-app/#respond</comments>
		<pubDate>Sun, 03 Jul 2016 15:02:03 +0000</pubDate>
		<dc:creator><![CDATA[Sarmaad]]></dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Azure Functions]]></category>
		<category><![CDATA[CodeProject]]></category>
		<category><![CDATA[Azure Series]]></category>

		<guid isPermaLink="false">http://www.sarmaad.com/?p=247</guid>
		<description><![CDATA[Creating a new Function App In this post we will look at creating a new Azure Function App and explore a provided example. Let&#8217;s start by creating a new Function App and walk through the setup process. (This post assumes you already have an Azure account.) 1. Add a Function App by clicking on the + icon and searching [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="float: right; margin: 0 0 10px 15px; width:240px; height: auto;">
		<img src="https://www.sarmaad.com/wp-content/uploads/2016/07/function_landing_view.png" width="240" style="max-width: 100%; height: auto;" />
		</p><h2>Creating a new Function App</h2>
<p>In this post we will look at creating a new Azure Function App and explore a provided example.</p>
<p>Let&#8217;s start by creating a new Function App and walk through the setup process. (This post assumes you already have an Azure account.)</p>
<p>1. Add a Function App by clicking on the + icon and searching for Function App</p>
<p><a href="http://www.sarmaad.com/wp-content/uploads/2016/07/create_new_function_app.png" target="_blank"><img class="alignnone wp-image-248 size-medium" src="http://www.sarmaad.com/wp-content/uploads/2016/07/create_new_function_app-300x131.png" alt="Add new azure function" width="300" height="131" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/create_new_function_app-300x131.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/create_new_function_app-768x336.png 768w, https://www.sarmaad.com/wp-content/uploads/2016/07/create_new_function_app-1024x448.png 1024w, https://www.sarmaad.com/wp-content/uploads/2016/07/create_new_function_app.png 1551w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>2. fill in the details of your new function. Keep in mind, the app name is unique across the namespace, which means, you will not be able to use the same name as I used here in this tutorial.</p>
<div class="woo-sc-box  info   ">
<p>Dynamic Pricing.<br />
As of the writing of this post, Dynamic pricing was not available on <a href="https://azure.microsoft.com/en-in/pricing/details/functions/">Microsoft Azure Function Pricing</a>. make sure you check the pricing page to get the latest update</p>
</div>
<p><img class="wp-image-249 size-full alignnone" src="http://www.sarmaad.com/wp-content/uploads/2016/07/new_function_create_dialog.png" alt="new function create dialog" width="386" height="763" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/new_function_create_dialog.png 386w, https://www.sarmaad.com/wp-content/uploads/2016/07/new_function_create_dialog-152x300.png 152w" sizes="(max-width: 386px) 100vw, 386px" /></p>
<p>3. Once the function app is created and deployed successfully, it will open the function home view</p>
<p><a href="http://www.sarmaad.com/wp-content/uploads/2016/07/function_landing_view.png" target="_blank"><img class="alignnone wp-image-262 size-medium" src="http://www.sarmaad.com/wp-content/uploads/2016/07/function_landing_view-300x158.png" alt="function landing view" width="300" height="158" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/function_landing_view-300x158.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/function_landing_view-768x404.png 768w, https://www.sarmaad.com/wp-content/uploads/2016/07/function_landing_view-1024x539.png 1024w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Now you are ready to experiment with Azure Function App. Go ahead and explore the samples provided.</p>
<p>Here, we are going to examine a sample under Webhook + API scenario using C# as our language.</p>
<p>Select <strong>Webhook + API</strong> scenario, select <strong>C#</strong> as the language, then click &#8220;<strong>Create this function</strong>&#8221;</p>
<p>once the function is created, Azure Portal will open this windows:</p>
<p><a href="http://www.sarmaad.com/wp-content/uploads/2016/07/sample_webhook_api_function.png"><img class="alignnone wp-image-266 size-large" src="http://www.sarmaad.com/wp-content/uploads/2016/07/sample_webhook_api_function-1024x575.png" alt="sample webhook api function" width="1024" height="575" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/sample_webhook_api_function-1024x575.png 1024w, https://www.sarmaad.com/wp-content/uploads/2016/07/sample_webhook_api_function-300x168.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/sample_webhook_api_function-768x431.png 768w, https://www.sarmaad.com/wp-content/uploads/2016/07/sample_webhook_api_function.png 1310w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<h2>Running the function</h2>
<p>We can run the function online by scrolling down the page to the Run section and test our newly created function and click Run.</p>
<p>This gives us a quick way to test our function to make sure it&#8217;s behaving as expected</p>
<p><a href="http://www.sarmaad.com/wp-content/uploads/2016/07/run_sample_webhook_api_function.png"><img class="alignnone wp-image-267 size-full" src="http://www.sarmaad.com/wp-content/uploads/2016/07/run_sample_webhook_api_function.png" alt="Run sample webhook function" width="915" height="698" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/run_sample_webhook_api_function.png 915w, https://www.sarmaad.com/wp-content/uploads/2016/07/run_sample_webhook_api_function-300x229.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/run_sample_webhook_api_function-768x586.png 768w" sizes="(max-width: 915px) 100vw, 915px" /></a></p>
<p>Now let us try to invoke this function from Fiddler:</p>
<p>1. copy the <strong>Function Url</strong> from the sample function.</p>
<p><img class="alignnone size-full wp-image-269" src="http://www.sarmaad.com/wp-content/uploads/2016/07/function_url.png" alt="function_url" width="1273" height="226" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/function_url.png 1273w, https://www.sarmaad.com/wp-content/uploads/2016/07/function_url-300x53.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/function_url-768x136.png 768w, https://www.sarmaad.com/wp-content/uploads/2016/07/function_url-1024x182.png 1024w" sizes="(max-width: 1273px) 100vw, 1273px" /></p>
<p>2. open fiddler and go to composer, choose POST as the method, paste the Function Url copied earlier</p>
<div class="woo-sc-box  note   ">It is important to set the content-type to application/json if you are using POST method</div>
<p><img class="alignnone size-full wp-image-270" src="http://www.sarmaad.com/wp-content/uploads/2016/07/fiddler_run_function.png" alt="fiddler_run_function" width="1193" height="827" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/fiddler_run_function.png 1193w, https://www.sarmaad.com/wp-content/uploads/2016/07/fiddler_run_function-300x208.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/fiddler_run_function-768x532.png 768w, https://www.sarmaad.com/wp-content/uploads/2016/07/fiddler_run_function-1024x710.png 1024w" sizes="(max-width: 1193px) 100vw, 1193px" /></p>
<p>Now execute the request and you should get a result of code 200, bellow showing both raw request and response.</p>
<p><img class="alignnone size-full wp-image-271" src="http://www.sarmaad.com/wp-content/uploads/2016/07/fiddler_run_function_result.png" alt="fiddler_run_function_result" width="1191" height="828" srcset="https://www.sarmaad.com/wp-content/uploads/2016/07/fiddler_run_function_result.png 1191w, https://www.sarmaad.com/wp-content/uploads/2016/07/fiddler_run_function_result-300x209.png 300w, https://www.sarmaad.com/wp-content/uploads/2016/07/fiddler_run_function_result-768x534.png 768w, https://www.sarmaad.com/wp-content/uploads/2016/07/fiddler_run_function_result-1024x712.png 1024w" sizes="(max-width: 1191px) 100vw, 1191px" /></p>
<h2>Conclusion</h2>
<p>In this tutorial we have seen how to create an Azure Function App, create a sample function and run the function both online and from a desktop application.</p>
<p>What is really significant here, there was no server to provision, no code to compile and no configurations to enable API endpoint.</p>
<p>Azure Function can play a significant role in a (Micro)service solution focusing on single responsibility and agility in building a robust architecture.</p>
<p>In the up coming posts, we will take this further in building a real life solution using Azure Function.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.sarmaad.com/2016/07/microsoft-azure-functions-tutorial-new-function-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Azure Blog Series</title>
		<link>https://www.sarmaad.com/2016/07/microsoft-azure-blog-series/</link>
		<comments>https://www.sarmaad.com/2016/07/microsoft-azure-blog-series/#respond</comments>
		<pubDate>Fri, 01 Jul 2016 17:58:55 +0000</pubDate>
		<dc:creator><![CDATA[Sarmaad]]></dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Azure Series]]></category>

		<guid isPermaLink="false">http://www.sarmaad.com/?p=228</guid>
		<description><![CDATA[It has been rather a long time since my last blog post. During the &#8220;gap&#8221; I have been working on a lot of projects and various technologies. What I intend to with this blog series is to document my journey thus far focusing with Microsoft Azure platform and explore with examples various services offered by the platform. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="float: right; margin: 0 0 10px 15px; width:240px; height: auto;">
		<img src="https://www.sarmaad.com/wp-content/uploads/2016/07/Azure-Logo.png" width="240" style="max-width: 100%; height: auto;" />
		</p><p>It has been rather a long time since my last blog post. During the &#8220;gap&#8221; I have been working on a lot of projects and various technologies.</p>
<p>What I intend to with this blog series is to document my journey thus far focusing with Microsoft Azure platform and explore with examples various services offered by the platform.</p>
<p>These are some of the topics I would like to cover:</p>
<ul>
<li>Building microservices with Azure Functions</li>
<li>Building a windows service that communicate with Azure ServiceBus</li>
<li>Deploy docker containers using Microsoft Container Service</li>
</ul>
<p>I will keep this page updated and link to posts as I publish them.</p>
<p>The format of these blogs will be a documentary of a development process, from solution design, service configuration, implementation and deployment. I intend to make the code available on my GitHub account.</p>
<p>If you like me to cover a specific Azure service, leave me a comment and I might add it to the above list.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.sarmaad.com/2016/07/microsoft-azure-blog-series/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloud Computing – CloudCamp Sydney</title>
		<link>https://www.sarmaad.com/2010/03/cloud-computing-cloudcamp-sydney/</link>
		<comments>https://www.sarmaad.com/2010/03/cloud-computing-cloudcamp-sydney/#respond</comments>
		<pubDate>Thu, 04 Mar 2010 11:47:04 +0000</pubDate>
		<dc:creator><![CDATA[Sarmaad]]></dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Event]]></category>

		<guid isPermaLink="false">http://stage.sarmaad.com/?p=82</guid>
		<description><![CDATA[Last night I attended CloudCamp Sydney.Â  It was pitched as an â€œunconferenceâ€ format where quick 5 mins presentations are made and upon completion the attendees outline points they wish to speak about.Â  Those ideas are grouped into categories and then breakout sessions are created. Conceptually the idea is great however, when we got to those [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Last night I attended CloudCamp Sydney.Â  It was pitched as an â€œunconferenceâ€ format where quick 5 mins presentations are made and upon completion the attendees outline points they wish to speak about.Â  Those ideas are grouped into categories and then breakout sessions are created.</p>
<p>Conceptually the idea is great however, when we got to those sessions I found that not having a dedicated leader for the session meant the topic often moved into different areas.</p>
<p>Enough about the structure and more about the actual content.</p>
<p>As early adopters of Cloud Computing we identify issues and concerns having greater importance compared to actual uptake of the technology.</p>
<p>It was interesting to hear the delegates last night speak about what they wanted from the â€œCloudâ€ providers.</p>
<p>â€œStandardsâ€ is what everyone was crying out for.Â  The problem with standards is that when its created those who invested in creating those standards are set to lose the most financially.Â  The IT industry is quite well known for creating standards and then choosing not to either accept them or implement them.</p>
<p>â€œData portabilityâ€ between providers was the other main sticking point with uptake.Â  There is a fear that when a company or user stops paying for the service, the Cloud provider simply turns them off and they have now lost their data.</p>
<p>This is a valid point, but how one company stores data (and therefore converts that data into information) is what makes people either buy or use that application.Â  Those different methods are called IP.Â  Again, why would businesses want to share IP amongst competitors if there was no financial benefit?</p>
<p>What was positive about the night was that this particular movement in the industry begins to open new untapped market opportunities, <strong>Services</strong>.Â  Across all industries, service companies are making good headway into providing what suppliers canâ€<img src="https://s.w.org/images/core/emoji/11/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t, customer service, support, etc.</p>
<p>As this industry (Cloud Computing) is starting to gain legs, integration, migration, data management services are all new verticals that will spring into the foreground for people/companies to make a living from.</p>
<p>Overall, it was an interesting evening to attend.Â  The night not only provided the standard â€œCloud Providerâ€ pitches but allowed for attendees to have general chats and discussions.Â  One point I would make, is that I would have preferred to have a mediator in each breakout session to ensure the conversation/discussion stayed on topic.</p>
<p>Interesting times ahead for â€œCloudâ€ Computing and what will the catalyst be for businesses to take up Cloud Computing?</p>
]]></content:encoded>
			<wfw:commentRss>https://www.sarmaad.com/2010/03/cloud-computing-cloudcamp-sydney/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running MSBuild 4.0 and MSBuild 3.5 on Continuous Integration</title>
		<link>https://www.sarmaad.com/2010/02/running-msbuild-4-0-and-msbuild-3-5-on-continuous-integration/</link>
		<comments>https://www.sarmaad.com/2010/02/running-msbuild-4-0-and-msbuild-3-5-on-continuous-integration/#respond</comments>
		<pubDate>Thu, 25 Feb 2010 10:38:26 +0000</pubDate>
		<dc:creator><![CDATA[Sarmaad]]></dc:creator>
				<category><![CDATA[References]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[MS Build]]></category>

		<guid isPermaLink="false">http://stage.sarmaad.com/?p=80</guid>
		<description><![CDATA[With Visual Studio 2010 RC released recently, we jumped on the release and began to code with VS2010.Â  One issue that popped up was that now all builds were targeting MSBuild 4.0. That doesnâ€™t seem to be a big problem until our CruiseControl CI server kicked in, downloaded our updated code and failed building the [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>With Visual Studio 2010 RC released recently, we jumped on the release and began to code with VS2010.Â  One issue that popped up was that now all builds were targeting MSBuild 4.0.</p>
<p>That doesnâ€<img src="https://s.w.org/images/core/emoji/11/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t seem to be a big problem until our CruiseControl CI server kicked in, downloaded our updated code and failed building the upgraded projects.</p>
<p>Fortunately there is a very quick solution to this little problem.Â  There are a couple of requirements.</p>
<ol>
<li>You need to have VS2010 RC installed somewhere</li>
<li>You need to download the .Net Framework 4.0 (I recommend the full version and not just the Client Profile, it ensures you donâ€<img src="https://s.w.org/images/core/emoji/11/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t miss anything)</li>
</ol>
<p>To fix, do the following:</p>
<ol>
<li>download and install the .Net Framework 4.0 on the CI server (then restart the server)</li>
<li>on the computer where VS2010 RC is installed go to the following path:<br />
%programfiles%MSBuildMicrosoftVisualStudio</li>
<li>copy the v10.0 folder located in that directory into the CI server at the same path (or wherever our MSbuild path is on the CI server)</li>
<li>Once that is done, edit the ccnet.config file at the &lt;msbuild&gt;&lt;executable&gt; tag and change it to the new .Net 4.0 Framework installed (you should only need to change the section â€œv3.5â€ to â€œv4.0.xxxxxâ€</li>
</ol>
<p>Hope this helps</p>
]]></content:encoded>
			<wfw:commentRss>https://www.sarmaad.com/2010/02/running-msbuild-4-0-and-msbuild-3-5-on-continuous-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The StartupCamp III Experience and ChefMeUp.com</title>
		<link>https://www.sarmaad.com/2010/02/the-startupcamp-iii-experience-and-chefmeup-com/</link>
		<comments>https://www.sarmaad.com/2010/02/the-startupcamp-iii-experience-and-chefmeup-com/#respond</comments>
		<pubDate>Mon, 22 Feb 2010 01:00:32 +0000</pubDate>
		<dc:creator><![CDATA[Sarmaad]]></dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Competition]]></category>
		<category><![CDATA[StartupCamp]]></category>

		<guid isPermaLink="false">http://stage.sarmaad.com/?p=76</guid>
		<description><![CDATA[On Friday 19th February 2010, a group of 38 individual gather to race through the next 2 nights and 3 days to build, demo and pitch new concepts, ideas and ultimately demonstrate innovation. Yes, I was one of these 38, enduring two days with only 2.5 hours of sleep. Nothing else mattered, but delivering the [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>On Friday 19th February 2010, a group of 38 individual gather to race through the next 2 nights and 3 days to build, demo and pitch new concepts, ideas and ultimately demonstrate innovation.</p>
<p>Yes, I was one of these 38, enduring two days with only 2.5 hours of sleep. Nothing else mattered, but delivering the promised goods. My team of 4 â€“ successfully and proudly delivered this service: <a href="http://www.chefmeup.com" target="_blank">ChefMeUp.com</a></p>
<p>Since this is a technical blog, I wont bore you with the emotional details of the three days, but I will introduce you to the team that made this happen.</p>
<p><strong>Casey Butler â€“ Role: PR/Marketing<br />
</strong>Casey is a start-up founder and a musician who has come to StartupCamp Sydney to practice business and polish his skills for the real world. His role in building the business case and drumming the PR and marketing is critical to the success of the project. BTW, he flew all the way from Melbourne to be here in Sydney.</p>
<p><strong>Dave Trindall â€“ Role: Developer<br />
</strong>Dave is an active developer specialises in the Microsoft technology stack. His dedication to development have lead him to StartupCamp Sydney III to demonstrate his knowledge and experience. Daveâ€<img src="https://s.w.org/images/core/emoji/11/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s newest website launch is his meaningful short URL service found at: <a title="http://ko.ly/" href="http://ko.ly/">http://ko.ly/</a></p>
<p><strong>Brett Samuel â€“ Role: Graphic Designer<br />
</strong>Brettâ€<img src="https://s.w.org/images/core/emoji/11/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s background is business development and entrepreneurship. has successfully established and sold his last business, Brett gravitated to StartupCamp Sydney III to learn and share the experience of a new atmosphere and innovation.</p>
<p><strong>Sarmaad Amin â€“ Role: Developer<br />
</strong>Sarmaad is a .Net enterprise application developer that have worked on may successful IT projects. He came to StartupCamp Sydney III to explore new innovation and develop ideas in a different environment that cultivate innovation. His experience in software development contributed to the successful completion and launch of the project at StartupCamp Sydney.</p>
<h1>â€œChefMeUp.com is a project born in 11 hours , from zero code to completion 100% borrowed code freeâ€</h1>
<p>Thatâ€<img src="https://s.w.org/images/core/emoji/11/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s right, the website was completed and fully functional with 11 hours of nothing but pure development and excitement.</p>
<p>This is a short run down of the technology.</p>
<p>I have opt-in to use<strong> LLBLGen Pro</strong> as our ORM layer with <strong>Microsoft SQL Server 2008</strong>. The front end is designed and coded using <strong>ASP.NET MVC 2 RC 2</strong>, yes, using <strong>Visual Studio 2010 RC</strong>.</p>
<p>I have to say, this is the fasted development I have been involved in, even for a fully functional prototype and without using the MVC framework, I doubt it would have finished on time.</p>
<p>the features of the application includes:</p>
<ul>
<li>complete login/registration system for Chefs to list their services</li>
<li>paypal integration for registration payment</li>
<li>twitter integration for posting to twitter network and update from it.</li>
<li>Bing map integration to display the chefs/restaurant registered in the network.</li>
</ul>
<p>basically all the necessary plumping to operate a web 2.0 style vertical industry service directory business. which in our case we choose Chef and other cooking services.</p>
<p>have a look at our presentation. BTW, I wasnâ€<img src="https://s.w.org/images/core/emoji/11/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t there because I was building the better websiteâ€¦ <img src="https://s.w.org/images/core/emoji/11/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<div><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/0QO2NhGEbh0&amp;hl=en_US&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/0QO2NhGEbh0&amp;hl=en_US&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<p>Check out the website <a href="http://www.chefmeup.com" target="_blank">ChefMeUp.com</a> and let me know what you thing and if you are interested in the source code, send me an email or leave a comment on this post and I would send you a copy.</p>
<p>now to go and get some more sleep, happy codingâ€¦</p>
]]></content:encoded>
			<wfw:commentRss>https://www.sarmaad.com/2010/02/the-startupcamp-iii-experience-and-chefmeup-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IDP Solutions Sponsors Online Retailer Exhibition</title>
		<link>https://www.sarmaad.com/2010/01/idp-solutions-sponsors-online-retailer-exhibition/</link>
		<comments>https://www.sarmaad.com/2010/01/idp-solutions-sponsors-online-retailer-exhibition/#respond</comments>
		<pubDate>Sun, 24 Jan 2010 18:09:37 +0000</pubDate>
		<dc:creator><![CDATA[Sarmaad]]></dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Expo]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[MYOB]]></category>

		<guid isPermaLink="false">http://stage.sarmaad.com/?p=72</guid>
		<description><![CDATA[IDP Solutionsâ€™ new soon to be released product, MYOBSync is the driving force in deciding to sponsor and exhibit at the 2nd annual Online Retailer Expo and Conferenceto be held in Sydney in July.]]></description>
				<content:encoded><![CDATA[<p>IDP Solutionsâ€<img src="https://s.w.org/images/core/emoji/11/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> new soon to be released product, CartConnectÂ is the driving force in deciding to sponsor and exhibit at the <a href="http://www.onlineretailer.net" target="_blank">2nd annual Online Retailer Expo and Conference</a> to be held in Sydney in July.</p>
<p>Over the past few years <a href="http://www.idpsolutions.com.au" target="_blank">IDP Solutions</a> has provided many customers with solutions to manage online stores and capture data and convert that into important business information.</p>
<p>With all that knowledge of what online business owners required we took the step into creating MYOBSync.Â  MYOBSync does what is says, Syncs between MYOB and your online cart.</p>
<p>Make sure you put the dates between the 6th and 9th of July in your calendar to come see us at the Expo.Â  Weâ€<img src="https://s.w.org/images/core/emoji/11/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ll be in stall 105.</p>
<p>Hope to see you then.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.sarmaad.com/2010/01/idp-solutions-sponsors-online-retailer-exhibition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>