<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Vijaya Malla]]></title><description><![CDATA[thoughts, stories, ideas and experiences]]></description><link>https://vijayamalla.azurewebsites.net/</link><generator>Ghost 0.11</generator><lastBuildDate>Tue, 07 Apr 2026 10:18:22 GMT</lastBuildDate><atom:link href="https://vijayamalla.azurewebsites.net/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Sadhguru Quotes - Chrome/Edge Extension]]></title><description><![CDATA[<p>Hi Everyone, </p>

<p>I wanted to share a small browser extension I have created and published on the <a href="https://chrome.google.com/webstore/category/extensions">Chrome Web Store</a> called <a href="https://chrome.google.com/webstore/detail/sadhguru-quotes/laggffbboocgfmdhdcbafokdjndfclap">Sadhguru Quotes</a>.</p>

<p>My intention is to spread the wisdom shared by Sadhguru every day by bringing it to the browser that we use most of our day.</p>

<p>Since the</p>]]></description><link>https://vijayamalla.azurewebsites.net/sadhguru-quotes-chrome-edge-extension/</link><guid isPermaLink="false">6cbf5a40-36ce-4642-9a01-7f1e8a66dcc3</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Fri, 08 Jan 2021 04:38:03 GMT</pubDate><content:encoded><![CDATA[<p>Hi Everyone, </p>

<p>I wanted to share a small browser extension I have created and published on the <a href="https://chrome.google.com/webstore/category/extensions">Chrome Web Store</a> called <a href="https://chrome.google.com/webstore/detail/sadhguru-quotes/laggffbboocgfmdhdcbafokdjndfclap">Sadhguru Quotes</a>.</p>

<p>My intention is to spread the wisdom shared by Sadhguru every day by bringing it to the browser that we use most of our day.</p>

<p>Since the new Edge Browser is based on Chromium, the same extension can be installed on Edge (Chrome based) and Chrome itself.</p>

<p>Please click on the link above or <a href="https://chrome.google.com/webstore/detail/sadhguru-quotes/laggffbboocgfmdhdcbafokdjndfclap">here</a> and install it on your browser.</p>

<p>Thank you <br>
Vijaya Malla <br>
<a target="_blank" href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item><item><title><![CDATA[How To - Azure Maps 101 - Learn how to Azure Maps + .NET Core]]></title><description><![CDATA[<h6 id="gettingstartedwithazuremaps">Getting started with Azure Maps</h6>

<p>In this article, I am trying to get you started with Azure Maps. How to get it set up and create the necessary resources and make changes to the Maps etc.</p>

<p>In my current job, we work with millions of customers who we help set</p>]]></description><link>https://vijayamalla.azurewebsites.net/how-to-azure-maps-101-learn-how-to-setup-azure-maps-and-consume-it-in-net-core-project/</link><guid isPermaLink="false">e9c90a31-1176-4f8b-bdfa-c1eb05aea912</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Fri, 31 Jul 2020 21:23:35 GMT</pubDate><content:encoded><![CDATA[<h6 id="gettingstartedwithazuremaps">Getting started with Azure Maps</h6>

<p>In this article, I am trying to get you started with Azure Maps. How to get it set up and create the necessary resources and make changes to the Maps etc.</p>

<p>In my current job, we work with millions of customers who we help set up their equipment. We have a Mobile application for the field technicians and a web front application for all the other people to monitor the progress and make future planning.</p>

<p>Since the physical location of our customers plays a major role in planning and send out technicians for better productivity, Maps are the best bet for us. That got me started into Maps and specifically Azure Maps.</p>

<pre><code>I am a .NET developer and my sample will be in  
.NET Core, Web App with MVC
and I am using VS for MAC  
</code></pre>

<p><strong>Azure Maps 101</strong></p>

<blockquote>
  <p><strong><h2>1. Create your .NET Project (on VS for MAC)</h2></strong></p>
</blockquote>

<p>Open VS of MAC, and</p>

<ol>
<li>Select <strong>App</strong> from the Web and Console</li>
<li>Selected <strong>"Web Application (Model-View-Controller)"</strong></li>
<li><p>Click <strong>"Next"</strong></p>

<p><img src="https://c4qxng.dm.files.1drv.com/y4m8LXdXapDfhA2qm64EAR5N3lViS38CDWiEzMoq1AkHMuEkbq6sN-5_xTTspI4uNfdojJsf-ByMWUxt5a1OoL2NT7qf-4-YFWlJjmUPZ6zSOBE3RlCEW86H5K4y-SB-86pUgxOfHNIXzOlXfrU-gD5e0wC6lXXlTLDmZFHRkDbA7FtS972E1CYiWHdD0I7jzHxVixVpAJ4TovO2pcEPMA9Bg?width=2026&amp;height=1532&amp;cropmode=none" alt="New Project 1" title=""></p></li>
<li><p>I picked <strong>"No Authentication"</strong> and clicked <strong>"Next"</strong></p>

<p><img src="https://1zriwa.dm.files.1drv.com/y4mFPiK-TH6Xd8ieg05l1iaVhaPntgz-j-AmpHjHoFl2GFEfmZw3_2EtPXM5IIN70AjuGMgl0NePewCekK1md2cozC1r-wYqUnnz0R3YR27nPoF9WeYMFPmLpobtnQ2hZSJ3pc9qhC9a0e9YS3PG4LA_3eKezj9CN01u9NxFiD423hLMVRK3iUMQwNnuW9QQkn8gevo57s_-nVO2ZU-7CBOVA?width=2026&amp;height=1532&amp;cropmode=none" alt="New Project 2" title=""></p></li>
<li><p>Give it a <strong>name</strong> and click <strong>Create</strong></p>

<p><img src="https://pvjyqa.dm.files.1drv.com/y4mio50jF15K1UJyHViWsoECn5KyNIMHuxVablpuMPe9NC9PRXWjER6amSKgEq_BDO_CGcGEiMSOLDcY9w6VPo7tyGlTxjUS6zfRJQsqi---PUsybS7z_BBHYUYZwz-fk07bsMgqCX56UGbwcusht7UFCME68_VqbruynGhXDV4e1PWZxvCF8HG6VMKteeQy2Lt_PcR9b0egI5HCk4pCLlOKg?width=2032&amp;height=1532&amp;cropmode=none" alt="new project" title=""></p></li>
<li><p>Now within a couple of seconds, the App is created and do a build on the project, you might see the following window, click "Run"</p>

<p><img src="https://m98ciq.dm.files.1drv.com/y4mHuhxJdjnHY66KW5__XxiLXwthO8QIxdi4MC6fNBdyzuot1JIpF45av3yo4c-N9euO-cAR7CDbOb5whtk8tQKPIBUcCufBPfWZhbw3w9udTEKJ9zcPJuWcD64jVROKLOT_DL06ErFqLmz5VCvVWTmM_7rTOK9YcG8Ple5XuFIQ1hh_rImLBCEjUtOShuUsQf2XMpbiZG5RAI9Vk1r7EPgCA?width=1400&amp;height=454&amp;cropmode=none" alt="Build 1" title=""></p>

<p><img src="https://zloqkw.dm.files.1drv.com/y4mHv4YkkCTXHLHVPj4Rxpj7HVA57mmGzxWQnUF8y20Z3vtXhlMpPADSY16F5At6NVjw6QE4EtWX7It_aJjDYPSeK4OS5raO-CWnpbWRZMpeXCsnE3UhzC919D0r0sjdiuP2hAf6b806WGC407viBJUr6LdeAeSu1VCQWYYfCFFql4_059c-H50UQmDKBYi7bcyaUDlJoc0VF3eEx2tcS8bPQ?width=1298&amp;height=468&amp;cropmode=none" alt="Build 2" title=""></p>

<p>Click on Install and Trust. Now you will the basic staring page open. Now as we have the app up and running, now let's get to Azure and create the necessary resources.</p></li>
</ol>

<blockquote>
  <p><strong><h2>2. Create Azure Maps Resources</h2></strong></p><h2><p></p>
</h2></blockquote>

<p>Open a browser and go to <a href="https://portal.azure.com/">Azure Portal</a>. If you don't have an account you can go for a <a href="https://azure.microsoft.com/en-us/free/">Free Trail</a></p>

<p><strong>1.</strong> After you log in to Azure, you will see something like below. And if you are not familiar with Azure we can group the resources on Azure within "Resource Groups". Click on "Resource Groups" on the left side.</p>

<p><img src="https://capkpw.dm.files.1drv.com/y4mJpy70I8vEWUFngRz_IL79K3pYI0JAiMsy5Qy5KF0sTouS5U4CwOk1oBQppii5U0sMl1P7V1aEYPkdAwwNb_1RpEalJkLFZaXCgBFNnOvHfVXzALq1ZLXG79gZDj6Te8R7HLHhfQ55w0_nzgYeIDLo5HYgHAcLo6Unatjy1YgO5PF4KM39RziKX4YyFU3DDQYYXbaR0ozLiENXnF0ueCY3A?width=660&amp;height=316&amp;cropmode=none" alt="Azure 1"></p>

<p><strong>2.</strong> Create a Resource Group</p>

<p><img src="https://n7gtew.dm.files.1drv.com/y4mH1BP22xnnhxHhrbpVJjrqiX9rJx655vMLOOisO3L6zWo-_-gT4S3ZEclSyH4xejoxMKfx4Y6-cYzWSHwtCGEy27ejZ9R9eT-5nvSR0aiFZ7ObGi6gTcaoUFRDo7XRZ8a1oL_Hsxg1YDfh99EUlMThLjKF6ePsAIc8fRQI815VNCbTKdSP_BEPuiS55qqqq2JPY5cPcGowgsP1bGs9VmgMw?width=1486&amp;height=1360&amp;cropmode=none" alt="Create Resource Group" title=""></p>

<ol>
<li><strong><code>Pick the right Subscription</code></strong> from the dropdown, In Azure Subscription is the high-level container of the resources and within a Subscription, we can have a number of resource groups, which are the containers of the actual Azure Service/Resources we create.</li>
<li><strong><code>Give it a Name</code></strong>, any name. There might be some restrictions and it will be validated as you type.</li>
<li><strong><code>Select the Region</code></strong> where you want the resources to be created, Azure has data centers across the world and you can find more information about the regions here.</li>
<li>Click <strong><code>Review + Create</code></strong></li>
<li>Once the Resource Group is created, navigate to that page and click on the <strong>'+'</strong> sign to add a resource.</li>
<li><p>In the search bar, look for <strong><code>Azure Maps</code></strong> and click <strong><code>Create</code></strong></p>

<p><img src="https://oiy7tg.dm.files.1drv.com/y4mF1I8uiryNaiii5KJoRPVutlG-fLXrrliWMLYcm4P3ajuQze8jlkh33Zcd_x8--b2H7fGSROb4rX-cJcA8M5zwGjjQiIjeQJdMu1A8myulGaDqcYI5eBeqANNeQ9fB9j5KbSU5D6x_VOXODpH8nSpRT5ziPAnuP9r5d0WV9DeTBDEGvOG4dJbso-GHJX7DC1AuXXdSttTd0JNWjk16uOwtA?width=972&amp;height=408&amp;cropmode=none" alt="" title=""></p></li>
</ol>

<p><strong>3.</strong> Create Azure Maps resource</p>

<p><img src="https://achezg.dm.files.1drv.com/y4mYrXBuCdvSb2HUqOx8OgvtaneHhVWzbknpfRlPu_5AN42Vul0MMnUvic5AfpzZqsiWjgVF_zpT28qgtLZO6v6Z4w90HOCFDR2s2Vk8hbKKbI8rACBTOIDLi_miyZU71d1YD2Vv2P9oba3oOAP6Osn3AdZU2mv5o2FyK30l9ZJdolNCKJDc1peXTXfS2vhI6Wn6diQIpcXyxwZNqcKCBCELg?width=1660&amp;height=1298&amp;cropmode=none" alt=""></p>

<ol>
<li>Pick the Subscription  </li>
<li>Pick the Resource Group, You can pick we created in the first step. (I have named mine "Learning")  </li>
<li>Give it a name to your Azure Maps  </li>
<li><p>And finally, select a pricing tier. <br>
There are 2 options available here</p>

<ul><li>Standard S0</li>
<li>Standard S1</li></ul>

<p>You can click on the below link to find more information about the pricing details and the tier feature differences. <a href="https://docs.microsoft.com/en-us/azure/azure-maps/choose-pricing-tier">Azure Maps Pricing Tier Details</a></p></li>
<li><p>Agree to the conditions  </p></li>
<li>Click <strong><code>Create</code></strong>  </li>
<li>Azure will now start the deployment of the resource requested and once done, You will see a button  <strong>"Go to Resource"</strong>, click on that to go to our Azure Maps Resource.  </li>
<li>You will see something similar to the below. The brain and heart for this resource is in Azure, and the way we communicate to it is using <strong><code>KEYS</code></strong></li>
</ol>

<p><img src="https://bd3sca.dm.files.1drv.com/y4mfVoqli20Z6k1DObvh0KYdjlYvneRVKZCqAE5e-KeeLfh9VmnvOrfwRs4Jrpp-rBwtdFRddSdJu1l9BHf4Qmrb8o3ILvuyFV_4Z8lkLeCGN2nLT6D0heba8YA6oWJPsJuygPWixHWgChUVMk5K3o4xYN5dZ9kKKS2OmVvRJwypirt38ULzniGOv66BUFExJGTWbB2EyR7QzMXoDM1gDGGUg?width=2408&amp;height=1196&amp;cropmode=none" alt="Azure Maps Authentication"></p>

<p>Click on the Authentication menu on the left and you will see important information here about how we (client) can communicate with this Azure Maps Resource. </p>

<p>As shown clearly there are 2 ways to Authenticate the client, we are going with the second approach, using <strong>Shared Key Authentication</strong></p>

<p>Azure provides us with 2 Keys to work with and also highly recommends that we cycle through them quite often.</p>

<p><strong>Copy the Primary key to clipboard</strong></p>

<p>We are done here for now. Let's get back to VS and make the connection between our .NET Core Project and the Azure Maps Resource (using the Primary Key, Obviously!!)</p>

<p>-- Going to update --</p>

