<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>tin oscillator</title>
    <description>Software development is about sharing ideas; bridging the innner and outer worlds.
</description>
    <link>http://blog.tintoy.io/</link>
    <atom:link href="http://blog.tintoy.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Fri, 30 Mar 2018 05:09:37 +0000</pubDate>
    <lastBuildDate>Fri, 30 Mar 2018 05:09:37 +0000</lastBuildDate>
    <generator>Jekyll v3.4.3</generator>
    
      <item>
        <title>Kubernetes-native configuration with .NET Core</title>
        <description>&lt;p&gt;Traditionally, containerised applications have gotten their configuration from environment variables or configuration files mounted into the container. But since containers (including their environment variables and mounts) are effectively immutable, changing the configuration requires that the container is re-created.&lt;/p&gt; &lt;p&gt;For static configuration, this is fine, but for dynamic configuration you’re better off using something like &lt;a href=&quot;https://www.consul.io/api/kv.html&quot;&gt;Consul K/V&lt;/a&gt; or a database for your configuration data.&lt;/p&gt; &lt;p&gt;And if you’re hosting your application in Kubernetes, you now have an additional option :-) &lt;!-- more --&gt;&lt;/p&gt; &lt;h3 id=&quot;kubernetes-configuration-resources&quot;&gt;Kubernetes configuration resources&lt;/h3&gt; &lt;p&gt;Kubernetes provides 2 primary mechanisms for configuring applications:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;ConfigMaps&lt;/li&gt; &lt;li&gt;Secrets&lt;/li&gt; &lt;/ul&gt; &lt;h4 id=&quot;configmap&quot;&gt;ConfigMap&lt;/h4&gt;...</description>
        <pubDate>Fri, 30 Mar 2018 00:00:00 +0000</pubDate>
        <link>http://blog.tintoy.io/2018/03/kubernetes-native-config-with-netcore/</link>
        <guid isPermaLink="true">http://blog.tintoy.io/2018/03/kubernetes-native-config-with-netcore/</guid>
        
        
        <category>Kubernetes</category>
        
        <category>.NET Core</category>
        
        <category>ASP.NET Core</category>
        
      </item>
    
      <item>
        <title>How does Intellisense work?</title>
        <description>&lt;h2 id=&quot;what-is-intellisense&quot;&gt;What is Intellisense?&lt;/h2&gt; &lt;p&gt;Many modern editors have features to make life easier when working code, markup, and other types of structured text. Collectively, Microsoft calls these features “Intellisense” and they include features such as quick-info and parameter-help tooltips, completions, go-to-definition, and many more.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;/assets/img/2017/intellisense-in-action.gif&quot; alt=&quot;VSCode intellisense in action&quot; /&gt;&lt;/p&gt; &lt;p&gt;Many of us use it every day, but have you ever wondered what’s going on behind the scenes to make it happen? &lt;!-- more --&gt;&lt;/p&gt; &lt;h2 id=&quot;first-stop-types-of-intellisense&quot;&gt;First stop: types of Intellisense&lt;/h2&gt; &lt;p&gt;Intellisense features can be roughly divided into 2 categories:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Contextual&lt;/strong&gt;&lt;br /&gt; Can include information from elsewhere, but...</description>
        <pubDate>Sat, 30 Sep 2017 00:00:00 +0000</pubDate>
        <link>http://blog.tintoy.io/2017/09/how-does-intellisense-work/</link>
        <guid isPermaLink="true">http://blog.tintoy.io/2017/09/how-does-intellisense-work/</guid>
        
        
        <category>Intellisense</category>
        
        <category>VS Code</category>
        
        <category>Language Service</category>
        
        <category>Parsing</category>
        
      </item>
    
      <item>
        <title>Exporting environment variables from Python to Bash</title>
        <description>&lt;p&gt;Environment variables are used almost everywhere, but they’re somewhat painful to deal with when you need to set them from something other than the current shell’s scripting language.&lt;/p&gt; &lt;p&gt;The problem is that each process has its own set of environment variables, and while these will be passed to child processes (when they’re launched), a child process can never affect its parent’s environment.&lt;/p&gt; &lt;p&gt;This is by design (the other way lies madness), but it does make it difficult to export environment variables whose values come (for example) from a Python script.&lt;/p&gt; &lt;p&gt;I recently had to write a Python script to parse...</description>
        <pubDate>Wed, 14 Jun 2017 01:24:00 +0000</pubDate>
        <link>http://blog.tintoy.io/2017/06/exporting-environment-variables-from-python-to-bash/</link>
        <guid isPermaLink="true">http://blog.tintoy.io/2017/06/exporting-environment-variables-from-python-to-bash/</guid>
        
        
        <category>Python</category>
        
        <category>Bash</category>
        
      </item>
    
      <item>
        <title>Building modules for PowerShell Core</title>
        <description>&lt;p&gt;&lt;a href=&quot;#building-a-binary-module&quot;&gt;Want to skip ahead to the sample module code?&lt;/a&gt;&lt;/p&gt; &lt;p&gt;As a developer I’ve long been a fan of Powershell; while there are other shells out there (such as &lt;a href=&quot;http://xon.sh/&quot;&gt;Xonsh&lt;/a&gt;) that can do similar things, I tend to keep coming back to PowerShell as an automation language on Windows. Not only does it have a relatively large library of modules available for automating almost every aspect of Windows and related technologies, but the language itself is also surprisingly sophisticated; take parameter sets, for example:&lt;/p&gt; &lt;p&gt;Cmdlets are a lot like functions; they take parameters, and return outputs. What uniquely identifies...</description>
        <pubDate>Sun, 19 Feb 2017 22:48:00 +0000</pubDate>
        <link>http://blog.tintoy.io/2017/02/building-modules-for-powershell-core/</link>
        <guid isPermaLink="true">http://blog.tintoy.io/2017/02/building-modules-for-powershell-core/</guid>
        
        
        <category>Powershell</category>
        
        <category>.NET Core</category>
        
      </item>
    
      <item>
        <title>Go: Generics? No. Amplified types? Yes!</title>
        <description>&lt;p&gt;I’ve spent a fair bit of time recently working on a Terraform provider for Dimension Data CloudControl. One of the bigger pain-points I’ve found is that for a system like Terraform (where schemas are really only known at runtime), you can’t avoid passing things around as &lt;code class=&quot;highlighter-rouge&quot;&gt;interface{}&lt;/code&gt;.&lt;/p&gt; &lt;h2 id=&quot;go-doesnt-do-generics&quot;&gt;Go doesn’t do generics&lt;/h2&gt; &lt;p&gt;Go seems to have managed to get along OK without generics, but the lack of them does make things a little inconvenient sometimes. For one thing, I find myself spending a lot of time writing code like this:&lt;/p&gt; &lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;x&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;getTags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span...</description>
        <pubDate>Thu, 08 Dec 2016 03:48:00 +0000</pubDate>
        <link>http://blog.tintoy.io/2016/12/go-arrays-amplified/</link>
        <guid isPermaLink="true">http://blog.tintoy.io/2016/12/go-arrays-amplified/</guid>
        
        
        <category>Go</category>
        
        <category>Generics</category>
        
        <category>Types</category>
        
      </item>
    
      <item>
        <title>Writing a Terraform provider (part 3)</title>
        <description>&lt;table&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;a href=&quot;../writing-a-terraform-provider&quot;&gt;Part 1&lt;/a&gt;&lt;/td&gt; &lt;td&gt;&lt;a href=&quot;../writing-a-terraform-provider-2&quot;&gt;Part 2&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Part 3&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;h2 id=&quot;acceptance-tests&quot;&gt;Acceptance tests&lt;/h2&gt; &lt;p&gt;As with any software that has dependencies on external systems, the question of how to write automated acceptance tests for a Terraform provider can be a little tricky (usually the systems you depend on are sufficiently complex that it’s not practical to mock them).&lt;/p&gt; &lt;p&gt;Although you might be able to get away with using a record / playback proxy to simulate remote APIs, these systems tend to be &lt;em&gt;very&lt;/em&gt; stateful and when you combine this with Terraform’s only-semi-deterministic ordering of commands to external...</description>
        <pubDate>Sun, 20 Nov 2016 05:18:00 +0000</pubDate>
        <link>http://blog.tintoy.io/2016/11/writing-a-terraform-provider-3/</link>
        <guid isPermaLink="true">http://blog.tintoy.io/2016/11/writing-a-terraform-provider-3/</guid>
        
        
        <category>Writing a Terraform provider</category>
        
        <category>Go</category>
        
      </item>
    
      <item>
        <title>Writing a Terraform provider (part 2)</title>
        <description>&lt;table&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;a href=&quot;../writing-a-terraform-provider&quot;&gt;Part 1&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Part 2&lt;/td&gt; &lt;td&gt;&lt;a href=&quot;../writing-a-terraform-provider-3&quot;&gt;Part 3&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;h2 id=&quot;the-terraform-extensibility-model&quot;&gt;The Terraform extensibility model&lt;/h2&gt; &lt;p&gt;Terraform encapsulates functionality for communicating with various back-end systems into 2 basic abstractions: Providers and Provisioners.&lt;/p&gt; &lt;h3 id=&quot;providers&quot;&gt;Providers&lt;/h3&gt; &lt;p&gt;A provider is the component responsible for implementing one or more resource types by interacting with resources via APIs on behalf of Terraform (and then exposing this information in a format that Terraform can use).&lt;/p&gt; &lt;h4 id=&quot;external-providers&quot;&gt;External providers&lt;/h4&gt; &lt;p&gt;Providers such as our &lt;code class=&quot;highlighter-rouge&quot;&gt;ddcloud&lt;/code&gt; provider are not part of Terraform; they are not supported by Hashicorp, and must be installed alongside Terraform before...</description>
        <pubDate>Sun, 13 Nov 2016 02:43:00 +0000</pubDate>
        <link>http://blog.tintoy.io/2016/11/writing-a-terraform-provider-2/</link>
        <guid isPermaLink="true">http://blog.tintoy.io/2016/11/writing-a-terraform-provider-2/</guid>
        
        
        <category>Writing a Terraform provider</category>
        
        <category>Go</category>
        
      </item>
    
      <item>
        <title>Writing a Terraform provider (part 1)</title>
        <description>&lt;table&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Part 1&lt;/td&gt; &lt;td&gt;&lt;a href=&quot;../writing-a-terraform-provider-2&quot;&gt;Part 2&lt;/a&gt;&lt;/td&gt; &lt;td&gt;&lt;a href=&quot;../writing-a-terraform-provider-3&quot;&gt;Part 3&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;A couple of months ago, I started writing a &lt;a href=&quot;https://github.com/DimensionDataResearch/dd-cloud-compute-terraform&quot;&gt;provider&lt;/a&gt; for &lt;a href=&quot;https://terraform.io&quot;&gt;Terraform&lt;/a&gt; (a declarative configuration-management tool for infrastructure).&lt;/p&gt; &lt;p&gt;The goal was to get Terraform talking to &lt;a href=&quot;https://docs.mcp-services.net/display/DEV/Welcome+to+the+CloudControl+documentation+portal&quot;&gt;Dimension Data CloudControl&lt;/a&gt;, the control plane for our cloud compute facilities (the Managed Cloud Platform, or MCP).&lt;/p&gt; &lt;p&gt;As it turns out, you need to put a fair bit of thought into the design of your driver.&lt;/p&gt; &lt;h2 id=&quot;terraforms-conceptual-model&quot;&gt;Terraform’s conceptual model&lt;/h2&gt; &lt;p&gt;In my opinion one of the best design choices made by Hashicorp, when they created Terraform, was...</description>
        <pubDate>Sat, 12 Nov 2016 10:18:00 +0000</pubDate>
        <link>http://blog.tintoy.io/2016/11/writing-a-terraform-provider/</link>
        <guid isPermaLink="true">http://blog.tintoy.io/2016/11/writing-a-terraform-provider/</guid>
        
        
        <category>Writing a Terraform provider</category>
        
        <category>Go</category>
        
      </item>
    
      <item>
        <title>New role at work</title>
        <description>&lt;p&gt;Wow. Just… wow. It’s been &lt;a href=&quot;../stay-tuned&quot;&gt;more than a year&lt;/a&gt; since my last post. I have no idea how the time got away from me.&lt;/p&gt; &lt;p&gt;In the end, this was what drove me to seek a new role at work. So I’m no longer running our platform team, but am instead now responsible for driving our &lt;a href=&quot;https://github.com/DimensionDataResearch/&quot;&gt;open-source projects&lt;/a&gt;. I can honestly say that I’ve gone from dreading each day of work to loving my job :)&lt;/p&gt; &lt;p&gt;The best things about my new role:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Multi-language&lt;/li&gt; &lt;li&gt;Multi-platform&lt;/li&gt; &lt;li&gt;Getting to engage with the broader community&lt;/li&gt; &lt;li&gt;Focus is on invention / innovation;...</description>
        <pubDate>Fri, 11 Nov 2016 22:53:00 +0000</pubDate>
        <link>http://blog.tintoy.io/2016/11/new-role/</link>
        <guid isPermaLink="true">http://blog.tintoy.io/2016/11/new-role/</guid>
        
        <category>announce</category>
        
        
      </item>
    
      <item>
        <title>Modelling concurrency in Akka.NET</title>
        <description>&lt;p&gt;As a toolkit, Akka is useful for several reasons. In this series, the primary focus will be on how it can be used to model concurrency. &lt;!--more--&gt;&lt;/p&gt; &lt;p&gt;This is the second in of a series of posts on Akka.NET and my experience of using it to re-implement one of the core parts of my employer’s platform. You can find the other parts here:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;../2016-03-10-adventures-with-akka&quot;&gt;Part 1 - Adventures with Akka.NET&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;h4 id=&quot;the-actor-model&quot;&gt;The actor model&lt;/h4&gt; &lt;p&gt;Akka is based on &lt;a href=&quot;https://en.wikipedia.org/wiki/Actor_model&quot;&gt;the actor model&lt;/a&gt;. Without plagiarising Wikipedia too deeply, here’s a summary of the salient points:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;An actor is...</description>
        <pubDate>Sun, 20 Mar 2016 22:09:31 +0000</pubDate>
        <link>http://blog.tintoy.io/2016/03/modelling-concurrency-in-akka/</link>
        <guid isPermaLink="true">http://blog.tintoy.io/2016/03/modelling-concurrency-in-akka/</guid>
        
        
        <category>Akka</category>
        
        <category>Architecture</category>
        
        <category>DDCloud</category>
        
      </item>
    
  </channel>
</rss>