<p>Thank you <br>
Vijaya Malla <br>
<a target="_blank" href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item><item><title><![CDATA[HOW TO : UPGRADE Macbook Pro SSD (with NVMe SSD)]]></title><description><![CDATA[<p>I have been using Apple Macbook Pro 15  Retina Display (Mid 2015) laptop as my primary device for the last 5 yrs and I loved every day of it.</p>

<p>The configuration I had was <br> <br>
<img src="https://m98diq.dm.files.1drv.com/y4mtmnW5OrqbkV1YQAsRqGqYH1ZarGG1fulUff3c7brktSnyBz19kJj1hqyGO2dLoZ6f_rUiAcbDVQ6E1ig3NXN6X5v9U2B9J_HJUfD3Ui9Ta2AYT47jhAVrJM6gob2RNXdvDghT-5GPEeN_yCWk23-hamNV6Ka97D1bMBjgamvrggd7nsKjtaZKRS9VOKKgMg2WrXP6e7nCAA1rGr_b1IErQ?width=554&amp;height=266&amp;cropmode=none" alt="Initial Configuration">
and along with this, I had the 256GB SSD.</p>

<p>I have managed with that configuration for</p>]]></description><link>https://vijayamalla.azurewebsites.net/upgrade-macbook-pro-ssd-nvme-ssd/</link><guid isPermaLink="false">316b5939-836b-4e86-94bf-ccbe61030e7d</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Fri, 31 Jul 2020 12:19:47 GMT</pubDate><content:encoded><![CDATA[<p>I have been using Apple Macbook Pro 15  Retina Display (Mid 2015) laptop as my primary device for the last 5 yrs and I loved every day of it.</p>

<p>The configuration I had was <br> <br>
<img src="https://m98diq.dm.files.1drv.com/y4mtmnW5OrqbkV1YQAsRqGqYH1ZarGG1fulUff3c7brktSnyBz19kJj1hqyGO2dLoZ6f_rUiAcbDVQ6E1ig3NXN6X5v9U2B9J_HJUfD3Ui9Ta2AYT47jhAVrJM6gob2RNXdvDghT-5GPEeN_yCWk23-hamNV6Ka97D1bMBjgamvrggd7nsKjtaZKRS9VOKKgMg2WrXP6e7nCAA1rGr_b1IErQ?width=554&amp;height=266&amp;cropmode=none" alt="Initial Configuration">
and along with this, I had the 256GB SSD.</p>

<p>I have managed with that configuration for quite some time and now I see need to upgrade my SSD to 1TB. </p>

<p>To continue on my pursue, I have to first check if my current version supports an upgrade of SSD. And found out that newer versions of Macbook's support NVMe SSD's. </p>

<blockquote>
  <p><strong>PLEASE CHECK THE COMPATIBILITY BEFORE GOING AHEAD WITH THE UPGRADE PROCESS</strong></p>
</blockquote>

<p>I have then researched a lot on what SSD to buy and compare speeds and minimum OS versions required etc. And finally made the purchase and started my upgrade process.</p>

<blockquote>
  <p>NOTE: I don't know how it works for other models, but if you have what I have then you can follow along and it worked just fine for me </p>
</blockquote>

<p>Before you start to get the following ready</p>

<ol>
<li>Check the compatibility of your machine for the Upgrade  </li>
<li>Your Macbook Pro 15inch Retina Mid 2015  </li>
<li>NVMe SSD - I got the <a href="https://smile.amazon.com/Samsung-970-EVO-Plus-MZ-V7S1T0B/dp/B07MFZY2F2/ref=sr_1_2?crid=35VCT5TMSI6NF&amp;dchild=1&amp;keywords=samsung+ssd+nvme+1tb&amp;qid=1596163003&amp;sprefix=samsung+ssd+n%2Caps%2C157&amp;sr=8-2">Samsung 970 EVO Plus 1TB SSD NVMe M.2 Plus</a>  </li>
<li>Tools - I have purchased <a href="https://smile.amazon.com/iFixit-Essential-Electronics-Toolkit-Do-everything/dp/B01MRNIFR6/ref=sr_1_5?crid=1MN0I4ZOL7L9G&amp;dchild=1&amp;keywords=ifixit+tool+kit&amp;qid=1596162811&amp;sprefix=ifix%2Caps%2C155&amp;sr=8-5">iFixit Essentials Electronic Toolkit</a>  </li>
<li>Most importantly, an adapter that connects to the SSD to the Mac SSD Port (they are not the same). I have bought this and it is good. <a href="https://smile.amazon.com/Convert-Adapter-MacBook-Retina-Upgraded/dp/B07VVNKRYR/ref=sr_1_1?dchild=1&amp;keywords=M.2+NVME+SSD+Convert+Adapter%2C+12%2B16pin+M.2+NGFF+M-Key+SSD+Convert+Card+for+MacBook+Air+Pro+Retina+Mid+2013+2014+2015+2016+2017%2C+NVME+AHCI+SSD+Upgraded+Kit+for+A1465+A1466+A1398+A1502&amp;qid=1596194750&amp;sr=8-1">NVMe Adapter for Macbook Pro</a></li>
</ol>

<p>Let's get started.</p>

<ol>
<li>Get your iFixit Toolkit ready and take the P5 pentalobe screw in hand  </li>
<li><p>TURN OFF YOUR COMPUTER - NOT OPTIONAL <br>
<img src="https://z1ockw.dm.files.1drv.com/y4mT6CCRPZhsA4fxXUkl9gPfgVGSqGC7fWd7G7F_6FjP10J829tE13MmFE-zJ5zqnUsZRvOG7vBcwqFtu2D8vzvoXr9KMtfg_uWn0hb5FoK_oPaacEJllfVsak8tJyqpQQyXffx0nUP_cTNMwVQR9TgHOrZo6mt-NAnneXVSwTOxVY0HnYvzkCJP9oTSa4hT49jjLMvApyUbOP0x9mZ5r-jvA?width=4032&amp;height=3024&amp;cropmode=none" alt="Flip over and Locate the screws" title=""></p>

<p><strong>Green marked screws are different from the Red marked screws. Please make a note of that. They are of different lengths.</strong></p></li>
<li><p>UNSCREW</p>

<p><img src="https://pvjgqa.dm.files.1drv.com/y4mWjjK4e_BAeA3mjAQCc8uZ-PgxkhYfJZA3wKnCK6OYdL3sZDiNKDUTYEIk3glToa004gm7nmPNCcT5LElXbDgWjeUx0tEHXwS6aDyqN8Z0EWwkxqs23sR94IiHZbqFTCaUIghoKk1hJM8Rp8pCUYsfuTyPH3bPy3V-kVKZK0Qjnru6jEVvrX6YHMAJsQKVgpre2TPV2gAbUaujqFFOYjGOA?width=3024&amp;height=4032&amp;cropmode=none" alt="UnScrew" title=""></p>

<p>GET YOUR SCREWS IN A SAFE PLACE. you can use the top of your toolkit</p>

<p><img src="https://c4q5ng.dm.files.1drv.com/y4mkQ5SanGU83mwFyHRjsEparGns-CfUGArbHl3ufWQhYu8WRur6LTr022esT4qInoUs3baf5Qo4qp1axTf_uYULTUz8onVZf_CF9ZNwuEnn0M50nM9G7XpLniSs-Z_kfcoONoXwhqjKL1dQ6abU9yh5oF3DAcByFK95zmGmMAu4DQoJhg67uaRxib5Orv9zK14u9LPayzwrHL40hhCt0u4Cw?width=3024&amp;height=4032&amp;cropmode=none" alt="screws in safe place" title=""></p>

<p>THIS IS HOW IT LOOKS UNDER THE HOOD</p>

<p><img src="https://nnq0ia.dm.files.1drv.com/y4mw89EF9oISjijPlCWGL_O5DvENmYPn6lun5NWnNRLQ3sB62JX-HvOuoIfgZp1-Hn1ygXRLD1rlGMBC8zk11hB1nRben1iBEC3TiW-tX0rmki3-stL6j-EqAv_7m0PtkUTDDscHw5aXBGIKdBuupBG7fFKw4Nxt9pj1cGZcsEBnBR1NaRZNp2Wj2mrZ7SaJzb74QE7C7ySIkf5Bg2TUHzByw?width=4032&amp;height=3024&amp;cropmode=none" alt="under the hood" title=""></p>

<p>when you pull the back of your machine you will hear two clicks from the clips that the underneath has that holds the back shell.</p>

<p><img src="https://ashdzg.dm.files.1drv.com/y4m-tdcZxRdT90lPYVxc5GErg8B5bN6p8R1cMtCRJZFW-HAPIi1rO2jnD5XQbSj9G5S-iyh1f2jXTIXfR73L1Kfos8c0SjP1BuJwoJBxoW028FtFXImjYImeE4aMZCSsFWEdnsOTmpfgkaAkMwSEYrbKboWGj1fH2_9uMUT9GYreHegItiBlj2eCP7ELToLnPSljupD_gx8BVio8L8ImkFHAw?width=3024&amp;height=4032&amp;cropmode=none" alt="Clips that holds the shell" title=""></p>

<p><img src="https://oyy6tg.dm.files.1drv.com/y4mNrACWnBKdCOKG2_reWcabFca2ukR-eYQoyZm1OVrBase_UpOBa6P7WYTrMPV6zzsnV8vZNxq3wxZ_jMognMUZSmSFkd_gix687Bs0BMSLH8yReqNrofNgt9BrFLVAU81rJbsdhESSXJMz5FWOKdkOII2c5QjH5E2ifE3ewiNMahgaaroR-kyrcPSh7pSR5z4gkmaBHiaVorwG6Thl0xM5Q?width=3024&amp;height=4032&amp;cropmode=none" alt="Shell clips" title=""></p></li>
<li><p>Unplug your battery, use the blue tool from your toolkit to unplug. <br>
<strong>CANT INSIST MORE, PLEASE BE CAREFUL HERE. VERY VERY IMPORTANT STEP</strong></p>

<p><img src="https://bt3rca.dm.files.1drv.com/y4mPICNeOIZAyoExFh6du4-gMNUg-hwrXgokJeHCzXUe5AXFQ6BIZ4vq1fwjtJHyvQnLpXFsw5D1aLztNTAEo8Z9BpWhDWRXv2xzxe7Ozdg-kQD13EKdc59Df3s6qj02FJCWVf1IRtzeIhUordZHFqtQZmKnBzvmCIoeMIBHa9I23ncRhbqpvxJYVHIlTYZB68gIhctEVMDrqrlawixBEOXdQ?width=4032&amp;height=3024&amp;cropmode=none" alt="UNPLUG BATTERY" title=""></p>

<p><img src="https://ashrzg.dm.files.1drv.com/y4m3SQkssydjrREkG9ESTHtheesa7X9V021kCtmemtq7Kj9ZwMdItE2u9fkvyPtQmeXNKGgCuGVwCy77RKrZE2m9vb1eO7BoRfaznha8NJxNCcyau9FGle-1n_QkhLbxc3gmPMM5UauQN7-pqTNpQHnKReA8CyDfm3WQHXHsOIWQlrhCNNT9U7f4nz8zon1qrT6exNUUh6iI20ZuztbDtFD2A?width=3024&amp;height=4032&amp;cropmode=none" alt="connect the battery" title=""></p></li>
<li><p>Find the SSD, located left next to the battery plug. And get the T5 screw in hand to unscrew the SSD off the board.</p>

<p><img src="https://olgsew.dm.files.1drv.com/y4miRCsPsGsfynLsLC7RNEhCq-v96q7CUaqxEMaRw4Z0BwQhbGpMHq5pb3RlIUWwEFRCk-Yc10zB9KVamyzwrNg3-g9nWiqoSmBd8-ShVMew1nhTOfhCZ9Bm5jTTwv83kKCNAPJaRh68Vil-wiDLyDwJdUW3Zv_GaBdBDrBFIi1QkCbNEy_Q7DWCSAks8Vf3hbHPfzlw24NUSsmSjTxL7oizw?width=4032&amp;height=3024&amp;cropmode=none" alt="SSD Pin" title=""></p>

<p><strong>use your T5 screw</strong></p>

<p><img src="https://cqpjpw.dm.files.1drv.com/y4m32wiEV_HGsYnuFRXcpC0fa7Mm_QQnmstGs07akTYkoOaeS_wpe9vP58HcBobgun_5yBHuJiX004v-7evNXkFIidP6_wpW7cmHLm2acYVKvhKs_NLQ0qMeW5KQE65NFxDrrHgTjZruTCbH_nZnYg4AY5KIdaqico7AcuBjruJQ4Gc5XOpjspSrAhtp3GqP2KN5w4i6qUDs6kCHrZeMduz1w?width=4032&amp;height=3024&amp;cropmode=none" alt="SSD T5 Screw" title=""></p>

<p><img src="https://1prhwa.dm.files.1drv.com/y4mB14z39_5HRvukRRuGBc-Jf_rhMUzADBg1um36CX17aCLiGPo5rKmzPPnk0ldewwljVQWnPSDGAjWcmNlZRRbXAmYnqYMR4UrFzW9OwE8gFVGKbt2dQPjNZcO2hVlnHYfZM2WAYXsa_dagyh_8sfXNnppWiW10kwil9O4T8pfpxaGqF43BMpYT3yWDoCC9-cnxOD1c4mKApnayeYpIGIBAg?width=4032&amp;height=3024&amp;cropmode=none" alt="UnScrew" title=""></p>

<p><img src="https://diqwng.dm.files.1drv.com/y4mos4V3KOxuaI3lapX6PkyqiRfb7IG-OijGtFF8-T4Zx1Yf9W9mISCzptQg9BsH9JChbMmTf-JnwEkqw-YjqzLb1zSCnAdGXkk5pUKSIG9z-yS_ZiPHPOmjeVF89hbn560AJWxbw_SH4k_AdLYGA3TKSbBuiDtzIXqK7HHscLsmbZBuiun_oS_zWiiO0GZGFVBdx5mbrcdq1hZvbX4plH0RQ?width=4032&amp;height=3024&amp;cropmode=none" alt="seperate screw and screw bit" title=""></p></li>
<li><p>Get your <strong>New SSD</strong>. In my case <a href="https://smile.amazon.com/Samsung-970-EVO-Plus-MZ-V7S1T0B/dp/B07MFZY2F2/ref=sr_1_2?crid=35VCT5TMSI6NF&amp;dchild=1&amp;keywords=samsung+ssd+nvme+1tb&amp;qid=1596163003&amp;sprefix=samsung+ssd+n%2Caps%2C157&amp;sr=8-2">Samsung 970 EVO Plus 1TB SSD NVMe M.2 Plus</a></p>

<p><img src="https://1priwa.dm.files.1drv.com/y4mwPu5smSwQ-DTOdMqT1DwjxDfgnm5rLI81L1WkzpOuRVumkBW4fObdxcTy0c8M2el8t53Zq2x2HOZeXc1iJmdGbvdZ5xdv7JQiJba9MqFCY-MnIqCSBd_3rzgdYazKt4T3mZz10gLR3YKrj9CePs_H-g5XDX0ix4diE8fAgR8xp6IamMHkc2QA3ulBL7Mkmeimk-AON58O38tihreB7jXMg?width=3024&amp;height=4032&amp;cropmode=none" alt="Samsund SSD" title=""></p></li>
<li><p>Check out the pins of your SSD and Add the adapter</p>

<p><img src="https://pqjyqa.dm.files.1drv.com/y4mnGDEAPp7F7nFfVmBIQp_xFsoJyFV2plB_d55xqwWF3HjIc09aVXkW4tVpC6l4JjqCWa6o7nc0R412alOTVUY4HY1ucAww9a-Nmuo55qPNH3NQG10-zm9i-P565rMPOo37Xi_rd0_mJ3QrrLAwaT_-ILy_jfv69acJZsLrbVGGmeGTjKM_0BpaXvrp46Brnm5gt72VI12KjouaLeU5KaMvg?width=3024&amp;height=4032&amp;cropmode=none" alt="SSD pins" title=""></p>

<p><img src="https://diqxng.dm.files.1drv.com/y4mzBil6_r63CBeTdeubwSbceBOJCKa-y98cifRyUQXN9Ui99fRuuC_CzH-PfMTjIqnNjXST5DmMfPWPPIL7sMhZ9tNXVZhaVIWk-GQ3PrW_dYAZBKNFBteVD37q4elg8md0Hpy2MJasESfXRIKyrED5EuvZKTNhDnOFO1ytqObdcbSUGMW7nVrZIfrM7aCHzmyx-wjUzVy43c0Rn6CTmZ1YA?width=3024&amp;height=4032&amp;cropmode=none" alt="Adapter pins" title=""></p>

<p><img src="https://z1oqkw.dm.files.1drv.com/y4mZr2JRf8_8NPn6D-0n1ofyJQXKeKOCUuirxHMElDDZ4YLXq67GzLA125dWJWEjH-UNAh6zaHRMILCHBK7csD52dc55SUftdTughsDbgwjfwdB9l62Bh0CzOOQHynrwYgyV3EJT4TT_uAIS-3ora113kvnNk5_e5qcn3zymhv6jYuyzntYVfpTrcBvk8pxehHoFfF7jKh_2C1-72xa-O1ZNg?width=3024&amp;height=4032&amp;cropmode=none" alt="Connect then together" title=""></p></li>
<li><p>Now your new SSD pins match well with your Macbook Pro pins.</p>

<p><strong>CAREFULLY PUSH YOUR SSD INTO THE SSD PORT ON YOUR MACHINE</strong></p>

<p><img src="https://nn8ciq.dm.files.1drv.com/y4mn9Dz7JqIoJn1E0FZ308bC5Bj3KyfNXDTkaozMHEAWi2LlStmVRmuW7chUmXAfRoOsGBUCN64DTTCsU5OVDEKeX9dzF2yX0JSiDCa8vy2wkPIlv2MxeBX6y9uSi3uBV30zhQa3IH0UJNpRCCESorBBRNNr4zHjLDk7u7M78oHO2GCi-C-fgmDtPtk1ftu9p9NOKVwPfvJ77SvRPYJSzmksw?width=3024&amp;height=4032&amp;cropmode=none" alt="connect the ssd" title=""></p>

<p>now pins match too.</p>

<p><img src="https://bt35ca.dm.files.1drv.com/y4m2ZCDwsItjlr1g0J8Uzzj4xGBBTZkTg_nGnFLpo8IdQ11Gi0f2QdIT8I6qRzBzFQWNgLqgYYaBjltdH20-HdjyBVDRM-Pbch1Idhld8xnrFkaY8vIoMsveryNbX4Bzuj2_y7ppuAG9ZDM2CRVEPAXAq8v-O9qUuECRnkLmLpc-JND509Ux3S9w49vQPZbEK8YIJC4U19ndX8irxW42gfuew?width=3024&amp;height=4032&amp;cropmode=none" alt="pins match" title=""></p>

<p>screw in the SSD now
<strong>AGAIN, T5 SCREW</strong></p>

<p><img src="https://olggew.dm.files.1drv.com/y4mLHIXxb2ta7x2MDQaRtyke_Dcg289oXzXTVoZFtNM5joEEs6nxJ_MyJHJXuinY-Tfwj_W91aXd0Ensri_9VjxNfj-JVo26hv3bxxBtq0twbqaGzAN18YtID4e2M_rjv7DSXC2wWCNybs3ZB7_lgaeDaCZQsfAVQxxfZXzfygIYpu3Iu9L79Ru1Udsczxw8dT3SGhBpEkA_TDbRszB-gz8xQ?width=3024&amp;height=4032&amp;cropmode=none" alt="T5 screw" title=""></p></li>
<li><p>Connect your battery now</p>

<p><img src="https://ashrzg.dm.files.1drv.com/y4m3SQkssydjrREkG9ESTHtheesa7X9V021kCtmemtq7Kj9ZwMdItE2u9fkvyPtQmeXNKGgCuGVwCy77RKrZE2m9vb1eO7BoRfaznha8NJxNCcyau9FGle-1n_QkhLbxc3gmPMM5UauQN7-pqTNpQHnKReA8CyDfm3WQHXHsOIWQlrhCNNT9U7f4nz8zon1qrT6exNUUh6iI20ZuztbDtFD2A?width=3024&amp;height=4032&amp;cropmode=none" alt="connect the battery" title=""></p>

<p><strong>push the plug back in</strong></p>

<p><img src="https://oyzitg.dm.files.1drv.com/y4mlBQQ5GJzjMkb_lgpWXS_bt-igcJqC8scdqP3iUWyFOdt1OGFli6IQQsYds2hp03G-roZxP8TqMOA9gkZBjATyDn3ntviv3egi5AQsIvY75CdQuB-Tz0GZZLVysQGoA8nSgLjB2hYwOiI9Pxhouy2TYFI6VyqqYYbjiwiATeFGvRNFCGZGfbomYI3daD8UrN4oeKm6fJeizQNGes8S2DtIw?width=3024&amp;height=4032&amp;cropmode=none" alt="push the plug" title=""></p></li>
<li><p>Push back in the shell and put the screws back in. <br>
<strong>MAKE SURE OF THE DIFFERENT SIZES THAT ARE MENTIONED EARLIER</strong></p></li>
<li><p>Turn ON the machine and <strong>HOLD the OPTION KEY</strong>. <br>
you will see something like this.</p>

<p><img src="https://pqjxqa.dm.files.1drv.com/y4mZGkmuoTLin8_uIBxZuz1pJtjPRLlvMfsYZ2IAq3gJzPAuv-28R_ucolnkswhUG4n3YKa_pV9EuGM8PIPogzs8DMbR3fzTyNj_SrCqXYMkVNDo2sDJ9zzQ1ddymOXKgAqmnp1muIBFwIgGbHKy0AE3jFAuscTNXuj3dcvL9Q-CtrCUIzkFqwPobCa5E-iU6nY7EzWKrDCoW29elsxUcE2gg?width=3024&amp;height=4032&amp;cropmode=none" alt="loading" title=""></p>

<p>And wait till you see the boot options window</p>

<p><img src="https://z1odkw.dm.files.1drv.com/y4ml0y2fB05vcHxV5sZAK-AnRTwHuagvP-b0CTTCkcoIs7Zl-8h7MBaGmttKnt1Um7Qgz1OkBpBM6tlsTlI4OBYVeSk8XCVu3gmYk6HQnG7mQKuSpd4O1upU4F0KCKoRT9jNxsheQoBha_dU6UOURRC2o-KkqO1uVb48r4q07CwGmVFLRGm7xQvn08PivH_7BFKXFGVclk8SxrOEzYQ6lCoDw?width=3024&amp;height=4032&amp;cropmode=none" alt="boot options window" title=""></p>

<p><strong>GOTCHA</strong></p>

<blockquote>
  <p>I PICKED THE "Reinstall macOS" option and end up at the following screen, unable to pick the disk destination to install the OS on.</p>
</blockquote>

<p><img src="https://bt3sca.dm.files.1drv.com/y4mnWFli8iiNXtQOlbKj7_7zCKZ79xDZl9Mn0HDe_wv7HNQ_Wq33nXrub2auKrZeOCPTHE3FneNGPAzEsrSLD40pFJnghN88CNvoxltnsOFqX5mjbpxyriMsjsrKuizKn95DbgePrwlGGSqkOpDnIyOskvm654kMpz1_p_64KRJ0WdWbg5KJnCJRCALxm0Knff_KJe_yahjD93tmRuaO-TVEw?width=3024&amp;height=4032&amp;cropmode=none" alt="no disk" title=""></p>

<p>Go back to the boot options screen and pick the "Disk Utility" option to format the disk first before you install it.</p>

<p><img src="https://oyy7tg.dm.files.1drv.com/y4m6kBQyEWxVF2Q32nf2pZ-Hp7ZNwD2Ylo-wejqxtz7VGLNE7Fd40xuyt6ZRPJkSPATARZoSuUb2xslq06mKTRSsV3p4PjB-HaZBMtct9l8YmMBqHh5Alg7S5Qiubzu51lSpFcuHFgys-JmxrbvOguoypYq-XvbqW1HHu34vlqdqs2C38_GVvnlg3pLH9nMUWzvQt_Fh4nWmw8QTQBnWjNUwQ?width=3024&amp;height=4032&amp;cropmode=none" alt="disk utility" title=""></p>

<p>Give your SSD a name</p>

<p><img src="https://ashezg.dm.files.1drv.com/y4myATCszu4_wFFqLMb7EXra_5vEo2KznpH1iaWsWC_sPR9k1lQmPEvDbQ-3xhgFYxwwuM9wSNECFX-Z-1OmWQOtwDoR0ldUDIQuEYREOFHHUs3U6b0Am725e9Ug_Alu4BRipdC4jYpUJz9p1a1amI4cCn-6tf7vU0p81naNnNunJlI7F_SXyJ2tZoeRaTeH208T03cEwehyYBlY8Qc6E4yaA?width=3024&amp;height=4032&amp;cropmode=none" alt="destination ssd name" title=""></p>

<p>Format it with default options</p>

<p><img src="https://cqpkpw.dm.files.1drv.com/y4m_EqHddt3dP23DhYgGVkKiB8w3YWLrjH-Lqva2iWIjXm64Hn5xhSiKQAp2h4IW4U0Lb2ZxgdWvNppyinFKx2FlVxNuJZmibSIXUhN2zCcSFoqBsDeP9aOI9Evw5kolT8SEYHF0O3mQCP7SEpSkCWjJ5D66UuWwYD6oLDJuvaGgfdAeE8Ms2pVDtvGR0fPrqrhjTYR3bZC65VPH9t4gdKdCg?width=3024&amp;height=4032&amp;cropmode=none" alt="format" title=""></p>

<p>After the format is done, if you now go back to the "Reinstall macOS" option, you can see the destination disk, with the name given earlier.</p>

<p><img src="https://olgtew.dm.files.1drv.com/y4m97KhVY_j0FDEF5MviJH-MBDpPKc4NHSXVlRShx6Lx_hKTVyMY6DQSCfVHvd7u77Pd60-WKGCbxMIxZSBib2vhxoQmBzke-I1-Ydz1abApUNEzecaEVLwffeRwHFwlZDgsWDoOKGCp_q-B9YHCXlxdJExhYtpw9bEgumk2-e67U3cPZldy6JRTw7jszt5dAFksXvVviqGq0IpMAilotVwqA?width=3024&amp;height=4032&amp;cropmode=none" alt="" title=""></p></li>
<li><p>Go ahead and install the new OS and have you go...</p></li>
</ol>

<p>Hope you like this article and if you do please share it with your friends.</p>

<blockquote>
  <p><strong>NOTE: All my links are Amazon Smile Links to an Organization I support and Volunteer. If you like the article and if you think it helped you upgrade your computer please help us by using this Amazon Smile link.</strong></p>
</blockquote>

<p>Thank you <br>
Vijaya Malla <br>
<a target="_blank" href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item><item><title><![CDATA[Web Scraping with Python - Getting Started]]></title><description><![CDATA[<p>I have recently started learning Python and wanted to use what I am learning to make something interesting,</p>

<p>There comes Web Scarping.</p>

<p>I have started reading about it and how it can be done with Python. My general understanding is that Web Scraping is -  browsing the web with software,</p>]]></description><link>https://vijayamalla.azurewebsites.net/web-scraping-101/</link><guid isPermaLink="false">fc94c0f9-3d0f-44e8-be1f-c247cc640b82</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Tue, 24 Mar 2020 02:18:44 GMT</pubDate><content:encoded><![CDATA[<p>I have recently started learning Python and wanted to use what I am learning to make something interesting,</p>

<p>There comes Web Scarping.</p>

<p>I have started reading about it and how it can be done with Python. My general understanding is that Web Scraping is -  browsing the web with software, parse the pages and get specific information that we might be interested.</p>

<p>How do we do it? The one library that is best out there is "BeautifulSoup".</p>

<p><a href="http://books.toscrape.com">Books To Scrape</a> is a website that is very scrape friendly.</p>

<p>I have written the following <a href="https://github.com/VijayaMalla/WebScraping">WebScraping</a> code, which can be found at my GitHub.</p>

<p>As any python file, first we import some libraries that are needed including "<a href="https://www.crummy.com/software/BeautifulSoup/">BeautifulSoup</a>".</p>

<p><strong>Import Packages</strong></p>

<pre><code>import re
import requests
from bs4 import BeautifulSoup
import pandas as pd
from tabulate import tabulate
</code></pre>

<p><strong>Download the HTML and Parse</strong></p>

<blockquote>
  <p>First we the get the URL to scrape, and create a BeautifulSoup object from the parsed HTML text.</p>
</blockquote>

<pre><code>start_url = 'http://books.toscrape.com/index.html'
downloaded_html = requests.get(start_url)
soup = BeautifulSoup(downloaded_html.text, "lxml")
full_list = soup.select('.side_categories ul li ul li')
regex = re.compile(r'\n[ ]*')
</code></pre>

<blockquote>
  <p>we now loop through all the elements in the full_list and extract the desired data</p>
</blockquote>

<pre><code>book_dict = [{}]
for element in full_list:
    link_text = element.get_text()
    link_text = regex.sub('', link_text)
    anchor_tag = element.select('a')
    fullbooklink = "http://books.toscrape.com/"+anchor_tag[0]['href']

    if (len(link_text) &gt; 0 or len(fullbooklink) &gt; 0):
        book_dict.append({'Category': link_text,
                      'Link': fullbooklink})
</code></pre>

<p>we can now save these results to a text file or to a DB. BookCategoryList is the file we open with write permissions and loop though the book dictionary and write each item to the file.</p>

<pre><code>with open('BookCategoryList', 'w') as file:
    for item in book_dict:
        if (len(item) &gt; 0):
            file.write("%s\n" % item)
</code></pre>

<p>You can see the sample file here <a href="https://github.com/VijayaMalla/WebScraping/blob/master/BookCategoryList">Book Categories</a></p>

<p>I hope this helps.</p>

<p>Useful links <br>
<a href="https://www.crummy.com/software/BeautifulSoup/bs4/doc/">BeautifulSoup Documentation</a></p>

<p><a href="http://books.toscrape.com/">Books To Scrape</a></p>

<p><a href="https://github.com/VijayaMalla/WebScraping">Web Scraping Sample Code</a></p>

<p>Thank you <br>
Vijaya Malla <br>
<a target="_blank" href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item><item><title><![CDATA[Happy New Year 2019 !!!]]></title><description><![CDATA[<p>my new year resolution will be</p>

<ol>
<li>To speak/blog more  </li>
<li>Learn new technology  </li>
<li>BE STRONG...</li>
</ol>

<p>Wish you all great Happy New Year.</p>

<p>Thank You <br>
Vijaya Malla <br>
<a href="https://twitter.com/vijayamalla">@vijayamalla</a> </p>]]></description><link>https://vijayamalla.azurewebsites.net/happy-new-year-2019/</link><guid isPermaLink="false">3fe54589-d1a5-470b-8b99-3cc0e72cf480</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Mon, 31 Dec 2018 19:04:08 GMT</pubDate><content:encoded><![CDATA[<p>my new year resolution will be</p>

<ol>
<li>To speak/blog more  </li>
<li>Learn new technology  </li>
<li>BE STRONG...</li>
</ol>

<p>Wish you all great Happy New Year.</p>

<p>Thank You <br>
Vijaya Malla <br>
<a href="https://twitter.com/vijayamalla">@vijayamalla</a> </p>]]></content:encoded></item><item><title><![CDATA[How To : Assign Custom URL to Azure Website on App Service]]></title><description><![CDATA[<p>I have created a free Azure website with domain.azurewebsites.net URL using Azure App Service. <br>
Here is the URL <a href="https://vijayamalla.azurewebsites.net">https://vijayamalla.azurewebsites.net</a> <br>
I am not an avid blogger but I try to throw in a few every now and then. Today I wanted to use a custom URL</p>]]></description><link>https://vijayamalla.azurewebsites.net/how-to-assign-custom-url-to-azure-website-on-app-service/</link><guid isPermaLink="false">e935e260-bc31-4f76-9250-93491005cfdc</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Fri, 28 Dec 2018 18:20:24 GMT</pubDate><content:encoded><![CDATA[<p>I have created a free Azure website with domain.azurewebsites.net URL using Azure App Service. <br>
Here is the URL <a href="https://vijayamalla.azurewebsites.net">https://vijayamalla.azurewebsites.net</a> <br>
I am not an avid blogger but I try to throw in a few every now and then. Today I wanted to use a custom URL so I could use <a href="https://vijayamalla.com">https://vijayamalla.com</a> instead of the Azure websites URL.</p>

<p>I followed these steps :</p>

<blockquote>
  <p>Step 1 : Logged into Azure Portal to check the valid pricing tier
  I have created a free website on Azure (TIP : With every Azure subscription we get 10 free websites) as shown below</p>
</blockquote>

<p><img src="https://kiidcq.dm.files.1drv.com/y4mSw6Lw-egBKk-gNQ1p-oT5ItTQE80XwL99AYo0XSH1lW3HhGagiDYoF2cw56ripXYgKFKlFg_ovFKBSFIYLsuJBMX7aGeyXv1Igbz7kiHDDpGIjexvD-b2PziSHm3L6jRoqo-cxdPgwcJgkD8M29Q0xYK3-hXABE9l1GEBdfQsuYk8qjLYQ-ZiZ0ZcpRLzGrk5Uia--Id93jYigKJa7BTVg?width=819&amp;height=320&amp;cropmode=none" alt="Initial Free Tier"></p>

<p>The URL and the App Service Plan is highlighted. <br>
Because its a free plan we don't have access to set/enable Custom Domains on this App Service. We have to Scale UP this plan to enable Custom Domain Feature</p>

<blockquote>
  <p>Step 2 : Scale UP Azure App service Plan</p>
</blockquote>

<p>Scroll to find the following Scale Up setting under the App Service in Azure. Click on it to see more options on how we can scale up. There is an option for Custom Domains, but if you click on it, we will see message to upgrade our App Service Plan (Since, I am on the free plan)</p>

<p><img src="https://kq0qra.dm.files.1drv.com/y4mnMU2wHjcVMmpZokZdgFG7rtJLxu7CLlHE_ROd2PzNTtBabCE2kDqo3tK4NizlFoD-RdkXmh3OWUYT7euXaNHMc6Etdvo7O74YpEFq8o6c2Yz-DUbC8s2tngRnzvjyn9xXw7bBunvS94x7TNF6SwmQ1cGwmFsmC95TQkb3zVGaeZYQQKXuUK7PVtg63A8eq5lSFEfnLAkYWa3b31nHTjxFQ?width=250&amp;height=342&amp;cropmode=none" alt="Scale Up And Custom Domains"></p>

<p>Clicked on "Scale up (App Service Plan) " option and selected the next UP tier from Free F1 plan, which is D1 (estimated about $10/month, in my range. You can scale up more to B1 for better resource menu but higher price)</p>

<p><img src="https://cumr7g.dm.files.1drv.com/y4maad_tPOhR3y9k2gb8VyY7CgZ9TL4gXcPYkY_PgrlFxwcC029Ya3CnqbV4zV-JAvqQSqdELRZ1vhKyR6d_w7nr3XfN4JoU1XxXSchj8noNVksp7QCO_VPk8eFlmkyZcN2yDcZ51gyGUuZ-N2llEZzRUrjJTXra0O0XG8KexP4Bj3zb__E5L12WQ-4BFtw3yOMCPJ7eShE8iJr7LTC4XYjVQ?width=930&amp;height=507&amp;cropmode=none" alt="Scale Up Selection With Options"></p>

<p>Main difference between F1 and D1 is the Custom Domains, which we want right now. I have picked D1 and "Apply" my changes. Azure Portal will show a notification on the upper right corner <br>
<img src="https://pv1tkq.dm.files.1drv.com/y4m0CrEh3v2kpL0baQoYgpEZSR722x7UetMylqkz0knUZK7qr7cWM29g6wkwn5faDxA4mO61JDe86KZxdr_2K8MM5BkbxLOy9iY6RVhxHs9s7VVZY3D6bEKPacSdSqQlTPDSCzJJg_yZqhJt3F2MnzD1YrcXBpoIZkedV6pl8lAQ6MhAsjWXJ1qmqLPjTFc4TvyKdnSL04Yv3zAE14ClLJwqw?width=359&amp;height=75&amp;cropmode=none" alt="Scale Up Notification In Progress">
and once DONE as below right under the Bell icon <br>
<img src="https://mkrt2q.dm.files.1drv.com/y4m0O-LQVtmHZr9_cWSqQKwpQIM-2DVeubfTKVYzU58pTPH6FZitOhvns-WeyYerm9-D5Sz6wTeOFI_QusSXZUBWHd6jumHFmaH5LU15DrQKUPjHM_uTL9wbgyK3zofLA7MwpSGueVaFUd9fDCqBohyvh0daawGSJfTl80nuSRPDe0x5ROnucNNR2l7AKxtGjZ3RkOo6ob7YMVpHugphz9wTw?width=523&amp;height=191&amp;cropmode=none" alt="Scale Up Notification Done"></p>

<blockquote>
  <p>Step 3 : Map Your Domain</p>
</blockquote>

<p>This is where the real mapping begins. We have to add CNAME and A record entries in Azure to map the custom Domain name to the Azure website.</p>

<p>Under the website settings in Azure, click on "Custom Domains" and it will show more options than earlier since we have scaled up our pricing tier. <br>
<img src="https://zbgufa.dm.files.1drv.com/y4mcgbY6TKV0t1SGu9yyU2NIbzCye41zXSDuBjDkugzI5K8y8OlJtxwy7fYt_rU42JlxDHIZLCCXzehgtU_908wy9VlpQ6l5ywBKdr9x_98V4dLcTx_8jUlmbV-NVp2dzJiVgELY77DJlTWs1CZ9nN0Ngdm7wvXmBrUwyEztRHdMZMZh7lvLgsYOa0vmMgmCfaUCx-z0VudOIP5kYgIbV3DTA?width=925&amp;height=400&amp;cropmode=none" alt="Custom Domain Initial Screen"></p>

<p>(I have make my website HTTPS Only.)</p>

<p><strong>1.</strong> Click on "Add Hostname" and it will show more options to the right. Follow along and provide necessary information. <br>
<img src="https://l8qfng.dm.files.1drv.com/y4mLsy2uYok8dgAPg3n26qbnmL7GiamcwBdIg1ofBePzglAX1QnJqYAGQsZ_ylbIu8TjJaZ0aa9MTRQ-Uohaa9qevNJoKWtBtgrzQyLg_hUTaxNKR-h-1se5UTqWf9Rbx4tNzRo77NZLHDYgAYVS6yKXlwuBhvz2TSpO_x0bfT51G5nMcNzIHkqNiFl-tp9gNu8giVIKnGVE1Y3cOqi-i6jBg?width=314&amp;height=183&amp;cropmode=none" alt="Add Host Name Before Validate"></p>

<p><em>Add your hostname. In my case its "www.vijayamalla.com" and click on Validate.</em></p>

<p><strong>2.</strong> It will show more information now, with CNAME and A-Record (Click on Hostname record type Drop down)setting that are required to be done on Azure and as well as the Domain hosting provider (in my case its GoDaddy). Below are the CNAME and A Record settings (you might see different information as per your custom domain name and azure website) <br>
<img src="https://yez28q.dm.files.1drv.com/y4mIGmVH9NVB8Alhc9iC5gJzHQOFlq8oZEjIIWoe9aJbRHmgG6IEKUKY3MnksL6NI-sR7g09OMo2dU7I4kU32b_h8wKNT-s0yTrNFT47iGFP-GyDJgTjr2eja4ykc5gML3aMY1fw5FjnQu8umM0qo-q4QrrLsEu4oJEu8LcN5j9WkfSI0Er1vUJsevQTfrq76ThzjKgL1crc7yPK7-QzDtEIA?width=430&amp;height=538&amp;cropmode=none" alt="CNAME settings">
<img src="https://xnhptg.dm.files.1drv.com/y4mO-AIRuoOMvlDFiMaBbN3Kh832imEX0K8Ct65iBZfizaMJW15CDQrmGdfNQcZh6gl5Ix8eCd_gIp6gWURC247yqdDluirz5bPkrVUz41NmK9WrQNWOIKn312weXjKKHTtdW7_HBvZxwuezuMxP_VvN0yIU9HeCKsb4E2sMkkhgFvSLSDZ__vst4ewCvMB9814Kylg6qW-MvPXkKJTDwZQXw?width=433&amp;height=539&amp;cropmode=none" alt="A Record Settings"></p>

<p>scroll down more to reveal the following changes that are required to be done at the domain hosting provider website portal (in my case its GoDaddy)</p>

<p><img src="https://kiiacq.dm.files.1drv.com/y4mVRBv_WpqVrIHJKSuzyUxQm8ATE0MT1RynGoMyDRgR8d4icaC7iLXR_7D0q4fFrhFNrlv7IJNfvgMPRHKgwgjzT7s0BBH2n14I0R_49hGIh0f8jA99cCD2oWMgxbMflwyRZXVnxYW2HuWTlthLSp_ruNcwHRwDa6d_Pd-0YKNQPU_7uRic-e6y2UDlWK0Qi8ZyZ3R98wmPcoezfNjUiZtsg?width=429&amp;height=241&amp;cropmode=none" alt="CNAME setting todo">
<img src="https://kq0nra.dm.files.1drv.com/y4m1lFYLw5YCeXYlRkE7PyRiFKkaJGsvYeKFdTG9FwWO7xKJO5uTXeumTzBW7LiYn49nDdA2jueto-7Z3Cs1NSfLIK5avJB2Fv-a9Xj_leI-KiFawhc6zE4D8QnqPwsHx0aouv5WB2ZwaQDFOB3STvZAVfRBHdJD7RX76hEQghn9UyRqGlaYs_zwmYCYe9T1Romn3RmTl7WZfCcy6Fo3F2MuQ?width=428&amp;height=197&amp;cropmode=none" alt=""></p>

<p><strong>3.</strong> Update the DNS changes as shown above in GoDaddy DNS portal. Go to GoDaddy Domain Names page and click on DNS to show the settings page. <br>
<img src="https://qfoela.dm.files.1drv.com/y4mq1WnBcNBqAXrxsXTJi_rmM_HcQhAibtVpBgMw2gIfmEHPwuVWoH8L6R50tAlNC3sQ7Lnm6e0TBcMrnkY-iYnJ9QNZ6rMj9qCK7GxTn3s_iEyNTE5Echlr6ziugS_XyDuoMfvia8mZRbsG1OB24wn2afvLiAzQTSgaxdLqLMlTK3wT0AslgLFLIRYLM_ClvO6LN786aRx1EdvkW4ICglSvA?width=1009&amp;height=68&amp;cropmode=none" alt="GoDaddy Domain Name list"></p>

<p>ADD or Updated a CNAME Entry for WWW Key to vijayamalla.azurewebsites.net (it will change in your case) <br>
<img src="https://cumo7g.dm.files.1drv.com/y4m_kDVDoznaVbocDNHaz5Evazv3J66n-tylf4RfEy6Wy7p18ZUdHpryxO5VBmPx7OnvnHM3sdYptL2qpJ3DY7vPdIBhKATb5GW6AOiQ38hT6udP3iO_xh6OLgYSH3KSh_toEeCn9ibwaAa4txQJUqXWFZZ8dTtfBRCx3p5aN1tmRGT4FkVIKZBrKM4_9Mcu0yVvyPcte5LOBvLH-kc-PHy3g?width=985&amp;height=60&amp;cropmode=none" alt="CNAME Change in Go Daddy">
The Propagation takes about 30-60 min.</p>

<p>Add/Updated A Record and TXT DNS entry as shown earlier in Go Daddy DNS settings Page as below <br>
<img src="https://pv1qkq.dm.files.1drv.com/y4miXx__5JUc64QCfjpAFs6wlE07YAmVROYtwfcRzYWzc9-O4TUYXxV-RoQ-tk_7UEFBrkSdDN7hizu6Lv9DMaCje7HPkd5POVftrf6o5L5BUNo4wRQzUUgTIvKG4RsSqbD44gLGTCWQ1eOX6CIXmNSEYP_IinQGNxZalJ1T0ETBLn1O2-bAUldLF5eNy2m3CpUvqh5Jd-Y1iJxfROTgZpHjw?width=969&amp;height=59&amp;cropmode=none" alt="A Record">
<em>The black covered part is the IP Address</em></p>

<p><img src="https://mkru2q.dm.files.1drv.com/y4mh0d5-_H58zp_JOgh79n8C14uOZy8rOrcBHXnyyBCNsRMdmhMR8MWpTcJqk9E79H0hCFzVJRPHnxh92KtNz_3hi3Wf63YdCo3XYGZxUiYRRK2nDCJm84tzQdTO1bV2QyOPkwe6Q-P-Dxv30UsUqQ8Jo9iI3pCvS3V8NY7AvZ5M_NbvbPCU9-_Bzox7z_guBsNkjMRRgFU8KVOl8wIr1t4xg?width=975&amp;height=59&amp;cropmode=none" alt="Go Daddy TXT Entry"></p>

<p><em>Propagation might take 30-60 min</em></p>

<p>Click on "Validate" to see if the changes made in Go Daddy has been Propagated. if not try refreshing the page or try after some time. Validation takes couple more seconds than earlier as shown below.</p>

<p><img src="https://zbgvfa.dm.files.1drv.com/y4mt_PSiC9kq84QNdWtnoB8OoI6-dWCOOHJKEO_pAXexKMLKrYdNUcaRC9siAN2eZren-AXsMb9kPLKN9JLAl8WP-LVlZXEQyJvnW-ihSfjTwnNUrPHxQdUfAUEg-Cf-2hqZOG1hjVuuDwVY_f8tZGRFprdm6ifXGjhdim1gjGt-LuLcSWslkTjH0lqsq9Q67v94p5yR10m0B8IoIaq-Hj4sQ?width=422&amp;height=186&amp;cropmode=none" alt="Validation Processing"></p>

<p>After successful validation it is shown Green as below, Unlike earlier it was RED.</p>

<p><strong>4.</strong> Now click on "Add Hostname" button in the same Validation screen. <br>
This will add "Vijayamalla.com" to the App Service Custom Domains page.</p>

<p>And DONE.</p>

<p>Please now you can navigate to vijayamalla.com and you can see the blog. (FYI : I Used Azure pre-configured ghost blogging website).</p>

<p><em>* Only Challenge I have is the SSL is gone. Azure provides a free SSL to all the .azurewebsites.net websites. Since we are using our custom Domain, Azure SSL is not valid anymore. *</em></p>

<blockquote>
  <p>There are couple of options here.</p>
  
  <p>we can either purchase a SSL cert and add it to the Azure under "Custom Domain" page, click SSL binding. </p>
  
  <p>OR</p>
  
  <p>Scale up Azure App service from D1 to B1 for SSL. The main difference here is that we can purchase SSL cert from Azure portal.</p>
  
  <p>OR</p>
  
  <p>Follow the steps here by <a href="https://twitter.com/troyhunt">Troy Hunt</a>'s <a href="https://www.troyhunt.com/the-complete-guide-to-loading-free-ssl/">Complete Guide To Loading Free SSL</a></p>
</blockquote>

<p><em><b>UPDATE:</b> I have successfully configured Cloud Flare shared SSL on my website <a href="https://vijayamalla.com">vijayamalla.com</a> as shown in the above mentioned blog. <b>HUGE THANKS TO TROY HUNT</b></em></p>

<p>Thank you <br>
Vijaya Malla <br>
<a target="_blank" href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item><item><title><![CDATA[Exception and Solution Series - SMTP Failed Recipient Exception]]></title><description><![CDATA[<p>In this Exception and Solution Series, today the solution to a <code>System.Net.Mail.SmtpFailedRecipientException</code> I got recently trying to send an email from a Console Application using the <strong>Smtp</strong> class from <strong>System.Net.Mail library</strong>.</p>

<blockquote>
  <p>Exception</p>
</blockquote>

<p><code>System.Net.Mail.SmtpFailedRecipientException
  HResult=0x80131500
  Message=Mailbox unavailable. The server response was:</code></p>]]></description><link>https://vijayamalla.azurewebsites.net/exception-solution-series-smtp-failed-recipient-exception/</link><guid isPermaLink="false">1f8e368f-df14-4b3e-b6a4-4146f84edea8</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Fri, 06 Jul 2018 15:41:38 GMT</pubDate><content:encoded><![CDATA[<p>In this Exception and Solution Series, today the solution to a <code>System.Net.Mail.SmtpFailedRecipientException</code> I got recently trying to send an email from a Console Application using the <strong>Smtp</strong> class from <strong>System.Net.Mail library</strong>.</p>

<blockquote>
  <p>Exception</p>
</blockquote>

<p><code>System.Net.Mail.SmtpFailedRecipientException
  HResult=0x80131500
  Message=Mailbox unavailable. The server response was: 5.7.1 Unable to relay
  Source=System
  StackTrace:
   at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, Boolean allowUnicode, SmtpFailedRecipientException&amp; exception)
   at System.Net.Mail.SmtpClient.Send(MailMessage message)
   at &lt;&lt;NameOfMyConsoleApplication&gt;&gt;.Program.Main(String[] args) in C:\&lt;&lt;PathToMySolution&gt;&gt;\Program.cs:line 52</code></p>

<blockquote>
  <p>Solution</p>
</blockquote>

<p>I just added the following <code>system.net</code> configuration to my <strong>App.Config</strong> file under the <code>&lt;configuration&gt;</code> tag</p>

<p><code>&lt;system.net&gt;
    &lt;mailSettings&gt;
      &lt;smtp deliveryMethod="Network"&gt;
        &lt;network host="mail" defaultCredentials="true"/&gt;
      &lt;/smtp&gt;
    &lt;/mailSettings&gt;
  &lt;/system.net&gt;</code></p>

<p>That resolved the Exception. <br>
Thank you <br>
Vijaya Malla <br>
<a target="_blank" href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item><item><title><![CDATA[How To : .NET Framework Empty Project To Web API 2]]></title><description><![CDATA[<p>We are going to learn how to build upon an Empty .NET Framework Project to a Web API2 Project</p>

<p>Created a ASP.NET Web Application (.NET Framework) Project</p>

<p><img src="https://l8csbw.dm.files.1drv.com/y4mc3kTFX2_hcohuYEykp7abSqArvgAX9unIyVgzspJHr1tMv6AmpgbyPhCy9DD4vQcm0iESazEfsFiXQy2DwA5PF_N2MhJYl-2cjeKr4zazZlYRo18VUToHLa7qaZItiVTeDnvcXw0mandf9oakCjN7zsSIu0l4dR6IhC05Mh0Jmfh-N3Wmf-MgPRPROi4-R2anPIxTzZl0dzqHElk-XlYzQ?width=891&amp;height=570&amp;cropmode=none" alt="Create Project"></p>

<p><img src="https://qfjrza.dm.files.1drv.com/y4mh7SH-W0ifGKpcbUFY_VfBUSeDbJMJQXkKFnP8mqXxuzbviJiMI5w7On74ngS84ZEoHT8M-cK4rR_aatN1016UzvyhjnEv9D5OWYPK7RfxyJgElBx9Vvf2KATwtMg1iy18B0M5MSMKJPWfk2Q635wE5fpxy5BXRFmYNpwO9kRs0vXSLNTR_kFggA1d7cKSCN4cLN0AFUfmDZpA22tiUBp7A?width=798&amp;height=519&amp;cropmode=none" alt="ProjectCreation 2"></p>

<p>Click "OK", we get an Empty Project</p>

<p><img src="https://mjy6eq.dm.files.1drv.com/y4m-cJZzmJSzkMgBlmnjxwaA-OkzW4eS1-yGV9EDBErqvkBAOeqdr9A5mX7qt8b6_-FfpDRzMMnSaguv31DwVndx57vfOx3stIaP7bsUqLdal5H5AMHlRYV9uVkEg9vErIspHvrL4pS-rhQMAZbkW2ZaCOoEjqSs6tSNn90pH6t5eqONUOe0I_6GRRoyebBmm3w7iy-Fbp4oDvOKD2y3yVZwQ?width=315&amp;height=308&amp;cropmode=none" alt="Empty Solution"></p>

<p>Just run the Application and we get the following, since its an empty project, we</p>]]></description><link>https://vijayamalla.azurewebsites.net/how-to-net-framework-empty-project-to-web-api-2/</link><guid isPermaLink="false">db52699b-7055-499d-b436-7c5c544a49ed</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Tue, 10 Apr 2018 17:52:20 GMT</pubDate><content:encoded><![CDATA[<p>We are going to learn how to build upon an Empty .NET Framework Project to a Web API2 Project</p>

<p>Created a ASP.NET Web Application (.NET Framework) Project</p>

<p><img src="https://l8csbw.dm.files.1drv.com/y4mc3kTFX2_hcohuYEykp7abSqArvgAX9unIyVgzspJHr1tMv6AmpgbyPhCy9DD4vQcm0iESazEfsFiXQy2DwA5PF_N2MhJYl-2cjeKr4zazZlYRo18VUToHLa7qaZItiVTeDnvcXw0mandf9oakCjN7zsSIu0l4dR6IhC05Mh0Jmfh-N3Wmf-MgPRPROi4-R2anPIxTzZl0dzqHElk-XlYzQ?width=891&amp;height=570&amp;cropmode=none" alt="Create Project"></p>

<p><img src="https://qfjrza.dm.files.1drv.com/y4mh7SH-W0ifGKpcbUFY_VfBUSeDbJMJQXkKFnP8mqXxuzbviJiMI5w7On74ngS84ZEoHT8M-cK4rR_aatN1016UzvyhjnEv9D5OWYPK7RfxyJgElBx9Vvf2KATwtMg1iy18B0M5MSMKJPWfk2Q635wE5fpxy5BXRFmYNpwO9kRs0vXSLNTR_kFggA1d7cKSCN4cLN0AFUfmDZpA22tiUBp7A?width=798&amp;height=519&amp;cropmode=none" alt="ProjectCreation 2"></p>

<p>Click "OK", we get an Empty Project</p>

<p><img src="https://mjy6eq.dm.files.1drv.com/y4m-cJZzmJSzkMgBlmnjxwaA-OkzW4eS1-yGV9EDBErqvkBAOeqdr9A5mX7qt8b6_-FfpDRzMMnSaguv31DwVndx57vfOx3stIaP7bsUqLdal5H5AMHlRYV9uVkEg9vErIspHvrL4pS-rhQMAZbkW2ZaCOoEjqSs6tSNn90pH6t5eqONUOe0I_6GRRoyebBmm3w7iy-Fbp4oDvOKD2y3yVZwQ?width=315&amp;height=308&amp;cropmode=none" alt="Empty Solution"></p>

<p>Just run the Application and we get the following, since its an empty project, we will see a 403 Http Error <br>
<img src="https://yd7dkq.dm.files.1drv.com/y4mUXQbQZClbMQp01pNiJHf32cwQKtE6mNb8ZsMk0E4JIBGaTv8ar4qQoCWfW0t1p8bPRx1WdcUBD25EmkMCtDhI3V3YAl9_mkgqw3cPXP7U68GUYS1HOqMA43PSD4lu56h3D7FatU05Jdwtj0LEBBNga-n0JVRRiSQ-9FXTtSCF9AgjGCiM8M9y_nJ50C9bBzyEcl2ISEV3o9Myv9b94pvyg?width=711&amp;height=230&amp;cropmode=none" alt="403 - Http Error"></p>

<p>Lets take a look at the references folder of the project.</p>

<p><img src="https://xmkchw.dm.files.1drv.com/y4mVdsy6xNT0gVGDNz6xZo6PqnfQvyUGB3PpJRacV7IMthRlYv2Z3rtkHtSGvI5EuaQdrsP6a2o-H1T47FGPXjaqiNUMkIrjh8u_DBuq9LOo7G71l9YflT8QmmWE6nQ5RPxsV3HMv0xv-KRCXT0aaJvlksxGB-BesTdzMmprQxcXsKVQ4SgzkRKNSoM_BwlL72vMnkv0Pqo92NoSjikEOdPyg?width=331&amp;height=539&amp;cropmode=none" alt="References image - Before"></p>

<p>Right now we only have System.Web reference and no API related references. <br>
First lets add that (using Nuget Package manager)</p>

<p>Right click on References and click on "Manage Nuget Packages…" <br>
Go to Browse tab if not selected <br>
Search for "web api"</p>

<p><img src="https://kqv05a.dm.files.1drv.com/y4mvILDPiuXvxsmHhJcgWSPDNPo5XoZUqGY2bIqLAuoUIzJ3RxAzvXrGqPhaqOqPjoIzDgXRQINpxYIubwUNy2TBZ2deEeE67kXTdymSmmPj75aYsYvD6yYgpL5DhlXuhjAqKXqhXCg2kqxJ83DLI8VQnlVoDpwKYRT3YG0P9ydsybLY3Bm5gTaF7UZ1P-opCOON7gUmHmkQVESmTC3F1KdZA?width=792&amp;height=423&amp;cropmode=none" alt="PackageManager"></p>

<p>** side note, you can install any updates you see in Nuget Package manager if you want at this time.</p>

<p>Check the list of package its installing and click OK.</p>

<p><img src="https://qmpeba.dm.files.1drv.com/y4msZdUkziAl2qNKXP6lSPeZTNVQoZy9sHzqh3KGkfTeMmpFzyZywxqFMoejyZSkA-5yV5nsQjTKrCTyrqar-ZmmQa1HGFuN-NDP9TLHGcrfEGOPb-AN-hUHYk_xxRoNqKbPGGsCRR0x4XKlD4wwYaUKGQIXrAU8Omfv4ydFbiPkftuiISVSU_-ogBQwY2Ym2coPrAKaQvRiCS-0kxVIrDscQ?width=423&amp;height=182&amp;cropmode=none" alt="Install Package"></p>

<p>You may have to click "Accept" on the next screen if asked.</p>

<p><img src="https://pvwdyq.dm.files.1drv.com/y4mJvnGWxHsCVTz011JrD03UmAIHq-0VfZHALWzjL7iJjLAx2vupKEltYxxdOVapIiARM4WKoHuVzZUYRWwJo1Ew5Qzp8wVqllljJVpd1uU8LDkPSHEJk-pQ6sCNX_o2GrMqQmVmLnaN9G82tW1PIuNcssfKm4EtDp0ZI7eHLOZ6HJEcc4gxv8djeX5FgW7xQxAd-0eyAGCVAAtbQytFMDuyA?width=307&amp;height=202&amp;cropmode=none" alt="List of Packages installing"></p>

<p>Nuget Package manager installs the necessary packages related to Web API. You can verify from the References folder</p>

<p>** Sometimes right after installing a version of a package, you may also see more updates in the package manager console. Please install them as well.</p>

<p>Now that we have installed the WEB API related package, we should be able to add other pieces like <br>
    1. Route config
    2. Global.asax to register the route config
    3. the API controller and Actions within</p>

<p>And then Test the API.</p>

<p>First lets add the RouteConfig file, which would have the Route configuration for the API, here you can set the default route settings and also add more route configurations.</p>

<p>To organize the code, first I have created a folder called "Startup" and then a static ".cs" file called RouteConfig.cs <br>
<img src="https://acuovw.dm.files.1drv.com/y4m7lZinblmNxh9j1IoSweZBpVGkrjAciZGpyJsjYz0wSFbMxe6-gwh59sqUxMe1XI_5i9Hwsn2BOWwNAakxuRDLDR2vTxCoYl_zejGeVbcIJsxccvbjfhrJ9gWUJGlv1AcH-i9A3gXzLMC11YdRbB5POTzkzeF1YwS4N_RSB7KAbWVJIsm_VCbhF15zh2-6OnlQflo5m2_FmaJyNqRoSHxrg?width=267&amp;height=194&amp;cropmode=none" alt="RouteConfigFolderFile"></p>

<p>Update the class contents as below.</p>

<pre><code>    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApiRoute",
            routeTemplate : "api/{controller}/{id}",
            defaults : new { id = RouteParameter.Optional}
            );
    }
</code></pre>

<p>** you may have to add a using statement "using System.Web.Http;"</p>

<p>Basically what we have here is that we are registering a Route by Adding the above route to the Routes collection.</p>

<p>** NOTE: I have also updated the namespace as below
From : namespace WebApplication2.Startup <br>
To: namespace WebApplication2</p>

<p>Now that we have a route, lets add another folder for all our API Controllers called "controllers" <br>
And add a webapi2 controller called "ValuesController.cs" as MS default api controller</p>

<p>Two way we can create an API Controller.</p>

<ol>
<li>Creating the default template "ValuesController"</li>
</ol>

<p>Right click on "Controllers" folder and pick the template as shown below <br>
<img src="https://zbbmta.dm.files.1drv.com/y4mbRvyA_9NHu9LXIgX57WJKCVU3-jgBW_GnBxSUzVcErWRwGgjcolur2zW1s8Dk1-eGHyC5ooLogZ9eRlMLDkRRyFsZkXs6cq3P9PyYDig-ds6IiX6R7zt2q_jDiP320_QNKatvkwRqFaiIP_CNxghh_kCqhAj_iv8dUAKeEUVgEa8EYkngU4kGhrWs_uQJTiuAZh_HGWOvsaXKEreIexyBQ?width=828&amp;height=393&amp;cropmode=none" alt="ValuesControllerTemplate"></p>

<p>In the next window you can give the controller a name, make sure your name ends with "Controller". And Click "OK" <br>
        <img src="https://mjyqeq.dm.files.1drv.com/y4m9zrio2hg6V-N_SGz_2uFUft9iu-AxQD2XrCHc3Q4j-EWLS8axGsDhNlfQPuHun-UyzHdGWQeL_m3FM-NzxeR6-LHbpKbg4Ms7LBmVOiseOTMtAPSwTSJPX0GotEzbL8iWcogQEy55Kylw82t79c-F-u7xukj2p4Ol8KC5hBPyS9MDXYHLpuPXZZPCPBI4XrfJJRAa36AYvXUtqGAHIb5Lw?width=406&amp;height=125&amp;cropmode=none" alt="" title=""></p>

<p>Now we have a sample template controller called "ValuesController" with sample HTTP Actions too.</p>

<p>2.Creating a controller and giving it any name we prefer.</p>

<p>Right click on "Controller" and pick as shown below <br>
<img src="https://l8cxbw.dm.files.1drv.com/y4moHbvF46DeJCtV5P4TOTqcAi-okiih6XaccegcfTk8GjsOPRTrz6evqSdFaCW5CH7bp58UKjQ98AcW6Sc4xGOlbNszqYxNnhnXijWKhYkURHOdt2egr1zwAAh2X4fL031RWZiWfWx3ETCpbwCscYduggXWpb5ldsAuowm0IBgKn97rTWbTB3Wego_bdFtyEzwV-QCjhE6ngfaQYhaoUWhtQ?width=793&amp;height=416&amp;cropmode=none" alt="">
<img src="https://qfjwza.dm.files.1drv.com/y4mQ4yx8KODWDWfeoPOiwNrM8oye6W3OoacJaB4ID3T3bsu1_ECJCV4UTvF6IKfE6aCgWOWrXs52qX9YdQaHfzhr-5wlWnQHchm21xlT5v7xigmU5kmc8itAewOHS1RxzEKpj84ybmbApjyu2pIq07n4CgcE4e6Ow5dPsvPBbF6-O1y4eNCgIpemx8d4qYQ2s5vOyDj2Jjg_PDBwZFOvDqpXA?width=1021&amp;height=553&amp;cropmode=none" alt="">
<img src="https://yd7ikq.dm.files.1drv.com/y4mbXATRqm3gUb-0x-mcBzLItYwaNo51KyzrqLA2IjWgLgNTL4FUjl4Kme1_N9V6rKKpuwy-2I8DBaHoDZwdaud4YucQ87CQnPLs6E_HcliTKW7Vf8Qng1UwMcM7tp9zf4UaYcgHOBjVD9AMKEcW28jyn9Becl4BLmHPuB_6nmtSOYt4TkUNkWDLAMj26Ko89aeWCv51Qw6mcYOs4hi3pTRNQ?width=605&amp;height=127&amp;cropmode=none" alt=""></p>

<p>Now we have created an API SampleController but with no actions defined which we have to.</p>

<p>If you see the difference between the two API controllers created, the first Template one has some template code added for us but the second one is empty.</p>

<p>Now let us run the App and try to hit the APIs <br>
We still get the 403 Forbidden error on the page, <br>
<img src="https://yd7dkq.dm.files.1drv.com/y4mUXQbQZClbMQp01pNiJHf32cwQKtE6mNb8ZsMk0E4JIBGaTv8ar4qQoCWfW0t1p8bPRx1WdcUBD25EmkMCtDhI3V3YAl9_mkgqw3cPXP7U68GUYS1HOqMA43PSD4lu56h3D7FatU05Jdwtj0LEBBNga-n0JVRRiSQ-9FXTtSCF9AgjGCiM8M9y_nJ50C9bBzyEcl2ISEV3o9Myv9b94pvyg?width=711&amp;height=230&amp;cropmode=none" alt="403 - Http Error"></p>

<p>since we have to hit the API endpoints, as mentioned in the RouteConfig.cs file, we have to change our URL to match the Route defined in the config file</p>

<p>But now we see this <br>
404 error image. <br>
<img src="https://xmkhhw.dm.files.1drv.com/y4mIpXDPiPJzap0APVQj0PRmNxyirONGmgVu00_SAWBEYhclNquOxSxk0PrzK8EtHf-oU-0TSR0CbPs7010YqVmx9JwVB5psUoeIvDZ63TYSUAWGnJMuigWNQySzOBplCoT9zJiOsTNqP-Uzmj2_pHL-CmvPDikjqYHeKgYOUBZeBmeAvFCBWVsg3fiTTBITxYU8ImQeUAVYD0iXtU_W94Cvg?width=863&amp;height=220&amp;cropmode=none" alt="404 - Http Error"></p>

<p>The problem here is that, even though we have the necessary package added and the appropriate route setup, we didn’t actually initialize the routes in the application. </p>

<p>To do that we have to add the RouteConfig configuration to the startup of the project. <br>
Lets fix that by adding a "Global.asax" file and add the RouteConfig configuration in there to initialize the route. <br>
<img src="https://kqv55a.dm.files.1drv.com/y4mKS0APxhzBfifEs2px8sk7QrJZAFSZU34YIEDduceX30lcE8hhnimyLnJIat-e1DnjhENcLJ5_6ZcCvsog7acvOsFsJNNoB-tldgjETkCEJKvuHaxV8H11gZTkqcnhXv9DAWbLvqt8a8Z5t664_OzMzta1fE3lyfxlubDkmQOxKdJY9vWUr0Tc8WuCDTNpqa7gnXMwV6P_EJtiL9cJsBGbA?width=951&amp;height=656&amp;cropmode=none" alt="Global asax file"></p>

<p>Under Application_Start method, we have to Register the Route Configuration defined in RouteConfig.cs file <br>
** We have to add some Using statements as well.</p>

<p>Application_Start code as below.</p>

<pre><code>    protected void Application_Start(object sender, EventArgs e)
    {
        GlobalConfiguration.Configure(RouteConfig.Register);
    }
</code></pre>

<p>NOTE: Add this using  "using System.Web.Http;"</p>

<p>Now run the application and go to the API URL route and try to hit the Values Controller endpoint</p>

<p><img src="https://qmpjba.dm.files.1drv.com/y4mhaiNaubsQKDQ4S1LHbd1P1v9ENXRDR7SExVcf3xuLc5nRHucqxL58GrumawEhKKZvn9fVBH_kTTyxxruLcOuy-UG3dbZxZImFTfUOto9qcuHnHcFcfxPY87v6o_3ZjR30YZZ5S_2wHbk_r226UVu8giDuNT-Qjgh0Fzi7dD74JTdmfwcAG8jWQ7ntOsiur5dFTooPqCrIuja624psjB1Rw?width=1040&amp;height=214&amp;cropmode=none" alt="API Success"></p>

<p>** we can change the format of data the API can return and set default formats or restrict the data format etc.</p>

<p>DONE… That is all, only 3 steps</p>

<pre><code>1. Add the WEB API Nuget Packages
2. Add the RouteConfig.cs, to define the Map Route Collection
3. Add Global.asax and Configure the Route Registration in Application_Start
</code></pre>

<p>Here is the <a target="_blank" href="https://github.com/VijayaMalla/EmptyProjectToWebApi">GitHub Link</a> - completed project. Not sure why you would need this, but I am just putting it out there.</p>

<p>Please let me know your thoughts.</p>

<p>Thank you <br>
Vijaya Malla <br>
<a target="_blank" href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item><item><title><![CDATA[Create SHA1 hash using C#]]></title><description><![CDATA[<p>This is a simple sample program to create a SHA1 Hash from a string in C#.</p>

<p>Please check out my <a target="_blank" href="https://gist.github.com/VijayaMalla/95431b69003b1926981ae465a80cfb18">@VijayaMalla Gist</a></p>

<p>Thank you <br>
Vijaya Malla <br>
<a target="_blank" href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></description><link>https://vijayamalla.azurewebsites.net/create-sha1-hash-from-string-c/</link><guid isPermaLink="false">29fb5888-5eb7-482a-8bf1-fc462e8dc159</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Tue, 10 Apr 2018 15:38:50 GMT</pubDate><content:encoded><![CDATA[<p>This is a simple sample program to create a SHA1 Hash from a string in C#.</p>

<p>Please check out my <a target="_blank" href="https://gist.github.com/VijayaMalla/95431b69003b1926981ae465a80cfb18">@VijayaMalla Gist</a></p>

<p>Thank you <br>
Vijaya Malla <br>
<a target="_blank" href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item><item><title><![CDATA[TIP : How to handle "SecurityNeogtiationException" *]]></title><description><![CDATA[<hr>

<h3 id="spanstylecolorredonlyondevmachinedonotcheckinorcommitcodetoserverspan"><span style="color:red;"> <em>ONLY ON DEV MACHINE</em> - DO NOT CHECK IN OR COMMIT CODE TO SERVER </span></h3>

<hr>

<blockquote>
  <h5 id="spanstylecolorredonlyfordebuggingpurposesspan"><span style="color:red;"> ONLY FOR DEBUGGING PURPOSES </span></h5>
</blockquote>

<p>I was trying to connect to a WCF Service and got the <strong>SecurityNegotiationException</strong> and the following Exception Message</p>

<p><strong>An unhandled exception of type 'System.ServiceModel.Security.SecurityNegotiationException' occurred in mscorlib.dll</strong></p>

<p><strong>Additional</strong></p>]]></description><link>https://vijayamalla.azurewebsites.net/tip-how-to-handle-securityneogtiationexception/</link><guid isPermaLink="false">45a91df3-9acd-4453-be50-e1b651b5a461</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Thu, 01 Feb 2018 17:27:15 GMT</pubDate><content:encoded><![CDATA[<hr>

<h3 id="spanstylecolorredonlyondevmachinedonotcheckinorcommitcodetoserverspan"><span style="color:red;"> <em>ONLY ON DEV MACHINE</em> - DO NOT CHECK IN OR COMMIT CODE TO SERVER </span></h3>

<hr>

<blockquote>
  <h5 id="spanstylecolorredonlyfordebuggingpurposesspan"><span style="color:red;"> ONLY FOR DEBUGGING PURPOSES </span></h5>
</blockquote>

<p>I was trying to connect to a WCF Service and got the <strong>SecurityNegotiationException</strong> and the following Exception Message</p>

<p><strong>An unhandled exception of type 'System.ServiceModel.Security.SecurityNegotiationException' occurred in mscorlib.dll</strong></p>

<p><strong>Additional information: Could not establish trust relationship for the SSL/TLS secure channel with authority 'Service Name'.</strong></p>

<p><strong>Inner Exception  : {"The remote certificate is invalid according to the validation procedure."}</strong></p>

<p>Since I am on my local machine I didn’t have the updated Https Cert. And because of that the Negotiation between my local machine and the service is failing.</p>

<p>In order to resolve this issue TEMPORARILY, I have added the following code before I initialize the service, which would ignore/skip the security validation.</p>

<pre><code>ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(
delegate 
{
    return true;
});
</code></pre>

<p>OR</p>

<pre><code>ServicePointManager.ServerCertificateValidationCallback = delegate 
{
    return true;
};
</code></pre>

<p>I was able to successfully debug my service.</p>

<p>Thank You <br>
Vijaya Malla. <br>
<a href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item><item><title><![CDATA[TIP : Disable CSS Lint (in Visual Studio)]]></title><description><![CDATA[<p>Sometimes we see the Red Squiggly lines in VS Solution Explorer under CSS and JS Files. <br>
This is because you may have turned on Lint Check on the files. Basically what it does it to find any Syntactical errors and notify you. But sometimes they can be annoying.</p>

<p>To Disable</p>]]></description><link>https://vijayamalla.azurewebsites.net/tip-disable-css-lint-in-visual-studio/</link><guid isPermaLink="false">3011f6da-09f8-4c2f-8c38-b3e752d7beed</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Tue, 30 Jan 2018 16:15:27 GMT</pubDate><content:encoded><![CDATA[<p>Sometimes we see the Red Squiggly lines in VS Solution Explorer under CSS and JS Files. <br>
This is because you may have turned on Lint Check on the files. Basically what it does it to find any Syntactical errors and notify you. But sometimes they can be annoying.</p>

<p>To Disable this Lint Check (for CSS files), you can do the following.</p>

<p>Initial State TO  Final Solution</p>

<p><img src="https://0rb5ha-dm2305.files.1drv.com/y4mRfHjAyPkkkCuCTveqPiJT-ybVk9UjF2KSnJ41pt97THzjv7cp7XQs7JejYZbhWFogvNXD6tEq3NpeyFWhhcwu1qALyFOA5rKvdCYYIEWMEmjXKNdBDat0l0tp5yJtSfgXAzexl_oBhVLrYK6fjg04amYZ2qicyBCEJrBwJCyin3yqWUs6-OWHPkOThrqyM24i3-GdlsJwKqrGXQ95OzwCg?width=642&amp;height=346&amp;cropmode=none" alt="CSSLint Final Solution" title=""></p>

<p>Solution:</p>

<ul>
<li>Go to Tools Menu and then Options</li>
<li>Under Text Editor (left side options), click on the black arrow next to CSS</li>
<li>It should then expand to revel more options like below
<img src="https://nmcqpw-dm2305.files.1drv.com/y4mPiAr5-2s3a1n0hGa46L6b5m0A0Wuh2ETZzOVmE5Nd6gxSTZZtREv8sBM7eaoHflZcfLaJq7O1F9ZL0kkEqbVODoqqPJNbFqAuB0sqepLjGgYYAsLW-kQBGGicph3kCC5eHnblLbgBLcNfeU3X4UUo8tcObcFqHa4jbwhY43UHV5qI5VkupHRifZUDxDmjie26xTItK6t2kf87gsJmR5PZg?width=131&amp;height=123&amp;cropmode=none" alt="CSS Menu Option"></li>
<li>Click on CssLint, and update the "Enable CSS Lint" option to "False"
<img src="https://nzzs4q-dm2305.files.1drv.com/y4mrDGsnjQ5aXdjko1U0oHF6fwXqZ5LFwgx735ONNeXsS14v3mPwlYQXr1FDGV2u6E_yFqfFT-ytdh8wMqRJmZSaQ6PnvBx8OcFEmYVHE-5c6UNER8eZ7TzQp6hkXVPNFZHrBPoKf5YyhmM3xyfXZ_4OxMLUkKQ8vYhAqN8EApbwdfmOTlfGqO-aQdGA5RPsuYkWSUmfE0jieITCfMDXx58yA?width=476&amp;height=56&amp;cropmode=none" alt="CSS Lint Setting"></li>
<li>Click on OK.</li>
<li>You may have to close and re-open VS to see your changes.</li>
</ul>

<p>Thank you <br>
Vijaya Malla <br>
<a target="_blank" href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item><item><title><![CDATA[Docker run Jenkins FAIL - Solution]]></title><description><![CDATA[<p>I am setting for <a href="http://novacodecamp.org/">NOVA Codecamp</a> and following a set of instructions for a Docker Session at this <a href="https://github.com/excellalabs/docker-workshop-1">GitHub</a> location.</p>

<p>Following the steps in the Preparation Section, Installed Docker (Community Edition) on my MAC at the <a href="https://store.docker.com/editions/community/docker-ce-desktop-mac?tab=description">Link</a> provided. It was smooth.</p>

<p>Copied the dmg file to my Applications folder as</p>]]></description><link>https://vijayamalla.azurewebsites.net/docker-run-jenkins-fail-solution/</link><guid isPermaLink="false">93f04bcc-7a48-483a-b150-ef00141b064f</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Fri, 06 Oct 2017 02:30:05 GMT</pubDate><content:encoded><![CDATA[<p>I am setting for <a href="http://novacodecamp.org/">NOVA Codecamp</a> and following a set of instructions for a Docker Session at this <a href="https://github.com/excellalabs/docker-workshop-1">GitHub</a> location.</p>

<p>Following the steps in the Preparation Section, Installed Docker (Community Edition) on my MAC at the <a href="https://store.docker.com/editions/community/docker-ce-desktop-mac?tab=description">Link</a> provided. It was smooth.</p>

<p>Copied the dmg file to my Applications folder as asked and now I can see it running in my APP Bar on the top as below</p>

<p><img src="https://k5u6jq-dm2305.files.1drv.com/y4miuCRl9aToMK3tnHl93qeN3UG6GlGTDvrquEpLlCTGLWVDi8Gsk6ifUU6wJJl0I0ml4NUCl8unGb16TOFIveL0WKFcVW8Lfhnqqz3L_mV8Dqzf0RUedGOoUNne0GpsXsKWaCJNm_tyMceGQhixff8fqx0iQwDIpMHi7YuYxcVIGjg-_THVOWEeXJNr5yY4oC1bnkbSwd_4kkfDhAOt3kvLQ?width=560&amp;height=734&amp;cropmode=none" width="560" height="734"></p>

<p>Now I am trying to get Jenkins setup and used the command provided as below <br>
<code>docker run -d -p 49001:8080 -v $PWD/jenkins:/var/jenkins_home:z -t jenkins</code></p>

<p>It failed I got the following error.</p>

<p><code>docker run -d -p 49001:8080 -v $PWD/jenkins:/var/jenkins_home:z -t jenkins</code> <br>
Unable to find image 'jenkins:latest' locally <br>
docker: Error response from daemon: Get <a href="https://registry-1.docker.io/v2/library/jenkins/manifests/latest">https://registry-1.docker.io/v2/library/jenkins/manifests/latest</a>: unauthorized: incorrect username or password. <br>
See 'docker run --help'.</p>

<p>I thought since I don't have the Jenkins package it failed, so i ran the following command to pull Jenkins from Docker Store. (infact the previous command should pull Jenkins if docker couldn't find it; but it failed.)</p>

<p><code>docker pull jenkins</code> <br>
Using default tag: latest <br>
Error response from daemon: Get <a href="https://registry-1.docker.io/v2/library/jenkins/manifests/latest">https://registry-1.docker.io/v2/library/jenkins/manifests/latest</a>: unauthorized: incorrect username or password</p>

<p><img src="https://kcytgw-dm2305.files.1drv.com/y4mBQOmnt6_rnBOr60mlzHZcS9-tKlMEcmV6C6KzADeHVALtJg75CdYtkgSoorMUH3yR3HcStyX9_zw4jNfQlVJz1nnFojACLwvUtUiM4_AkJarpn84M_5sihFqKvgc1KfkdMcjKyBBv5SPl7d28ykPCYDtRI1ZhDkny4I7xjpohhJAxrWvZ_CH_pOku9Vn5Zm-7O9mT7kEPcBSa40jnL_l_g?width=1160&amp;height=302&amp;cropmode=none" width="1160" height="302"></p>

<p>Still ERROR.</p>

<blockquote>
  <p>So finally the FIX for this is, for some reason when i login to my Docker instance on my MAC, with my EMAIL and PASSWORD it didn't work. I have to sign out and then login with my USERNAME and PASSWORD. Then it worked like a charm.</p>
</blockquote>

<p><img src="https://xg9iya-dm2305.files.1drv.com/y4mVHY6e7CilytJeVglawnBtystYYGWKqKwlne00AkhnqzP1IjBa4q16Dlokn1ww-YtnJq6CTsV3yInkwQ4b-vtw7wHCupqEzD5IgV29Y1zVl5u7UQx614lXwjrfpcDW8M7Ogy5gS7jr0iivFFU0P8Fiy50TSPtVYjg7AR6TteRH5e2IEzZB8t2cKbdsapPM04vbJFm9bqT54bDMb8h7Mqnxg?width=1146&amp;height=682&amp;cropmode=none" width="1146" height="682"></p>]]></content:encoded></item><item><title><![CDATA[Xamarin.iOS Build issue - Root Assembly Conflict]]></title><description><![CDATA[<p><b>The Issue here is with the root assembly conflicts with another assembly</b> <br>
The environment I have here is a MacBook Pro 15 with most recent macOS and Visual Studio for MAC (latest version). Along with this mac setup I have a Windows 10 instance with Visual Studio 2017 (most recent</p>]]></description><link>https://vijayamalla.azurewebsites.net/xamarin-ios-build-issue-root-assembly-conflict/</link><guid isPermaLink="false">136a398b-df15-489c-8f32-f376ac0b5be2</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Wed, 17 May 2017 16:37:00 GMT</pubDate><content:encoded><![CDATA[<p><b>The Issue here is with the root assembly conflicts with another assembly</b> <br>
The environment I have here is a MacBook Pro 15 with most recent macOS and Visual Studio for MAC (latest version). Along with this mac setup I have a Windows 10 instance with Visual Studio 2017 (most recent version).</p>

<p>I have created a template Xamarin Forms Project (PCL) with Android and iOS projects. </p>

<p>Building the iOS project gave me the following error (obv: my visual studio instance is connected to my mac using the mac agent)</p>

<p><b> <br>
The root assembly /Users/vijayamalla/Library/Caches/Xamarin/mtbs/builds/iOSProjectName.iOS/ac16c487311abbbeafd486f50700030e/bin/iPhoneSimulator/Debug/iOSProjectName.exe conflicts with another assembly (/Users/vijayamalla/Library/Caches/Xamarin/mtbs/builds/iOSProjectName.iOS/ac16c487311abbbeafd486f50700030e/bin/iPhoneSimulator/Debug/iOSProjectName.exe). <br>
</b></p>

<p>I have looked around to resolve this error, trying to get my head around since I have all the latest versions of softwares installed.</p>

<p>I have stumbled upon this link <br>
<a href="https://forums.xamarin.com/discussion/92773/the-root-assembly-conflicts-with-another-assembly">https://forums.xamarin.com/discussion/92773/the-root-assembly-conflicts-with-another-assembly</a></p>

<p>I have tried the solution suggested above, to make it easy I did the following steps</p>

<ol>
<li><p>Open Xamarin.iOS.Common.After.targets file here; C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Xamarin\iOS</p></li>
<li><p>Made a backup of this file and updated one of the files with Notepad ++ (as an administrator)</p></li>
<li><p>Made the following changes <br>
line 73: <br>
remove: &lt;<em>ReferencedDlls Include="@(AllBuiltProjectOutputs);" /> <br>
remove: &lt;</em>Assemblies Include="@(MainAssembly);@(<em>ReferencedDlls)" /> <br>
add: &lt;</em>Assemblies Include="@(AllBuiltProjectOutputs)" /> <br>
line 85: <br>
remove: &lt; MTouchReferencePath Include="@(<em>Assemblies)" /> <br>
add: &lt; !-- Don't append as an MTouchReferencePath the primary assembly itself since that's already passed as MainAssembly="$(TargetPath)" --> <br>
add: &lt; MTouchReferencePath Include="@(</em>Assemblies)" <br>
Condition="'%(_Assemblies.IsKeyOutput)' != 'true'" /></p></li>
<li><p>Save and now Rebuild</p></li>
<li><p>DONE</p></li>
</ol>

<p>and now with the wonderful iOS Simulator on Windows from Microsoft, we can see it work just fine.</p>

<p><img src="https://kpvzbq-dm2305.files.1drv.com/y4m3uKQKbMZyxAJ33LKF530m_xNwdz4CIXU5QSRqnTI-FNgCtG7TzEwibC1fRjSibX90ZtY0W0GskH9a-RHV7_ctKpmNd-9j2VzORjsZo5NAiHD7TpZs-AHAR02E0sIhqA74yIB4VMKdw1GsZXDYo-YB4m4zGae8ngtD68GS5bJIblMUElU9kU4HP6g-ksfOEGpToi-TUedDtdZ7mzKajcAQg?width=588&amp;height=1282&amp;cropmode=none" alt="Xamarin Forms Landing Page"></p>

<p>Thank you <br>
Vijaya Malla <br>
<a target="_blank" href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item><item><title><![CDATA[Export to Excel (.xlsx format) - Custom Implementation on JqGrid Grid]]></title><description><![CDATA[<p>At work I was asked to implement Export to Excel functionality on JqGrid data. What we have at that point is just the JqGrid and two HTML buttons (one for Excel export and PDF export) <br>
I wanted to use the existing content-type and code structure to get the most out</p>]]></description><link>https://vijayamalla.azurewebsites.net/export-to-excel-xlsx-format-custom-implementation-on-jqgrid-grid/</link><guid isPermaLink="false">f942cdc3-5082-4a33-8001-340e1c8153e6</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Tue, 10 Jan 2017 17:35:00 GMT</pubDate><content:encoded><![CDATA[<p>At work I was asked to implement Export to Excel functionality on JqGrid data. What we have at that point is just the JqGrid and two HTML buttons (one for Excel export and PDF export) <br>
I wanted to use the existing content-type and code structure to get the most out of it. Have tried several ways like below</p>

<ul>
<li>Updating the Content-Type</li>
<li>Changing the file extension from .xls to .xlsx</li>
</ul>

<p>and nothing worked. I was either able to successfully export the file but with no data in it or was able to export the file with data, but when opened it would show a warning message which might upset or confuse or scare the users. <br>
I have finally decided to use a 3rd party library and when searching for one I have found <a href="http://epplus.codeplex.com/">EPPLUS</a> a codeplex link for my rescue.</p>

<p>You can follow the links at the Codeplex site and update your code to work for you. Following is how I used this library to resolve the problems I had with the export to excel (.xlsx) format.</p>

<p><strong>Challenges</strong>:<br>
Change the export format from .xls to .xlsx <br>
Resolve the below warning message on open.</p>

<p>Export to Excel message: The file you are trying to open, ExportData.xls, is in a different format than specified by the file extension.  Verify that the file is not corrupted and is from a trusted source before opening.  This message should not be displayed when exporting to Excel. </p>

<p><img src="https://a3xfkw-dm2305.files.1drv.com/y3m8lGq3flEQ2FFsUgKxzYXQELGn-EZrVw8yliWYtfY1OwmECKYu3xmVSd73lwkWkE_JrwfnaDv-nypBwyb9TTLSnCxynlL5HyYkrIoIBsDS5-9a02bAEel-wyHatg_NiZde0QyYOxx89y-zOuJ2DU9acxN3JkN7xXoAzCdjBCgntA?width=660&amp;height=464&amp;cropmode=none" alt="Excel Warning"></p>

<p><strong>Sample Data</strong> that is being sent from the JqGrid on button event (Button Click event).</p>

<p>"First Name\tLast Name\tTitle\tAddress\tPhone\tEmail\t\n\"Vijaya\"\t\"Malla\"\t\"Sr. Developer\"\t\"Washington DC  \"\t\"(111)-222-2222\"\t\t\"sampleemail@doamin.com\"\t\n\"FirstName1\"\t\"LastName1\"\t\"Jr. Developer\"\t\"Fairfax, VA  \"\t\"(222)-333-3333\"\t\t\"sampleemail1@doamin.com\"\t\n\"FirstName2\"\t\"LastName2\"\t\"Developer\"\t\"One Loudoun, VA  \"\t\"(222)-333-3333\"\t\t\"sampleemail12@doamin.com\"\t\n\"FirstName3\"\t\"LastName3\"\t\"Rookie Developer\"\t\"Arlington, VA  \"\t\"(222)-333-3333\"\t\t\"sampleemail13@doamin.com\"\t\n\"FirstName4\"\t\"LastName4\"\t\"CEO\"\t\"Alexandria, VA  \"\t\"(222)-333-3333\"\t\t\"sampleemail14@doamin.com\"\t\n\"FirstName5\"\t\"LastName5\"\t\"CTO\"\t\"Ashburn, VA  \"\t\"(222)-333-3333\"\t\t\"sampleemail15@doamin.com\"\t\n\</p>

<p>This is a "\t" delimited text with "\n" to separate a new line. The first set of strings are going to be the columns headings and the rest is the data for the respective columns.</p>

<p>One of the datatypes that the library takes is a DataTable. So it takes DataTable data and creates an Excel out of it. I have done the following to parse and convert the above data to create a DataTable.</p>

<pre><code>        DataTable dt = new DataTable();
        var rows = FileData.Replace("\"", "").Split('\n');
        var columns = rows[0].Split('\t');
        for (int i = 0; i &lt; columns.Length - 1; i++)
        {
            dt.Columns.Add(columns[i]);
        }
        for (int i = 1; i &lt; rows.Length - 1; i++)
        {
            var dr = dt.NewRow();
            var rowData = rows[i].Split('\t');
            dr.ItemArray = rowData.Take(rowData.Length - 1).ToArray();
            dt.Rows.Add(dr);
        }
</code></pre>

<p>Very simple parsing, breaking the text into rows and columns. First created the columns part and then parsed each row to get the data array and created a DataRow from it and added each row to the DataTable.</p>

<p>Now that I have the DataTable as input to the library to create my Excel, <br>
I have called the library specific functions to create my xlsx file.</p>

<p>1) I have created variables for the fileName</p>

<pre><code>        var fileName = "SampleExportExcel";
        var exportfileName = HttpUtility.HtmlEncode( fileName +DateTime.Today.ToShortDateString() + ".xlsx");
</code></pre>

<p>2) Now that we have file name, let create the excel file.</p>

<pre><code>        if (dataTable != null)
        {
            using (var excelPackage = new ExcelPackage(new MemoryStream()))
            {
                excelPackage.Workbook.Properties.Author = "Vijaya Malla";
                excelPackage.Workbook.Properties.Title = fileName;
                excelPackage.Workbook.Properties.Comments = "Export using EPPLUS library";
                excelPackage.Workbook.Worksheets.Add(fileName);

                workSheet.Cells["A1"].LoadFromDataTable(dataTable, true);

                excelPackage.Save();

                var stream = excelPackage.Stream as MemoryStream;
                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                Response.BinaryWrite(stream.ToArray());

                return File(stream, "application/vnd.ms-excel", exportfileName);
            }
        }
        return File(new MemoryStream(), "application/vnd.ms-excel", exportfileName);
</code></pre>

<p>If the dataTable is null, then it returns an empty file. Which could be corrupt (I havent tested this part)</p>

<p>If there is data in the dataTable, then we create the Excel file <br>
First of all we need to create an instance of ExcelPackage, which I think is an instance of excel in memory. <br>
Now we have to add a Workbook to the package which will contain WorkSheets. <br>
The first 4 lines within the using is to set properties to the Excel file so that it looks complete when we have a Detail view in Windows Explorer window.</p>

<p>Then we need a Worksheet to host the data, so we create an instance of that within the Workbook and assign the dataTable data to it starting at the first Cell [A1].</p>

<p>That’s all, now we Save() the Excel Package and change the package to a MemoryStream and return it to the browser which will save it to the local machine.</p>

<p>This is how it looks in Windows Explorer</p>

<p><img src="https://ycbzww-dm2305.files.1drv.com/y3mRHSM19_9UClGpP-ImUpgjZcPF3h-LaOcCH6WL2VM1QWaj0cDZO4DK4FuaJxyOfhKwlNYfK0jbgKkISIY__YC6MdCkekAyjQlGFOcAuNXUzS4BOY2Kgdau1lmDkoRu2DPeVJiEIQ41sfSL1AP2ihNMgSu7VCOnl4KRaQG-a7b3T4?width=633&amp;height=32&amp;cropmode=none" alt="Excel Warning"></p>

<p>And on open, it doesn’t show the warning dialog window and the data is rendered as below. Success.</p>

<p><img src="https://jjdeua-dm2305.files.1drv.com/y3mJLYj7t8m1wqEI-etbtk6sMprn2GfHaoSqZbgWDdxpeaZZP3bwKgwg15hI6Ir_ecYNHUlxTomutUJjQiIRnUo7FPyO4LmJU9hvQi8je0CSl1PFHa2B30bU9Bon69n5fTyFNJ73r46wZhLJySVhnzhVp6xd_MQs6aKgnAgOwDfsDg?width=660&amp;height=184&amp;cropmode=none" alt="Excel Warning"></p>

<p>And this is the Worksheet name. <br>
<img src="https://mh5qqw-dm2305.files.1drv.com/y3mk14L6OTFq556rKprMLr0cvybVySjM9F6nVlbbV36sFJR1JQ4pmPlmN_dcc7NH40CbkZcJOsOw4tEbpDCUxx0azjaGi6IEUQXSPb2aAyuuI034em3HOQIa-RDzuzBPLRlffivraClUkQ4ub46ScELocV6rwsfgeZssZWgoy9TqJk?width=175&amp;height=53&amp;cropmode=none" alt="Excel Warning"></p>

<p>Now that we have this, I thought it will be good to add a header above the Columns and also BOLD the column headings as below</p>

<p><img src="https://zdubzg-dm2305.files.1drv.com/y3mFiOfHeOckA-R5bhDbVVFujPWw96vzR00cBM6W6Zj_-Av3FYpDKyu0dC3TEhhe9mkPCRls20pPPaAsiadkiFEi6c2qOBG7RRb7Tr0SL0kIgsGny2TAlQ0yy-8HhTECRE72GFp-1D2Qr_D6WSPdAfP5m82Syef8rJiW7zwIEAoVl0?width=660&amp;height=54&amp;cropmode=none" alt="Excel Warning"></p>

<p>First I thought I have to add the header as a column to the Datatable, but that was stupid. Did some research and also added some common sense. I have move the code to add the header from DataTable creation to Excel creation part.</p>

<p>Added this right after the workbook properties set</p>

<pre><code>                var workSheet = excelPackage.Workbook.Worksheets[1];
                var title = workSheet.Cells[1, 1, 1, dataTable.Columns.Count];
                title.Merge = true;
                title.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                title.Value = "Personal Information DataTable";
</code></pre>

<p>So basically we are just creating "title" cell, at location: Cell[1,1,1,dataTable.Columns.Count] which in English is A1:F1 <br>
And added properties to this Cell like Merge and center the text and finally the cell value.</p>

<p>Since we added the header and it shows up above the column header we also have to update the dataTable render to second row.</p>

<p>From: <br>
workSheet.Cells["A1"].LoadFromDataTable(dataTable, true); <br>
To: <br>
workSheet.Cells["A2"].LoadFromDataTable(dataTable, true);</p>

<p>And also update the cell location </p>

<p>And add the following to bold the header row as below</p>

<pre><code>                workSheet.Cells["A2"].LoadFromDataTable(dataTable, true);
                var columnHeaderRow = workSheet.Cells[2, 1, 2, dataTable.Columns.Count];
                columnHeaderRow.Style.Font.Bold = true;
                columnHeaderRow.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
</code></pre>

<p>This would export the data as below <br>
<img src="https://8rs3rg-dm2305.files.1drv.com/y3mgxrID9PtEdEW6yzy588Io6ilvcWKZEVKNEUkjHOgd8Vq32dbVvnOA1IuUiE41ia6BBR1WZfGMrdhnPrI7-AkpXcbNJOSWT4wApO8nn4oe5G8qV4EeQDaIhKOA-TREtux_LAq6XuvmiZg8FcHUZKB-Gr276C5z6UHW7fJWbxv7no?width=660&amp;height=170&amp;cropmode=none" alt="Excel Warning"></p>

<p>There are other features that EPPLUS library can do, please explore. <br>
Happy Coding..</p>

<p>Thank You <br>
Vijaya Malla. <br>
<a href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item><item><title><![CDATA[What is Azure Table Storage (Study Notes)]]></title><description><![CDATA[<p><strong>Azure Table Storage</strong>:
It is "A NoSQL key-value store for rapid development using massive semi-structured datasets" as defined on Microsoft Azure site for <a href="https://azure.microsoft.com/en-us/services/storage/tables/">Table Storage</a>. <br>
And also</p>

<ul>
<li>It can store petabytes of structured data</li>
<li>supports flexible data schema</li>
<li>Made for enterprise</li>
</ul>

<p>The fact that we can store Structured data and</p>]]></description><link>https://vijayamalla.azurewebsites.net/what-is-azure-table-storage-study-notes/</link><guid isPermaLink="false">4520e6e5-bbe4-4c64-9bca-8a94fb4cfb6b</guid><dc:creator><![CDATA[Vijaya Malla]]></dc:creator><pubDate>Fri, 29 Jul 2016 16:34:00 GMT</pubDate><content:encoded><![CDATA[<p><strong>Azure Table Storage</strong>:
It is "A NoSQL key-value store for rapid development using massive semi-structured datasets" as defined on Microsoft Azure site for <a href="https://azure.microsoft.com/en-us/services/storage/tables/">Table Storage</a>. <br>
And also</p>

<ul>
<li>It can store petabytes of structured data</li>
<li>supports flexible data schema</li>
<li>Made for enterprise</li>
</ul>

<p>The fact that we can store Structured data and not relational got me interested. I started reading about it online at Azure website and also several posts from <a href="https://twitter.com/julielerman">Julie Lerman</a>. One of the posts that I found interesting and informative was by Julie Lerman. And I started writing down notes, following is what I have observed from it.</p>

<p>Relational databases have various tables, each containing a predefined set of columns, one or more of which are typically designated as identity keys. Tables use these keys to define relationships among one another.</p>

<p>Azure Table storage, on the other hand, seems a bit mysterious to those of us who are so used to working with relational databases</p>

<p><em>Storing Data for Efficient Retrieval and Persistence</em></p>

<ul>
<li>By design, Azure Table services provides the potential to store enormous amounts of data, while enabling efficient access and persistence</li>
<li>We just have to deal with the data and not to worry about - constraints, view, indices, relationships and stored procedures.</li>
<li>Table Storage uses keys that enable efficient querying - <strong>"Partition Key"</strong></li>
<li>This key is also used for load balancing if table storage service decides to spread the data over multiple servers.</li>
<li>This doesn't have a specified schema.</li>
<li><strong>It is a structured container of rows, which doesn’t care what a row actually looks like.</strong></li>
<li>We (It) can store rows with varying structures in a single table.</li>
</ul>

<p><strong>It All Begins with Your Domain Classes</strong></p>

<ul>
<li>Traditionaly with databases we define a table, and particular structure, and specific columns and data type for each column and relationships with other tables.</li>
<li>With Azure table services, <strong>we don’t design a database</strong>, but <strong>just design our classes</strong>. We define the classes and a <em>Container</em> (TABLE) that one or more classes belong to.Then we save those instantiated objects to store as rows.</li>
<li><strong>Imp</strong>: each class must have 3 properties that are critical in how Table service do the job.
<ul><li>PartitionKey - string</li>
<li>RowKey - string</li>
<li>TimeStamp</li></ul></li>
<li>Defining PartitionKey and RowKey is a challenge, to get the best balance of query and transaction efficiency. For more information you can refer to PDC09 session “Azure Tables and Queues Deep Dive”</li>
</ul>

<p><strong>PartitionKeys and RowKeys Drive Performance and Scalability</strong></p>

<ul>
<li>The strings partitionKey and RowKey properties work as an index for the table.</li>
<li>Together these properties also provide uniqueness. Act as a primary key for a row. And hence the challenge of getting the combination right.</li>
<li>Each table in the entity mush have a <strong>unique PartitionKey/RowKey combination</strong></li>
<li>More than querying, ParitionKey is also used to Partition tables. Provides load balancing and scalability.</li>
</ul>

<p><strong>Digging Deeper into Partition Keys and Querying</strong></p>

<ul>
<li>Queries to azure tables from .NET framework uses <em>LINQ to REST</em>.</li>
<li>The context is derived from <em>WCF Data Service</em> (System.Data.Services.DataServiceContext).</li>
<li>The BIG difference between querying ODATA (returned by WCF data services) and querying Azure table storage is that <strong>string functions are not supported</strong>.</li>
<li>String.CompareTo can be used to search part of a string.</li>
</ul>

<p><strong>Parallel Querying for Full Table Scans</strong></p>

<ul>
<li>If we were to scan through the entire table, and if it’s a large table azure can only return 1000 rows or process for 5 seconds.</li>
<li>Azure returns those rows with a "continuation key" and go back to get more rows. This can be a tedious synchronous process.</li>
<li>Instead : we can build the query first, by iterating through the known list of categories and build a query and then send off those queries to run in parallel.</li>
<li>More design considerations for querying
<ul><li>In addition to Partition Key, Row key property defines uniqueness within a table for each row.</li>
<li>A GUID would serve the purpose but cannot help us in performing a search or sorting etc.</li>
<li>In this case we can use a combination of values. This combination of values can also help us in sorting the data, but if the application is not completely searching or sorting on those values, we can always go ahead and use a GUID in the combination.</li></ul></li>
</ul>

<p><strong>Rethinking Relationships</strong></p>

<ul>
<li>Since there is no relationships within the database tables (containers), the code is responsible, which can impact on how the queries or updates are done.</li>
<li>If we were to store data across multiple tables we cannot have transacted commands, we use the Azure Table store unique capability of storing multiple rows with varying schema in a single table.</li>
<li>We can use the PartitionKey to link those two or more tables within one row and use the RowKey to separate within.
<ul><li>Ex: saving contact and address info in one table, partitionKey can be common between these two but RowKey can separate those two entities within one table row.</li>
<li>This common PartitionKey ensures that the row will always stay together to take advantage of a feature called "<strong>Entity Group Transactions (EGT)</strong>".</li>
<li>This allows a single operation to carry out a transaction between multiple entities with same PartitionKey.</li>
<li>One other feature is that we can perform an update on all entities within EGT with one transaction query.</li></ul></li>
</ul>

<p><strong>References</strong></p>

<ul>
<li>Article by <a href="https://twitter.com/julielerman">Julie Lerman</a> <a href="https://msdn.microsoft.com/en-us/magazine/ff796231.aspx">Data Points - Microsoft Azure Table Storage – Not Your Father’s Database</a></li>
<li>Julie's blog about all data <a href="http://thedatafarm.com/">The Data Farm</a></li>
<li>Windows Azure <a href="https://azure.microsoft.com/en-us/services/storage/tables/">Table Storage</a></li>
</ul>

<p>A Big THANK YOU to Julie Lerman for all her work on all DATA. Please check out her blog mentioned above and also please follow her on Twitter.</p>

<p>Thank You <br>
Vijaya Malla. <br>
<a href="https://twitter.com/vijayamalla">@vijayamalla</a></p>]]></content:encoded></item></channel></rss>