<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Posts on Voltaicforge</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/post/</link>
        <description>Recent content in Posts on Voltaicforge</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-au</language>
        <lastBuildDate>Sat, 17 Jun 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://6e2dbc8c.voltaicforge.pages.dev/post/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Neovim setup for better writing</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/</link>
        <pubDate>Sat, 17 Jun 2023 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/nvim-zen-mode.png" alt="Featured image of post Neovim setup for better writing" /&gt;&lt;h1 id=&#34;setting-up-nvim-for-writing&#34;&gt;Setting up nvim for writing&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;ve been getting into using nvim a lot of late, and thus wanted to integrate it well into my website workflow.&lt;/p&gt;
&lt;p&gt;One fault I&amp;rsquo;ve seen in my older posts during my redesign was some spelling mistakes and poor grammar. I used to write in other editors and then copy &amp;amp; paste into Grammarly, which was cumbersome. Of course, this meant at times I would either forget or not be bothered to do so.&lt;/p&gt;
&lt;p&gt;The other thing I used to find is because of how cumbersome it was to write I ended up not bothering to write.&lt;/p&gt;
&lt;p&gt;So the goal of any new setup needed to be an easy as possible workflow for writing and getting the post to GitHub, and build in spell/grammar checking.&lt;/p&gt;
&lt;h1 id=&#34;better-language-with-ltex-ls-ltex-extra-and-language-tools&#34;&gt;Better language with ltex-ls, ltex-extra, and language-tools&lt;/h1&gt;
&lt;p&gt;As I was already running a &lt;a class=&#34;link&#34; href=&#34;https://languagetool.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;language-tools&lt;/a&gt; docker instance in my cluster I was keen to utilise it as well, over sending my data out to another website for review.
I found &lt;a class=&#34;link&#34; href=&#34;https://www.google.com/search?q=ltex-ls&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ltex-ls&lt;/a&gt; a good candidate for integrating spell/grammar checking, so I added it to my &lt;a class=&#34;link&#34; href=&#34;https://www.lazyvim.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Lazyvim&lt;/a&gt; config.&lt;/p&gt;
&lt;p&gt;After some fiddling with it, I found that I wasn&amp;rsquo;t able to add Neovim&amp;rsquo;s default additional dictionary words to it—the docs show its able to load an external file for user added words. However, this isn&amp;rsquo;t functional in &lt;code&gt;ltex-ls&lt;/code&gt;. You can make a workaround by running lua to load the nvim user dictionary words, then pass them into the model. This doesn&amp;rsquo;t reload unless you restart nvim, which can be a tad annoying as it adding a word doesn&amp;rsquo;t remove the error until you restart nvim.&lt;/p&gt;
&lt;p&gt;Using &lt;code&gt;ltex-extra&lt;/code&gt; provides a wrapper to enable some of these functions and adds code actions. I was able to set up my nvim directory as the location for user added words, and it loaded this dictionary at load/new words being added.&lt;/p&gt;
&lt;p&gt;So now, a &lt;code&gt;[d&lt;/code&gt; or &lt;code&gt;]d&lt;/code&gt; takes me to the next diagnostic, &lt;code&gt;&amp;lt;leader&amp;gt;cd&lt;/code&gt; will show me a popup with the diagnostic text, and &lt;code&gt;&amp;lt;leader&amp;gt;ca&lt;/code&gt; brings up code actions with proposed fixes or the ability to add words to the dictionary. &lt;code&gt;&amp;lt;leader&amp;gt;sd&lt;/code&gt; will bring all document diagnostics in a telescope window.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/telescope-diagnostics.png&#34;
  width=&#34;1511&#34;
  height=&#34;802&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/telescope-diagnostics_hu9852f18669cf3da99185ee06d0a1d677_223545_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/telescope-diagnostics_hu9852f18669cf3da99185ee06d0a1d677_223545_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Telescope diagnostics showing a number of grammar and spelling errors&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;188&#34;
    data-flex-basis=&#34;452px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;First to add it in as a requirement for &lt;code&gt;Mason&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;~/.config/nvim/lua/plugins/lsp.lua&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;#34;williamboman/mason.nvim&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  opts = function(_, opts)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    vim.list_extend(opts.ensure_installed, {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;stylua&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;selene&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;luacheck&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;shellcheck&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;prettier&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;shfmt&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;black&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;isort&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;flake8&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+     &amp;#34;ltex-ls&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  end,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then to set it up in &lt;code&gt;nvim-lspconfig&lt;/code&gt;
&lt;em&gt;~/.config/nvim/lua/plugins/lsp.lua&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;neovim/nvim-lspconfig&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    opts = {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      ---@type lspconfig.options
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      servers = {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+       ltex = {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+         on_attach = function(client, bufnr)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+           print(&amp;#34;Loading ltex from ltex_extra&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+           require(&amp;#34;ltex_extra&amp;#34;).setup({
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             init_check = true,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             load_langs = { &amp;#34;en-AU&amp;#34; }, -- table &amp;lt;string&amp;gt; : language for witch dictionaries will be loaded
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             log_level = &amp;#34;error&amp;#34;, -- string : &amp;#34;none&amp;#34;, &amp;#34;trace&amp;#34;, &amp;#34;debug&amp;#34;, &amp;#34;info&amp;#34;, &amp;#34;warn&amp;#34;, &amp;#34;error&amp;#34;, &amp;#34;fatal&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             path = vim.fn.expand(&amp;#34;~&amp;#34;) .. &amp;#34;/.config/nvim/spell/&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+           })
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+         end,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+         settings = {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+           ltex = {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             completionEnabled = true,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             statusBarItem = true,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             languageToolHttpServerUri = &amp;#34;https://language-tools.trux.dev/&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             checkFrequency = &amp;#34;save&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             language = &amp;#34;en-AU&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             additionalRules = {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+               enablePickyRules = true,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+           },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+         },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+       },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;        ansiblels = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        bashls = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        dockerls = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        html = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        gopls = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        marksman = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        pyright = {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          enabled = false,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        vimls = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      },
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      setup = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  },
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And once satisfied in the results, disable Lazyvim&amp;rsquo;s spellcheck, to avoid having two sets of spell checking occurring, especially as Neovim isn&amp;rsquo;t aware of the user words you are adding via &lt;code&gt;ltex-extra&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;~/.config/nvim/lua/config/autocmds.lua&lt;/em&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;-- Disable spelling
vim.api.nvim_del_augroup_by_name(&amp;#34;lazyvim_wrap_spell&amp;#34;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This has given me solid grammar advice direct into neovim. Next steps for this would be to build a more custom docker with specific &lt;a class=&#34;link&#34; href=&#34;https://dev.languagetool.org/finding-errors-using-n-gram-data&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;n-gram&lt;/a&gt; data.&lt;/p&gt;
&lt;h1 id=&#34;zen-mode-with-zen-mode-and-twilight&#34;&gt;Zen mode with zen-mode and twilight&lt;/h1&gt;
&lt;p&gt;While I have not had a lot of experience with zen mode editors, I do think this could also help me write, as I&amp;rsquo;m easily distracted. &lt;code&gt;zen-mode&lt;/code&gt; hides everything and just gives a reduced width view of just the text you are editing. &lt;code&gt;twilight&lt;/code&gt; dims everything on the screen except the current block you are working on, helping you focus on your current text.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/nvim-zen-mode.png&#34;
  width=&#34;1771&#34;
  height=&#34;463&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/nvim-zen-mode_hu3b6abfa980cefedeadc4ed60b9546684_53862_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/nvim-zen-mode_hu3b6abfa980cefedeadc4ed60b9546684_53862_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Neovim zen mode using zen-mode and twilight plugins&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;382&#34;
    data-flex-basis=&#34;918px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;~/.config/nvim/lua/plugins/misc.lua&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;folke/zen-mode.nvim&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;cmd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ZenMode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;opts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;plugins&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;gitsigns&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;tmux&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;kitty&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;font&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;+2&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;keys&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;leader&amp;gt;z&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;cmd&amp;gt;ZenMode&amp;lt;cr&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;desc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Zen Mode&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;-- twilight&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;folke/twilight.nvim&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;nvim-treesitter/nvim-treesitter&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
        </item>
        <item>
        <title>Website redesign with Hugo &amp; Cloudflare pages!</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2023/05/website-redesign-hugo-cf-workers/</link>
        <pubDate>Mon, 22 May 2023 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2023/05/website-redesign-hugo-cf-workers/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2023/05/website-redesign-hugo-cf-workers/new_site_nvim.png" alt="Featured image of post Website redesign with Hugo &amp; Cloudflare pages!" /&gt;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I wanted to give you a quick update about some changes I&amp;rsquo;ve made to my website. Previously, my site was built using Jekyll and hosted on GitHub Pages, but I&amp;rsquo;ve recently migrated it to a new platform: Hugo, powered by Cloudflare Pages. I wanted to take a moment to explain why I made this switch and how it benefits both me and you as a reader.&lt;/p&gt;
&lt;h2 id=&#34;reason-for-the-migration&#34;&gt;Reason for the Migration&lt;/h2&gt;
&lt;p&gt;While Jekyll and GitHub Pages served me well, I was looking for a more streamlined and efficient workflow for managing my site. After exploring various options, I decided to switch to Hugo, a static site generator, combined with Cloudflare Pages for hosting and delivery.&lt;/p&gt;
&lt;p&gt;Unfortunately, I found that Jekyll was somewhat slow at times and its site methodology required me to bastardise the template quite a bit, leading to it being somewhat painful to work with at times.
I just want to be able to add a new post, save and &lt;code&gt;git push&lt;/code&gt; it into the ether, with confidence it would be live shortly thereafter.&lt;/p&gt;
&lt;h2 id=&#34;benefits-of-hugo-and-cloudflare-pages&#34;&gt;Benefits of Hugo and Cloudflare Pages&lt;/h2&gt;
&lt;p&gt;The move to Hugo and Cloudflare Pages brings several advantages. Firstly, Hugo offers a simpler and faster site building process, allowing me to create and update content more efficiently.  Hugo being written in Go makes it quite a lot quicker than Jekyll&amp;rsquo;s Ruby pipeline (Pity Hugo isnt Rust&amp;hellip;)&lt;/p&gt;
&lt;p&gt;Cloudflare Pages, on the other hand, offer robust hosting capabilities and improved site delivery. With their global network of servers, my site now loads faster for readers around the world. The combination of Hugo and Cloudflare Pages ensures a seamless browsing experience with minimal downtime.  Cloudflare workers are free for small traffic sites, and has a build pipeline that scans this sites github repo, builds it with a worker immedaitly on push and the new site is live quite quickly.  I can also see a history of commits if I want to check a commit, and even build branches other main so I can adopt a branch -&amp;gt; push to dev -&amp;gt; check it looks OK -&amp;gt; PR for new post.&lt;/p&gt;
&lt;h2 id=&#34;cicd-workflows-and-automation&#34;&gt;CI/CD Workflows and Automation&lt;/h2&gt;
&lt;p&gt;One of the highlights of this migration is the implementation of strong CI/CD (Continuous Integration/Continuous Deployment) workflows. I&amp;rsquo;ve set up automated processes that handle tasks such as building, testing, and deploying my site whenever I make updates. This automation saves me time and ensures that the latest content is always available to you.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In summary, I&amp;rsquo;ve migrated my website from Jekyll/GitHub Pages to Hugo/Cloudflare Pages, aiming for a more efficient and optimized experience. The transition brings benefits like improved performance, streamlined workflows, and automated deployment. I hope you&amp;rsquo;ll enjoy the enhanced browsing experience, and I&amp;rsquo;m excited to continue sharing great content with you on this shiny new platform.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>DuckDNS with UDM Pro</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2022/12/duckdns-with-udmpro/</link>
        <pubDate>Sat, 31 Dec 2022 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2022/12/duckdns-with-udmpro/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2022/12/duckdns-with-udmpro/linux_stock.png" alt="Featured image of post DuckDNS with UDM Pro" /&gt;&lt;h2 id=&#34;duckdns-with-unifi-dream-machine&#34;&gt;DuckDNS with Unifi Dream Machine&lt;/h2&gt;
&lt;p&gt;I recently got a UDM Pro and have just managed to get DuckDNS working.&lt;/p&gt;
&lt;p&gt;There are many other suggestions on the internet, for using the webui with &amp;lsquo;dyndns&amp;rsquo; and a variety of settings that should work.
None did for me as of today, on UDM-Pro software version 1.11.0.&lt;/p&gt;
&lt;p&gt;UDM currently uses the software inadyn to provide its ddns capabilities—and it has more providers available that what is exposed in the WebUI.
To get it working I edited the &lt;code&gt;inadyn.conf&lt;/code&gt; manually via SSH.
(Google &lt;code&gt;UDM SSH Setup&lt;/code&gt; if you need to setup SSH access to your UDM)&lt;/p&gt;
&lt;p&gt;If there is no Dynamic DNS setup in the UDM WebUI it disables the servers, so for now I have created a dummy service in the UDM WebUI&lt;/p&gt;
&lt;p&gt;Once SSH&amp;rsquo;d into the UDM, check what config the file your UDM is running:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ps aux | grep inadyn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;12799&lt;/span&gt; root     /usr/sbin/inadyn -n -s -C -f /run/ddns-eth8-inadyn.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this case, my config file is located at &lt;code&gt;/run/ddns-eth8-inadyn.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Edit the file (using VI) and add a duckdns config block:
(VI by default doesn&amp;rsquo;t allow editing, press &lt;code&gt;i&lt;/code&gt; to enter &amp;lsquo;interactive&amp;rsquo; mode to turn it into a text editor)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;provider duckdns.org:2 {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    username         = &amp;lt;YOUR_TOKEN&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    password         = noPasswordForDuckdns
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    hostname         = &amp;lt;YOUR_DOMAIN&amp;gt;.duckdns.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Save and close. On VI, &lt;code&gt;ESC&lt;/code&gt; will exit interactive mode, then &lt;code&gt;:wq&lt;/code&gt; will &amp;lsquo;Write and Quit&amp;rsquo;&lt;/p&gt;
&lt;p&gt;This has successfully got me running with Duck on UDM—but hacky, and won&amp;rsquo;t be part of a backup&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Network UPS with Synology</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2021/02/synology-ups-network/</link>
        <pubDate>Sat, 06 Feb 2021 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2021/02/synology-ups-network/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2021/02/synology-ups-network/linux_stock.png" alt="Featured image of post Network UPS with Synology" /&gt;&lt;h2 id=&#34;network-ups-with-synology&#34;&gt;Network UPS with synology&lt;/h2&gt;
&lt;p&gt;Port 3493&lt;/p&gt;
&lt;p&gt;On proxmox, install nut-tools&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install nut
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Synology username and password for ups is:
Device: ups
Username: monuser
Password: secret&lt;/p&gt;
&lt;p&gt;Find and uncomment line and fill out details&lt;/p&gt;
&lt;h2 id=&#34;etcnutupsmonconf&#34;&gt;/etc/nut/upsmon.conf&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MONITOR ups@192.168.2.253 &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; monuser secret slave
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;etcnutnutconf&#34;&gt;/etc/nut/nut.conf&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MODE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;netclient
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note: Found on the synology in /usr/syno/etc/ups/upsd.user&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Ordbot Project added</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2019/08/ordbot-project/</link>
        <pubDate>Tue, 06 Aug 2019 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2019/08/ordbot-project/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2019/08/ordbot-project/ordbot_r2.jpg" alt="Featured image of post Ordbot Project added" /&gt;&lt;h1 id=&#34;ordbot-project&#34;&gt;Ordbot project&lt;/h1&gt;
&lt;p&gt;I have written a short post on the build and history of my Ordbot Hadron 3d printer.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s currently in pieces awaiting a complete overhaul after 6 years of service, which seemed like a good time to finially get around to putting up some posts on it.&lt;/p&gt;
&lt;p&gt;Check it out &lt;a class=&#34;link&#34; href=&#34;https://6e2dbc8c.voltaicforge.pages.dev/projects/ordbot/ordbot/&#34; &gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2019/08/ordbot-project/ordbot_r2.jpg&#34;
  width=&#34;1273&#34;
  height=&#34;843&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2019/08/ordbot-project/ordbot_r2_hu93acd033412f62c70cf0485b0873f624_142024_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2019/08/ordbot-project/ordbot_r2_hu93acd033412f62c70cf0485b0873f624_142024_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Ordbot Rev 2&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;151&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Setup pfSense for TPG NBN</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/</link>
        <pubDate>Sun, 13 Aug 2017 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/Code.jpg" alt="Featured image of post Setup pfSense for TPG NBN" /&gt;&lt;h2 id=&#34;setting-up-pfsense-for-tpg-nbn&#34;&gt;Setting up pfSense for TPG NBN&lt;/h2&gt;
&lt;p&gt;After much frustration, I have finially buggered off the terrible HG659 router that is provided with TPG NBN.&lt;/p&gt;
&lt;p&gt;I had significant trouble getting pfSense to connect to the NBN even using the details on their site. PPPoE should be reasonably simple, connect NBN box to pfSense WAN port, set to PPPoE and enter TPG username/password.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wrong!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After quite some time I found that they use a VLAN setting, and without it being set right it would not connect at all. Its not mentioned in their setting site, conspicuously.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/TPG_NBN_Settings.png&#34;
  width=&#34;1144&#34;
  height=&#34;985&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/TPG_NBN_Settings_hue4ec855828623b186629d811d939d102_88502_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/TPG_NBN_Settings_hue4ec855828623b186629d811d939d102_88502_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;TPG&amp;rsquo;s NBN settigns with no VLAN setting mentioned&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;116&#34;
    data-flex-basis=&#34;278px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;I got mine working once I set the WAN port to be on a VLAN 2.&lt;/p&gt;
&lt;p&gt;Create a new VLAN, under &lt;em&gt;Interface -&amp;gt; Assign -&amp;gt; VLANs -&amp;gt; Add&lt;/em&gt;. Setup on the WAN Interface (mine is &lt;code&gt;re0&lt;/code&gt;) and with a VLAN tag of &lt;code&gt;2&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/TPG_VLAN_2.png&#34;
  width=&#34;1055&#34;
  height=&#34;516&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/TPG_VLAN_2_hufe9d9acbe3576823b8e3bb303db8d0b1_53413_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/TPG_VLAN_2_hufe9d9acbe3576823b8e3bb303db8d0b1_53413_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;pfSense VLAN setting of 2 for TPG NBN&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;204&#34;
    data-flex-basis=&#34;490px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Add a PPP configuration under &lt;em&gt;Interface -&amp;gt; Assign -&amp;gt; PPP -&amp;gt; Add&lt;/em&gt;. Use Link type &lt;code&gt;PPPoE&lt;/code&gt;, Link Interface of the VLAN you set up before. Enter TPG username/password&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/pfSense_PPP_Config.png&#34;
  width=&#34;1436&#34;
  height=&#34;731&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/pfSense_PPP_Config_huae8eb4298e4b1e2f42d52ed0d43e2ec0_81919_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/pfSense_PPP_Config_huae8eb4298e4b1e2f42d52ed0d43e2ec0_81919_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;pfSense PPP configuration&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;196&#34;
    data-flex-basis=&#34;471px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;For WAN port, under &lt;em&gt;Interface -&amp;gt; WAN&lt;/em&gt;, ensure we have &lt;code&gt;PPPoE&lt;/code&gt; set for IP4 Configuration Type, and again your Username/Password&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/pfsense_TPG_WAN_Settings.png&#34;
  width=&#34;1485&#34;
  height=&#34;884&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/pfsense_TPG_WAN_Settings_hu61b0e9715d8c5917a80e590ec4076358_89508_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/pfsense_TPG_WAN_Settings_hu61b0e9715d8c5917a80e590ec4076358_89508_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;pfsense TPG WAN Settings&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;167&#34;
    data-flex-basis=&#34;403px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Then under &lt;em&gt;Interface -&amp;gt; Assign&lt;/em&gt;, set the WAN network port to the PPPOE of the VLAN setup above.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/pfSesne_TPG_Interface_Assignment.png&#34;
  width=&#34;1385&#34;
  height=&#34;386&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/pfSesne_TPG_Interface_Assignment_hu623f9a21e9fc52f8e5fbb92d6edca296_43125_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2017/08/setup-pfsense-for-tpg-nbn/pfSesne_TPG_Interface_Assignment_hu623f9a21e9fc52f8e5fbb92d6edca296_43125_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;pfSense TPG setting of WAN interface to VLAN&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;358&#34;
    data-flex-basis=&#34;861px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;You should now have a working NBN setup under pfSense, and that locked down modem can be thrown in the trash where it belongs!&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Homebrewing Again</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2017/07/homebrewing-again/</link>
        <pubDate>Thu, 20 Jul 2017 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2017/07/homebrewing-again/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2017/07/homebrewing-again/homebrew_fermenter.png" alt="Featured image of post Homebrewing Again" /&gt;&lt;h2 id=&#34;homebrewing-again&#34;&gt;Homebrewing again&lt;/h2&gt;
&lt;p&gt;After being inspired by a work colleague, I&amp;rsquo;ve decided to get back into homebrewing. I have actually done homebrewing for probably a combination of 2 years or so, but stopped due to moving state/house in the past and losing or giving away gear.&lt;/p&gt;
&lt;p&gt;After grabbing a bit of a starting kit and building a favorite recipe from memory, a Primrose Milk Stout is fermenting away in the server cupboard.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/07/homebrewing-again/homebrew_fermenter.png&#34;
  width=&#34;862&#34;
  height=&#34;1400&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/07/homebrewing-again/homebrew_fermenter_huea81569e5b574dc7a625955106d377da_1379818_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2017/07/homebrewing-again/homebrew_fermenter_huea81569e5b574dc7a625955106d377da_1379818_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Homebrewing fermenter brewing milk stout &#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;61&#34;
    data-flex-basis=&#34;147px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Unfortunately, its been a pain to get temperature control correct. This means that I think its time to finally build what I always wanted to build: a fermenting fridge.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m now eyeing off a legacy &lt;a class=&#34;link&#34; href=&#34;https://www.brewpi.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;BrewPi&lt;/a&gt; build, sans the fancy LCD controller and just using a Raspberry PI and a Arduino.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Setting up Dropbox and encryption in Linux</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/dropbox-encfs/</link>
        <pubDate>Sat, 25 Feb 2017 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/dropbox-encfs/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/dropbox-encfs/encrypted_encfs_dropbox.png" alt="Featured image of post Setting up Dropbox and encryption in Linux" /&gt;&lt;h2 id=&#34;premise&#34;&gt;Premise&lt;/h2&gt;
&lt;p&gt;Due to the fact that I now run Linux across my Homelab, Desktop and Laptop, I&amp;rsquo;ve been looking into keeping everything in sync.&lt;/p&gt;
&lt;p&gt;Dropbox is reasonably popular for this on Linux systems (outside of P2P sync), but the issues, of course, is security. My mantra is if you put it on the internet assume that everyone can see it, and you can never remove it.&lt;/p&gt;
&lt;p&gt;I wanted to use a Dropbox-style sync for a number of services (backup dotfiles, zim-wiki files, website code, etc). The intention was to be able to start something on the laptop, move to the desktop and be able to pick up where I left off.&lt;/p&gt;
&lt;h2 id=&#34;dropbox-install&#34;&gt;Dropbox install.&lt;/h2&gt;
&lt;p&gt;Installing Dropbox should be easy across most distributions from core repositories.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Debain
cd ~ &amp;amp;&amp;amp; wget -O - &amp;#34;https://www.dropbox.com/download?plat=lnx.x86_64&amp;#34; | tar xzf -
~/.dropbox-dist/dropboxd


# Arch
pacaur -S dropbox
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;setup-script&#34;&gt;Setup script&lt;/h2&gt;
&lt;p&gt;First, put your password in a file in your home directory, plaintext. We will pass this as an argument to the script, and ensure it has permissions to be read only by your user.&lt;/p&gt;
&lt;p&gt;You can modify the file location if you wish.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mkdir ~/.config/certificates/
echo &amp;#34;&amp;lt;password&amp;gt;&amp;#34; &amp;gt; ~/.config/certificates/encfs
chmod 0600 ~/.config/certificates/encfs
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then, create the script. Again, you can change the location.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;~/scripts/dropbox.sh&lt;/em&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cat ~/.config/certificates/encfs | encfs -S ~/Dropbox/encrypted/ ~/Private/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When called, this calls encfs, and supply the password by outputting the file created earlier into it.&lt;/p&gt;
&lt;p&gt;Whilst there are a number of places we could call this upon startup to ensure its loaded upon startup, I chose the lazy option and just had it in my Cinnamon startup apps.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/dropbox-encfs/add_startup_program_cinnamon.png&#34;
  width=&#34;389&#34;
  height=&#34;199&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/dropbox-encfs/add_startup_program_cinnamon_hu92e810ae71172cb38361bcb0096ba3f9_14047_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/dropbox-encfs/add_startup_program_cinnamon_hu92e810ae71172cb38361bcb0096ba3f9_14047_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Add Startup Program Cinnamon&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;195&#34;
    data-flex-basis=&#34;469px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Now, place your files in the &lt;code&gt;~Private folder&lt;/code&gt;. They will be encryped into the &lt;code&gt;~/Dropbox/encrypted/&lt;/code&gt; folder. Repead on another computer to have shared sync.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Stop Chromium asking for keyring unlock</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/chromium-gnome-keyring/</link>
        <pubDate>Sat, 25 Feb 2017 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/chromium-gnome-keyring/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/chromium-gnome-keyring/chromium-gnome-banner.png" alt="Featured image of post Stop Chromium asking for keyring unlock" /&gt;&lt;h2 id=&#34;removing-keychain-login-from-chormium&#34;&gt;Removing keychain login from Chormium&lt;/h2&gt;
&lt;p&gt;I recently started using (sigh) Chromium over Firefox due to very slow webgl performance (and general overall faster performance)&lt;/p&gt;
&lt;p&gt;However, annoyingly it asks for the Gnome keychain to be unlocked upon launch.&lt;/p&gt;
&lt;p&gt;A simple fix I found is to simply change the shortcut to&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;chromium --password-store=basic
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will drop chromium to a basic password store machanism, so it doesn&amp;rsquo;t use gnome-keyring&lt;/p&gt;
&lt;p&gt;Of course, this assumes your not wanting to use the features of chromium to store login details into the OS&amp;rsquo;s password manager.
However, since you should be using a service like KeePass or LastPass to manage passwords securely, this shouldn&amp;rsquo;t be an issue.&lt;/p&gt;
&lt;p&gt;I canged my Cinnamon settings by selecting &amp;lsquo;Open Editor&amp;rsquo; in the Menu options in settings, then finding the chromium shortcut. I then added the &amp;lsquo;&amp;ndash;password-store=basic&amp;rsquo; to the shortcut.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/chromium-gnome-keyring/chromium-password-basic.gif&#34;
  
  
  
  loading=&#34;lazy&#34;
  
    alt=&#34;Stopping chromium keyring unlock warning&#34;
  
  
&gt;
&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Guide added for Steam Emulation</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/emulators-in-steam/</link>
        <pubDate>Sun, 05 Feb 2017 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/emulators-in-steam/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/emulators-in-steam/steam_bigpicture_retrogaming.png" alt="Featured image of post Guide added for Steam Emulation" /&gt;&lt;h3 id=&#34;new-guide-added-for-steam-emulation&#34;&gt;New guide added for steam emulation&lt;/h3&gt;
&lt;p&gt;I have added a tutorial for an excelent, tidy setup for running all your retro consoles via Big Picture mode.&lt;/p&gt;
&lt;p&gt;Check it out &lt;a class=&#34;link&#34; href=&#34;https://6e2dbc8c.voltaicforge.pages.dev/guides/steam_emulation/premise/&#34; &gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/emulators-in-steam/steam_bigpicture_retrogaming.png&#34;
  width=&#34;1400&#34;
  height=&#34;809&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/emulators-in-steam/steam_bigpicture_retrogaming_hu6a5239f7bcbae2211d9fb1634daf10cc_1110453_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2017/02/emulators-in-steam/steam_bigpicture_retrogaming_hu6a5239f7bcbae2211d9fb1634daf10cc_1110453_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Steam Big Picture list with many super nintendo games&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;173&#34;
    data-flex-basis=&#34;415px&#34;
  
&gt;
&lt;/p&gt;
</description>
        </item>
        <item>
        <title>SCP upload to Octoprint on Linux</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2017/01/scp-upload-octopi/</link>
        <pubDate>Thu, 19 Jan 2017 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2017/01/scp-upload-octopi/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2017/01/scp-upload-octopi/octopi.jpg" alt="Featured image of post SCP upload to Octoprint on Linux" /&gt;&lt;h2 id=&#34;uploading-automatically-to-octoprint-via-bash--scp&#34;&gt;Uploading automatically to Octoprint via bash &amp;amp; scp&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve been using &lt;a class=&#34;link&#34; href=&#34;https://www.simplify3d.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Simplify3d&lt;/a&gt; for my 3D printing, and &lt;a class=&#34;link&#34; href=&#34;http://octoprint.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Octoprint&lt;/a&gt;. Octoprint has a very nice web interface, and between it and the advancement in slicers, its been great to not have to slice, carry SD card over to the printer, load via the LCD, etc.&lt;/p&gt;
&lt;p&gt;However, I&amp;rsquo;ve always wanted a auto-upload feature. I&amp;rsquo;ve chosen to do it via setting up ssh keys for logging into the Octoprint server, and using &lt;code&gt;scp&lt;/code&gt; to upload the file automatically.&lt;/p&gt;
&lt;p&gt;I did get the idea from a post at &lt;a class=&#34;link&#34; href=&#34;https://forum.simplify3d.com/viewtopic.php?f=23&amp;amp;t=1924&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://forum.simplify3d.com/viewtopic.php?f=23&amp;amp;t=1924&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve setup ssh keys for passwordless entry to my Octoprint server (Google SSH keys for more info, or perhaps check out the &lt;a class=&#34;link&#34; href=&#34;https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Digital ocean FAQ&lt;/a&gt; )&lt;/p&gt;
&lt;h4 id=&#34;local-pc&#34;&gt;Local PC&lt;/h4&gt;
&lt;p&gt;When &lt;code&gt;ssh-keygen&lt;/code&gt; asks for input I entered through it to accept defaults, and no passphrase.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;nat@nat-desktop ~ $ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nat/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/nat/.ssh/id_rsa.
Your public key has been saved in /home/nat/.ssh/id_rsa.pub.
The key fingerprint is:
&amp;lt;redacted&amp;gt;
The key&amp;#39;s randomart image is:
&amp;lt;redacted&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We now have a private key in &lt;code&gt;~/.ssh/id_rsa&lt;/code&gt; and a public key in &lt;code&gt;~/.ssh/id_rsa.pub&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I logged into the remote PC (Octoprint) to copy the public key. I chose to open up the &lt;code&gt;~/.ssh/id_rsa.pub&lt;/code&gt; file in &lt;code&gt;nano&lt;/code&gt; and copy it via clipboard, but you could use &lt;code&gt;scp&lt;/code&gt;, &lt;code&gt;ftp&lt;/code&gt; or any other method.&lt;/p&gt;
&lt;h4 id=&#34;remote-pc&#34;&gt;Remote PC&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pi@octopi:~ $ nano .ssh/authorized_keys

&amp;lt;append contents of local ~/.ssh/id_rsa.pub file&amp;gt;

pi@octopi:~ $ chmod 700 .ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we should be OK to login with no password to the Octoprint server&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;nat@nat-desktop ~ $ ssh pi@192.168.1.9

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Jan 19 11:52:32 2017 from 192.168.1.7
pi@octopi:~ $
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;blockquote class=&#34;book-hint note&#34;&gt;
  &lt;b&gt;Note:&lt;/b&gt; You can setup bookmarks for &lt;code&gt;ssh&lt;/code&gt; via &lt;code&gt;ssh_config&lt;/code&gt;. This enables you to quickly ssh into servers quickly without remembering IP&amp;rsquo;s or usernames, especially coupled with ssh_keys for password less entry. Check out &lt;code&gt;man ssh_config&lt;/code&gt; or Google for more info.
&lt;/blockquote&gt;

Once that is setup, we can easily &lt;code&gt;scp&lt;/code&gt; the file to Octoprint. Setup a bash file with the one liner below.&lt;/p&gt;
&lt;h4 id=&#34;scriptsputpish&#34;&gt;~/scripts/putpi.sh&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;scp &amp;#34;$1&amp;#34; pi@192.168.1.9:.octoprint/uploads/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Remember to &lt;code&gt;chmod +x putpi.sh&lt;/code&gt; to ensure the file is executable. Also, substitute the IP above for your Octoprint&amp;rsquo;s IP (or hostname).&lt;/p&gt;
&lt;p&gt;We can ensure it works by running it manually.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;nat@nat-desktop ~/scripts $ ./putpi.sh ~/Documents/3dPrinting/gcode/nat.gcode
nat.gcode                                       100% 1477KB   5.9MB/s   00:00
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And refreshing the file list on the octoprint will make it appear.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/01/scp-upload-octopi/octoprint_upload_refresh.png&#34;
  width=&#34;300&#34;
  height=&#34;491&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/01/scp-upload-octopi/octoprint_upload_refresh_huaf6c1fb89301c0b7b2e1c1c47711bb46_35014_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2017/01/scp-upload-octopi/octoprint_upload_refresh_huaf6c1fb89301c0b7b2e1c1c47711bb46_35014_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Octoprint refreshing webui&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;61&#34;
    data-flex-basis=&#34;146px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Now, to automate the upload from Simplify3D. Select your 3D Printers process settings is selected in the list box to the left and go to the &amp;lsquo;Edit process settings&amp;rsquo; tab at the lower left corner of the main screen. Ensure the advanced settings are visible in the box, if not click the &amp;lsquo;Show Advanced&amp;rsquo; Button.&lt;/p&gt;
&lt;p&gt;Here, select the &amp;lsquo;Scripts&amp;rsquo; tab, and in the bottom of the box underneath &amp;lsquo;Post Processing&amp;rsquo; and &amp;lsquo;Additional terminal commands for post processing&amp;rsquo; enter the command to call your bash script.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;~/scripts/putpi.sh [output_filepath]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/01/scp-upload-octopi/simplify3d_scp_upload_to_octoprint.png&#34;
  width=&#34;868&#34;
  height=&#34;748&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2017/01/scp-upload-octopi/simplify3d_scp_upload_to_octoprint_hu4b29bf6144e0bb1524d17268770f3814_71889_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2017/01/scp-upload-octopi/simplify3d_scp_upload_to_octoprint_hu4b29bf6144e0bb1524d17268770f3814_71889_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Simplify3D script for scp upload to Octoprint&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;116&#34;
    data-flex-basis=&#34;278px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Then when you save the gcode in Simplify3D, it will call the script and upload the resulting GCode to Octoprint! Just refresh the file, review and print.
&lt;blockquote class=&#34;book-hint note&#34;&gt;
  &lt;b&gt;Note:&lt;/b&gt; You need to actually save the gcode file somewhere on your computer before the post processing (and thus file upload) will occur.
&lt;/blockquote&gt;
&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Fixing Intel Hardware decoding on Linux (Ubuntu)</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/12/steam-vaapi-fix-linux/</link>
        <pubDate>Fri, 02 Dec 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/12/steam-vaapi-fix-linux/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/12/steam-vaapi-fix-linux/linux_stock.png" alt="Featured image of post Fixing Intel Hardware decoding on Linux (Ubuntu)" /&gt;&lt;h2 id=&#34;fix-for-lack-of-hardware-decoding-on-linux&#34;&gt;Fix for lack of hardware decoding on Linux&lt;/h2&gt;
&lt;p&gt;So I&amp;rsquo;ve switched to Linux recently (Mint 18). I realised that since I was moving to Steam in-home streaming, I could move my clunky desktop tower out into the living room/server closet and run Linux on my desktop. The only reason I&amp;rsquo;ve kept Windows running for so long was for gaming needs (and not wanting to fiddle around getting games to work on Linux)&lt;/p&gt;
&lt;p&gt;Thankfully, with Steams push into the Linux front and throwing its weight behind the Debian side, gaming in Linux is a thing. But it only supports about ~30% of my library, so my gaming PC needs to stay Windows.&lt;/p&gt;
&lt;p&gt;After years of running Debian servers at home (and Freenas for years before that) linux feels more comfortable than Windows. So I build a new mini-ITX, Intel i5 PC for desktop use, and moved the tower out into the living room.&lt;/p&gt;
&lt;p&gt;Unfortunately, my experience with steam streaming was jelly mouse! A quick check with setting &amp;lsquo;Display Performance information&amp;rsquo; in the in home streaming client area revealed it was not using hardware acceleration. It was using &amp;rsquo;libavcodec&amp;rsquo;, which is a software decoder.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/12/steam-vaapi-fix-linux/Steam_Advanced_Client_Options.png&#34;
  width=&#34;440&#34;
  height=&#34;444&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/12/steam-vaapi-fix-linux/Steam_Advanced_Client_Options_hu0ab6acc567b404620bf68a550e35a0e0_28316_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/12/steam-vaapi-fix-linux/Steam_Advanced_Client_Options_hu0ab6acc567b404620bf68a550e35a0e0_28316_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Seam advanced client menu&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;99&#34;
    data-flex-basis=&#34;237px&#34;
  
&gt;

&lt;blockquote class=&#34;book-hint note&#34;&gt;
  &lt;b&gt;Note:&lt;/b&gt; Check the &amp;lsquo;Display performance information box&amp;rsquo; to enable perfomance info, and press F6 ingame to check. Also, ensure you have &amp;lsquo;Enable Hardware decoding&amp;rsquo; checked on the client.
&lt;/blockquote&gt;
&lt;/p&gt;
&lt;p&gt;This introduced a bit of lag in the decoding (&amp;gt;50ms) which I could definitely notice.&lt;/p&gt;
&lt;h2 id=&#34;the-fix&#34;&gt;The fix&lt;/h2&gt;
&lt;p&gt;After much googling, the problem is that Steam on Ubuntu is bundled with its own libraries for VA-API. Unfortunately, it is bundled with old drivers that no longer work/are broken. The solution is to download the drivers from Ubuntu/your distros repo, remove Steams copy and &lt;code&gt;ln&lt;/code&gt; (symlink) them to the host&amp;rsquo;s updated drivers.&lt;/p&gt;
&lt;p&gt;Simply put, drop into terminal and &lt;code&gt;apt&lt;/code&gt; the below:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install i965-va-driver:i386
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install libva1:i386
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install libva-x11-1:i386
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install libva-glx1:i386
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will install the proper drivers into &lt;code&gt;/usr/lib/i386-linux-gnu&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Remove the old drivers from Steams folder (or &lt;code&gt;mv&lt;/code&gt; them if you prefer)&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;rm ~/.steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libva*
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The last step is to symlink these to Steam&amp;rsquo;s local folder. You can &lt;code&gt;ln -s&lt;/code&gt; if you wish, but a kind folk has created a bash script to do it for us!&lt;/p&gt;
&lt;p&gt;Grab the gist below (kindly created by Github user &lt;a class=&#34;link&#34; href=&#34;https://gist.github.com/benleov&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Benleov&lt;/a&gt;). Alternatively, &lt;code&gt;wget&lt;/code&gt; it with the below shell command:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;wget https://gist.githubusercontent.com/benleov/dc44ca9505a807e7dcc9/raw/673a82ff3d2356d27c9355088f58335bc89ab46b/fix_steam_links &amp;amp;&amp;amp; chmod +x fix_steam_links
./fix_steam_links
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote class=&#34;book-hint warning&#34;&gt;
  &lt;b&gt;Warning:&lt;/b&gt; Always check out the code that you are downloading code before executing to ensure its not malicious!
&lt;/blockquote&gt;

&lt;script type=&#34;application/javascript&#34; src=&#34;https://gist.github.com/benleov/dc44ca9505a807e7dcc9.js&#34;&gt;&lt;/script&gt;

</description>
        </item>
        <item>
        <title>Steam Controller - Worthy addition?</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/</link>
        <pubDate>Sun, 18 Sep 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_thumbnail.png" alt="Featured image of post Steam Controller - Worthy addition?" /&gt;&lt;h2 id=&#34;what-is-the-steam-controller&#34;&gt;What is the Steam Controller?&lt;/h2&gt;
&lt;p&gt;The steam controller is Valve&amp;rsquo;s offering into the controller segment. With the launch of their Steam Link and upcoming Steam Box offerings, Valve decided to continue their campaign to bridge the gap between PC games and the living room by designing a controller with PC games in mind.&lt;/p&gt;
&lt;p&gt;The Steam Controller boasts 2 trackpads, haptics, by my count 18 buttons, 2 dual-stage analog triggers and an analog joystick. Two of the buttons hide on the bottom of the controller that double as the battery housing - when your fingers wrap around the wings you naturally rest on both of them. One feature that doesn&amp;rsquo;t make the press almost at all is it does contain a gyro, similar to the Wiimote, the playstation thingy, and a whole raft of other completely failed motion controllers. It&amp;rsquo;s a pity it isn&amp;rsquo;t marketed more as they have gotten the gyro completely right and it actually synergizes with the controller - but with how bad most implementations are I don&amp;rsquo;t blame Valve for not making a song and dance about it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_unboxing.jpg&#34;
  width=&#34;1356&#34;
  height=&#34;2048&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_unboxing_huda9379dae2a97ec79b9ecb08e8cc6a60_230185_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_unboxing_huda9379dae2a97ec79b9ecb08e8cc6a60_230185_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Steam Controller Unboxing&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;66&#34;
    data-flex-basis=&#34;158px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;The main feature is customizability. Playing using Steam&amp;rsquo;s big picture mode, a raft of configuration options are presented at a click of the steam button (The controller&amp;rsquo;s home button). From here, you can customise a massive amount about the controller. This means that you can bind any button to anything - keyboard press, controller press, joystick, D-pad, mouse, your cat, whatever. More mind boggling is that there are multiple styles of joystick, D-pad and mouse, with different behaviours.&lt;/p&gt;
&lt;p&gt;On top of that, you can customise dead zones, scalings, haptics, sensitivity, and a massive amount more options that I currently don&amp;rsquo;t even &lt;strong&gt;understand&lt;/strong&gt;. Trackpads can be simple joysticks and mouse, or work as touch menus complete with OSD (I.E. weapon swapping, item hot menu, etc). Oh, also it has mode shifting, to allow buttons to double-duty for those more command intensive games. It would be like holding down CTRL and having all your keys function different - here you can swap the function of every button again. Boggles the mind.&lt;/p&gt;
&lt;p&gt;Frankly, it&amp;rsquo;s intimidating. It needn&amp;rsquo;t be, however, as for any game a number of user profiles are shared so you don&amp;rsquo;t need to setup from scratch every game. You can simply load a profile from another user (usually the most popular one) and tweak from there. Sometimes the developer will list an official profile - or perhaps you can just use one of the templates for the game&amp;rsquo;s genre.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note it is pairs as well with a Steam Link as a PC. I&amp;rsquo;ve done a short write up on the Steam Link &lt;a class=&#34;link&#34; href=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/&#34; &gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The controller just works ™ with the Steam Link &lt;em&gt;if&lt;/em&gt; you follow the instructions - like I didn&amp;rsquo;t. It does come with a dongle for using with a PC, but it isn&amp;rsquo;t required if you pair it with a Steam Link. Read the instructions first, like I didn&amp;rsquo;t!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_unboxing_2.jpg&#34;
  width=&#34;2048&#34;
  height=&#34;1356&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_unboxing_2_huf94ee87e39b364a384e5633fe0ef8bdc_316113_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_unboxing_2_huf94ee87e39b364a384e5633fe0ef8bdc_316113_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Steam Controller Unboxing&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;151&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;But how does it handle?&lt;/p&gt;
&lt;h2 id=&#34;getting-used-to-the-steam-controller&#34;&gt;Getting used to the steam controller&lt;/h2&gt;
&lt;p&gt;At a glance, the controller most likely won&amp;rsquo;t look comfortable. And you&amp;rsquo;d be right! This controller takes time and patience to get used to. It&amp;rsquo;s not the comfortable 360 controller you&amp;rsquo;ve bene using for the last forever; Valve has broken the mould to a degree here. The resemblance to the 360 controllers is present in the design, however. They have chosen to follow the 360 in the wing design instead of the stubby things the Playstation controllers have had for some time. It looks big - but put it over the top of a 360 controller and it&amp;rsquo;s almost dead on the same footprint.&lt;/p&gt;
&lt;p&gt;I have small hands and was concerned that I would struggle to reach the buttons - a fear that seemed founded on unboxing but really hasn&amp;rsquo;t eventuated. I&amp;rsquo;ve had no issues reaching anything, so if I can manage I expect anyone can.&lt;/p&gt;
&lt;p&gt;Overall, it took me under a week to get the hang of it. Due to the fact Valve chose to move the buttons to the lower right and put the touchpad in the upper right, 360 controller aficionados can expect the first few hours to be smashing their thumb into the touchpad in frustration as that were the buttons &lt;em&gt;&amp;lsquo;should&amp;rsquo;&lt;/em&gt; be.&lt;/p&gt;
&lt;p&gt;So I cranked out a few different types of games and gave them a good old go.&lt;/p&gt;
&lt;h2 id=&#34;third-person&#34;&gt;Third person&lt;/h2&gt;
&lt;p&gt;I started out playing some third person games. I played through Shadow over Mordor from scratch, having recently picked up a bundle. It did take some time to get the hang of it and fiddling with the right trackpad settings/sensitivity to find something I liked - but once I had it down I was cutting down uruks like nobody&amp;rsquo;s business. Right trackpad controls the mouse, left analog stick to move, buttons to make people&amp;rsquo;s lives miserable. The steam controller did enable me to bind the sprint button to the back bumper, as holding down a button to sprint meant I couldn&amp;rsquo;t look around at the same time - a problem fixed by a quick rebind.&lt;/p&gt;
&lt;p&gt;Additionally, the gyro can be used as a fine aim which was amazing for this game. When aiming an arrow I could use the right trackpad to aim generally then wave the controller around to fine aim. It&amp;rsquo;s a joy to behold as coupled with the time slowdown it was nothing but constant headshots - probably a little unfair considering the time slowdown mechanic would have been added to give analog stick users a handicap.&lt;/p&gt;
&lt;p&gt;Both the game and the controller were ultimately enjoyable, which game me a good opportunity to get the hang of using it for my next game.&lt;/p&gt;
&lt;p&gt;I resumed my first round of Dark Souls (yet, I know I&amp;rsquo;m a little late to the party). I was just finishing off the abyss with no idea was I was about to face - Manus, Father of the Abyss. The next 4 hours of fighting him was an excellent time to become intimate with the exact dynamics of dodge rolling through attacks, and not throwing my shiny new steam controller through the TV. I prevailed in the end with what ended up being easily the most satisfying battle in Dark Souls 1, and justification on the controller. If you can beat Manus with it, you can play any damn game with it.&lt;/p&gt;
&lt;h2 id=&#34;platformer&#34;&gt;Platformer&lt;/h2&gt;
&lt;p&gt;I played both Rouge Legacy and Trine with the controller. I slotted back into Rogue legacy like a glove but using the analogue stick as a d-pad. I did swap over to using the left trackpad as a d-pad by turning off the option to require a click for it to trigger. It was eerie using a trackpad as a d-pad, but amazingly responsive.&lt;/p&gt;
&lt;p&gt;Trine was a bit more of an interesting beast, as it has mouse gesture controls and mouse aiming. It was great for this, and after a slight adjustment, I had no issue using the trackpad to draw boxes, aim bow/shield.&lt;/p&gt;
&lt;h2 id=&#34;first-person&#34;&gt;First person&lt;/h2&gt;
&lt;p&gt;I have played some Portal 2 with the steam controller. Only a few hours worth just to give it a shot. I have it setup to use the left analog stick for movement, triggers for both portals, flaps underneath for crouch/jump, and right trackpad for aiming.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_portal_config.png&#34;
  width=&#34;1024&#34;
  height=&#34;576&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_portal_config_hu216d51a08ed7cf625c7de30c5996fa8f_235912_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_portal_config_hu216d51a08ed7cf625c7de30c5996fa8f_235912_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Steam Controller Unboxing&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;177&#34;
    data-flex-basis=&#34;426px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a plain joy to use. It&amp;rsquo;s responsive and easy to look around, but precise enough to be able to hit where you need a portal. Whilst I won&amp;rsquo;t say it is as good as a keyboard/mouse, it&amp;rsquo;s certainly going to fit the bill for any slower single player FPS that I might prefer to play on the couch.&lt;/p&gt;
&lt;p&gt;For the more serious, again you can use the gyro to fine aim. I haven&amp;rsquo;t used it for a twitchy game, but I&amp;rsquo;ve read posts of people swearing it approaches keyboard/mouse levels of control.&lt;/p&gt;
&lt;p&gt;This is something I need to explore and report back on.&lt;/p&gt;
&lt;h2 id=&#34;third-person-rocket-exploder-simulator&#34;&gt;Third Person&amp;hellip; Rocket Exploder Simulator?&lt;/h2&gt;
&lt;p&gt;Yep, you can even play Kerbal Space Program with it. And it&amp;rsquo;s actually fantastic. It&amp;rsquo;s hard to explain how it works, but analog stick works menus or camera, and right trackpad does mouse. It.. works. Building a rocket is not much harder than with keyboard/mouse. Unfortunately, my rockets still tend to suffer RUD&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_kerbal_config.png&#34;
  width=&#34;1004&#34;
  height=&#34;565&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_kerbal_config_hu4929ef889c7f096bad33ce50264d87bc_399788_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/steam_controller_kerbal_config_hu4929ef889c7f096bad33ce50264d87bc_399788_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Steam Controller Unboxing&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;177&#34;
    data-flex-basis=&#34;426px&#34;
  
&gt;
&lt;/p&gt;
&lt;h2 id=&#34;build-quality&#34;&gt;Build quality&lt;/h2&gt;
&lt;p&gt;The build quality is great. It feels nice and solid, the buttons have a great feel to them. No Xbox 360 D-pad floppiness here!&lt;/p&gt;
&lt;p&gt;Just check out the construction of one!&lt;/p&gt;
&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/uCgnWqoP4MM&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;My only real gripe is the way the floppy buttons on the back work - The flaps are part of the battery housing, so when you push in one flap it tends to pull the other flap away toward it, which pulls the other flap away from its respective button. Little awkward, but if you don&amp;rsquo;t plan on using both buttons at the same time it should be fine.&lt;/p&gt;
&lt;p&gt;I love the battery housing. When the housing opens up the batteries slot deep into the wings, using the space efficiently and leaving the rest of the controller thin and allowing space for all the electronics. I&amp;rsquo;m surprised more controllers aren&amp;rsquo;t built like this!&lt;/p&gt;
&lt;p&gt;Additionally, the battery life is insane. The Duracell&amp;rsquo;s that came with it ran for over 5 weeks before going flat. This was with heavy, nightly usage. My Xbox 360 controllers hardly lasted 2 weeks on regular batteries.&lt;/p&gt;
&lt;h2 id=&#34;closing-thoughts&#34;&gt;Closing thoughts.&lt;/h2&gt;
&lt;p&gt;If you are a PC gamer looking for a customizable controller, look no further. Don&amp;rsquo;t be put off by the swath of options - if that&amp;rsquo;s not what you&amp;rsquo;re into, there&amp;rsquo;s always a community config that will be perfect (or close) for what you want.&lt;/p&gt;
&lt;p&gt;For steam link users - I feel this unlocks the true potential of the device. It &lt;em&gt;can&lt;/em&gt; work with any old controller - but this controller really lets you unlock away from your PC with almost any game.&lt;/p&gt;
&lt;p&gt;*[RUD]: Rapid Unplanned Disassembly&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Multiroom audio with the Raspberry PI</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/</link>
        <pubDate>Sun, 24 Jul 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/raspi_squeezebox_player_and_app.jpg" alt="Featured image of post Multiroom audio with the Raspberry PI" /&gt;&lt;h2 id=&#34;multiroom-audio-with-the-raspi&#34;&gt;Multiroom Audio with the Raspi&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve wanted some sort of audio system for years, a set of speakers in multiple rooms you could setup to be controlled via an app that would be able to play my music collection, and radio. In the past I&amp;rsquo;ve experimented with just having iTunes on a laptop with speakers solely for it, putting speakers on my server and some other options. None have ever hit the &amp;rsquo;neat and tidy&amp;rsquo; aspect.&lt;/p&gt;
&lt;p&gt;Recently I started playing around with the RasPI squeezebox solution &lt;a class=&#34;link&#34; href=&#34;https://sites.google.com/site/picoreplayer/home&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;piCorePlayer&lt;/a&gt; which was a big step in the right direction I was looking for. Surely I could find a cheap set of speakers that would look neat, but have enough space to squeeze (pun intended) a RasPi inside of?&lt;/p&gt;
&lt;p&gt;Off to AliExpress I went and found a cheap(ish) little Bluetooth speaker set. It actually had a decent set of features, pity I would not be using most of them.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/raspi_squeezebox_player_and_app.jpg&#34;
  width=&#34;2048&#34;
  height=&#34;1356&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/raspi_squeezebox_player_and_app_hube4a66662bcddb4d91469558e7b814b2_580690_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/raspi_squeezebox_player_and_app_hube4a66662bcddb4d91469558e7b814b2_580690_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Raspi Squeezebox player&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;151&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Above is the finished player (which looks the same as how it comes out of the box). I managed to fit a RasPI 1 inside of it, wired up to the power and aux input jack. The PI connects wirelessly to my wireless network by a Wifi dongle and runs off the Logitec Media Server software. So via an app or internal website I can play music or radio and media server will kick off the RasPI to play, pause, volume, etc.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s truly a poor man&amp;rsquo;s &lt;a class=&#34;link&#34; href=&#34;http://www.sonos.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Sonos&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;hacking-the-speaker&#34;&gt;Hacking the speaker&lt;/h2&gt;
&lt;p&gt;The speaker is a cheap Bluetooth-capable speaker off AliExpress. It&amp;rsquo;s got more functionality than I wanted but was the only one I liked the look of that could potentially fit a RasPI. I got it Friday night and quickly tore it down.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/cheap_speaker_teardown.jpg&#34;
  width=&#34;1400&#34;
  height=&#34;927&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/cheap_speaker_teardown_hud3687a987ae7dd1134ec32b42f1be207_602483_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/cheap_speaker_teardown_hud3687a987ae7dd1134ec32b42f1be207_602483_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Teardown of a cheap chinese bluetooth speaker&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;151&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;I found that it indeed did have enough room to hide a RasPI. But only just, and only after the RasPI has undergone some radical weight reduction. I setup a wifi dongle I had lying around to run on the RasPi and verified it worked before proceeding - I already had Logitec Media Player on a virtual machine running on my server.&lt;/p&gt;
&lt;p&gt;I then played around and inspected the circuitry to find where I could hijack power from the speaker power. It had a power input which was just a standard micro USB-B connector, so it would be running +5V which I could just tap the RasPI into. I cut one end of the USB to Micro USB-B connector that came with it and soldered it to GND and the closest point I could tap +5V. I suspect it was a regulator to drop to +3V or so - the lithium battery included only had 3.7V in it so one would suspect the logic to be +3V. I tried pulling direct from the battery charge points but it only gave out 4.7V, which the RasPI flat out refused to boot on.&lt;/p&gt;
&lt;p&gt;I did accidently blow a resistor to GND during probing for voltage (which a bodge wire quickly fixed, shorting the plugs housing to another GND point on the board).&lt;/p&gt;
&lt;p&gt;Then it was on to the drastic reduction - the RasPi would have to havethe RCA plug, line-out, Ethernet and the USB plugs stripped. I either cut or desoldered these as what was easiest (cut off all but the Ethernet and USB, which required adding fresh solder and then sucking it out). The solder on the RasPI melts a LOT hotter than usual, so adding fresh solder was the trick.&lt;/p&gt;
&lt;p&gt;After the rapid weight loss, I had to find a way to get the USB wifi adaptor back on it. I threw any concept of the USB spec out the window and directly connected the USB pins to the WIFI dongle with a ribbon cable.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/modifying_wifi_dongle_direct_wire.jpg&#34;
  width=&#34;2048&#34;
  height=&#34;1356&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/modifying_wifi_dongle_direct_wire_hu436fc7f5860488c84225a8e1d69dd5ea_474623_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/modifying_wifi_dongle_direct_wire_hu436fc7f5860488c84225a8e1d69dd5ea_474623_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Hacking Usb Wifi direct to RasPI with ribbon cable&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;151&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;After everything, it looked a little worse for wear but it worked fine. Then I started probing around to figure out how to connect the Pi&amp;rsquo;s line out direct to the speaker system.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/modified_raspi_with_wifi_dongle.jpg&#34;
  width=&#34;2048&#34;
  height=&#34;1356&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/modified_raspi_with_wifi_dongle_hu4aab6950eddcf6ad17623702554431fd_536698_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/modified_raspi_with_wifi_dongle_hu4aab6950eddcf6ad17623702554431fd_536698_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Wifi Dongle hacked onto RasPi&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;151&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;I bodged wires from the aux input jack of the speaker system to the pi - guessing the left and right channel would be the pins connected to the capacitors I could see on the board. The centre pin turned out, as I suspected, to be ground.&lt;/p&gt;
&lt;p&gt;I tested it as it was and it worked. The speakers had some bad line noise (as you&amp;rsquo;d expect from a cheap set) so I turned them right down and the Pi right up. Once I had done that, it was great!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/modified_speakers_with_raspi.jpg&#34;
  width=&#34;2048&#34;
  height=&#34;1356&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/modified_speakers_with_raspi_hu1b62f07a41763532af6d9b0ebe2907aa_706979_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/modified_speakers_with_raspi_hu1b62f07a41763532af6d9b0ebe2907aa_706979_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Modified bluetooth speaker to raspi running picoreplayer (squeezebox player)&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;151&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Afterwards, it was merely a case of fitting the PI into the housing and it fit like it was designed to be there. Some hot glue and a zip tie, and it was time for reassembly.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/modified_speakers_with_raspi_installed.jpg&#34;
  width=&#34;2048&#34;
  height=&#34;1356&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/modified_speakers_with_raspi_installed_hued4603b32ab019604d12121b63b357c6_716735_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/raspi-muiltiroom-audio/modified_speakers_with_raspi_installed_hued4603b32ab019604d12121b63b357c6_716735_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Fitting a RasPi into a cheap set of bluetooth speakers&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;151&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Once reassembled, it looked like it was new out of the box. All it required was a home to be found for it and for it to be plugged in with any old wall plug &amp;amp; USB Micro B cable. Once it&amp;rsquo;s powered up, the PI boots up into piCorePlayer, connects to the Wifi, and is ready to receive music or radio streams! Just running the Andriod app &lt;a class=&#34;link&#34; href=&#34;https://play.google.com/store/apps/details?id=com.angrygoat.android.squeezectrl&amp;amp;hl=en&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Squeeze Ctrl&lt;/a&gt; allows me to control the Logitec Medis Server, which finds the RasPi and considered it an output device. A tap of the app and we have music control.&lt;/p&gt;
&lt;p&gt;All I need to do is order a few more and I have a Sonos-like experience, for a fraction of the price.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Steam Link - The ultimate console?</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/</link>
        <pubDate>Sun, 24 Jul 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/steam_link_closeup.jpg" alt="Featured image of post Steam Link - The ultimate console?" /&gt;&lt;h2 id=&#34;why-steam-link-and-what-is-it&#34;&gt;Why Steam Link and what is it?&lt;/h2&gt;
&lt;p&gt;In short, Valve&amp;rsquo;s &lt;a class=&#34;link&#34; href=&#34;http://store.steampowered.com/app/353380/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Steam Link&lt;/a&gt; is a small box (not much larger the size of a deck of cards) that you can plug into your network and TV and stream games from your PC to your TV, in glorious 1080p @ 60hz. It also takes care of ensuring your controllers talk to your PC, and turns on like a console via turning on your controller. If you ever wanted to play your PC games from the couch with a controller, this is for you. If you have a wired network already it is literally as simple as plug into TV and Ethernet, plug in controller adaptor/pair with Bluetooth, enter PIN on PC running steam, and you are literally playing games from your couch within 5 mins.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/steam_link_unbox.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;795&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/steam_link_unbox_huccedf6ceea303d1784c0599d0c7933dc_173702_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/steam_link_unbox_huccedf6ceea303d1784c0599d0c7933dc_173702_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Steam Link Unboxing&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;150&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;If you ever wanted all your emulation in once place, your modern games playing friends side by side with Zelda, Super Mario 3, River Raid, Sonic or perhaps even Goldeneye, you need to get this!&lt;/p&gt;
&lt;blockquote class=&#34;book-hint notice&#34;&gt;
  &lt;b&gt;Notice:&lt;/b&gt; I have written a guide for neatly setting up emulators to work with Steam Big Picture/Steam Link. Check it out &lt;a class=&#34;link&#34; href=&#34;https://6e2dbc8c.voltaicforge.pages.dev/guides/steam_emulation/premise/&#34; &gt;here&lt;/a&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;I call it the ultimate console.&lt;/strong&gt;&lt;/em&gt; Who doesn&amp;rsquo;t want all your games in one place - from Atari to the latest releases?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unfortunately, it appears there&amp;rsquo;s so much confusion about it - if you read the review articles or forums there it appears there&amp;rsquo;s confusion about what it is, or who it is for. Unfortunately many of, the reviews for the Steam Link are lukewarm at best for reasons that I don&amp;rsquo;t feel are valid. Comments such as input lag or artefacts make me think reviewers simply haven&amp;rsquo;t tried changing a single setting to adjust - and they are simple to fix.&lt;/p&gt;
&lt;p&gt;However, I will note that I expect any Wireless connection will introduce input lag (doesn&amp;rsquo;t matter how fast/good it is, radio waves are slow things compared to the speed of an electron) - if you can&amp;rsquo;t hardwire a Steam Link I don&amp;rsquo;t think this is for you.&lt;/p&gt;
&lt;p&gt;I used to have an HTPC each for the Projector and the TV, running Plex and Steam for Steam Streaming. It wasn&amp;rsquo;t particularly polished, and felt clunky, either using a Xbox 360 controller or an IR remote setup.&lt;/p&gt;
&lt;p&gt;Recently, I upgraded to a shiny new 70&amp;quot; LG 4K TV. This removed the need for an HTPC for Plex and YouTube. Using the TV&amp;rsquo;s remote to browse the in-tv apps for Plex and YouTube was amazing, and far superior to anything I could have down with the HTPC.&lt;/p&gt;
&lt;p&gt;So, now the HTPC was only doing Steam streaming, it was time to find a solution for retiring the HTPC completely. Enter the Steam Link.&lt;/p&gt;
&lt;p&gt;I think there is confusion and trepidation on Valves latest gear. Not everyone seems quite sure what is it.&lt;/p&gt;
&lt;p&gt;The Steam link is merely a device to stream your PC&amp;rsquo;s screen to an HDMI device (i.e. your living room TV). It doest play the games, it merely extends your PC&amp;rsquo;s reach. But it&amp;rsquo;s also so much more.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/steam_link_closeup.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;795&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/steam_link_closeup_hubf9059adb5b877f566ed083b10c47993_141652_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/steam_link_closeup_hubf9059adb5b877f566ed083b10c47993_141652_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Steam Link closeup&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;150&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;The Steam link is a little black box with a small, unobtrusive steam logo that includes&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3 USB2.0 ports&lt;/li&gt;
&lt;li&gt;HDMI out&lt;/li&gt;
&lt;li&gt;100mbs Ethernet&lt;/li&gt;
&lt;li&gt;Power input&lt;/li&gt;
&lt;li&gt;Bluetooth 4.0&lt;/li&gt;
&lt;li&gt;Wireless AC&lt;/li&gt;
&lt;li&gt;Works with Xbox controllers (requires dongle), a ps4 controller (Bluetooth, no dongle), racing wheels, keyboard/mouse (wired and wireless), just about any input.&lt;/li&gt;
&lt;li&gt;Comes with various power point adapters for various regions (AU, US and probably EU)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s about it. It runs off an ARMv7 with a dedicated h.264 hardware decoding, custom Linux kernel. Technically speaking, it&amp;rsquo;s comparable to a Raspberry Pi 2. And don&amp;rsquo;t get scared off by the 100mbs ethernet - if you do the math that is more than capable of 1080p @ 60hz.&lt;/p&gt;
&lt;p&gt;But it will stream from your PC at 1080p @ 60hz if your gaming PC is up to the task. Not only that, but with Big Picture it will do this seamlessly with a nice, functional interface, it will manage your controllers (Xbox, PS4, racing wheel, etc), and it works like a console. Hell, it&amp;rsquo;s so tiny that it is easily hideable behind any TV - my wall mounted TV has no need for a shelf to put a bulky console on.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note it is best paired with a Steam Controller. I&amp;rsquo;ve done a short write up on the Steam Link &lt;a class=&#34;link&#34; href=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/09/steam-controller-worthy-addition/&#34; &gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;one-week-with-the-steam-link&#34;&gt;One week with the steam link.&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s been a long time since I&amp;rsquo;ve been so impressed with a tech purchase. It runs a dream, plays games at 1080p @ 60hz, and as completely unlocked me from being hunched over the PC to game.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/Steam_big_picture_start.jpg&#34;
  width=&#34;1080&#34;
  height=&#34;608&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/Steam_big_picture_start_hu47cf3527a50c13d345f4b33489b48b43_262739_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/Steam_big_picture_start_hu47cf3527a50c13d345f4b33489b48b43_262739_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Steam Big Picture mode upon startup&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;177&#34;
    data-flex-basis=&#34;426px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;My living room TV has become the go-to place in the house (I haven&amp;rsquo;t even wanted to fire up the projector since I got this!). Once I&amp;rsquo;ve finished watching a show over dinner, I can hit the logo button on the Xbox controller or my Steam controller, turning on the Steam link. Any controller &amp;lsquo;just works&amp;rsquo; assuming you have the PC dongle (for a Xbox controller) or a PS4 controller will connect via Bluetooth, no dongle necessary. You can choose to connect a keyboard/mouse as well with no issues, again it &amp;lsquo;just works&amp;rsquo;&lt;/p&gt;
&lt;p&gt;From here, you are presented with a menu of the available PC&amp;rsquo;s detected on the network you have setup. Adding a PC is as easy as selecting it and entering a PIN code on the PC - only required once to pair. On subsequent boots, all you have to do is select the PC from the menu.&lt;/p&gt;
&lt;p&gt;From there, it&amp;rsquo;s all over to the PC in terms of work - the steam link will request the PC to go into big picture mode and begin streaming the window. From your seat, at the TV it seamlessly transitions to the Big Picture launch intro.&lt;/p&gt;
&lt;p&gt;Then it&amp;rsquo;s just like using Big Picture on your PC. You have a nice interface for the store, your library, etc. Launching a game will drop you directly into the game and big picture will jump to streaming that window without you noticing any transition. It&amp;rsquo;s just like having a console - but it&amp;rsquo;s your PC!&lt;/p&gt;
&lt;p&gt;This has opened up a realm of games that I&amp;rsquo;ve wanted to play but didn&amp;rsquo;t want to hunch over the PC with a controller.&lt;/p&gt;
&lt;h2 id=&#34;running-emulators-on-the-steam-link&#34;&gt;Running emulators on the steam link&lt;/h2&gt;
&lt;p&gt;Now, if you are like me and you love emulating old games - you&amp;rsquo;re in for a treat. You can ditch fiddly front ends and use steam to manage your games - and stream them via your Steam Link as if you had your SNES, N64, Playstation, Atari, Sega, whatever plugged in. A GitHub project called &lt;a class=&#34;link&#34; href=&#34;https://github.com/scottrice/Ice&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ice&lt;/a&gt; can be setup to run through a ROM directory, and manage adding/removing a custom game to your steam list that will launch an emulator of your choice, passing the game as a command and launching the emulator directly into the ROM.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve written a guide &lt;a class=&#34;link&#34; href=&#34;https://6e2dbc8c.voltaicforge.pages.dev/guides/steam_emulation/premise/&#34; &gt;here&lt;/a&gt; covering how to set this up.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/steam_big_picture_snes_super_mario_all_stars.jpg&#34;
  width=&#34;3840&#34;
  height=&#34;2160&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/steam_big_picture_snes_super_mario_all_stars_hudc63f99544607fdb023a527b19f3f895_647444_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/steam_big_picture_snes_super_mario_all_stars_hudc63f99544607fdb023a527b19f3f895_647444_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Emulating SNES via Steam Big Picture and Steam Link&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;177&#34;
    data-flex-basis=&#34;426px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;As a result, I have a multitude of my favorite old games in my steam library (complete with artwork, and tagging the game with the console name). From my couch, I can thus filter my game list into the &amp;ldquo;SNES&amp;rdquo; category, and see a list of SNES games. Launching one will drop directly into Retroarch with bsnes core with full controller support. Dropping into a emulated game instantly at a button press and getting the intro screen for the console of choice is mind blowing - it&amp;rsquo;s like having a SNES or N64 plugged into your TV. All this in a package the size of a pack of cards.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/Steam_big_picture_snes_filter.jpg&#34;
  width=&#34;1080&#34;
  height=&#34;608&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/Steam_big_picture_snes_filter_hu46039e92786e09bf4b5034baba3a54a0_110799_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/07/steam-link-ultimate-console/Steam_big_picture_snes_filter_hu46039e92786e09bf4b5034baba3a54a0_110799_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Emulation on big picture with Steam Big Picture, Steam Link and a github project called ICE, filtering by console&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;177&#34;
    data-flex-basis=&#34;426px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;So I can go from Shadow of Mordor to Donkey Kong Country to Pitfall, all within 20 seconds of each other using whatever controller I chose.&lt;/p&gt;
&lt;h2 id=&#34;why-is-this-better-than-a-console&#34;&gt;Why is this better than a console?&lt;/h2&gt;
&lt;p&gt;I can think of a multitude of reasons&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Emulator support - build the ultimate console! Heck, play old DOS games with DOSBox and a Steam controller!&lt;/li&gt;
&lt;li&gt;Mod support! You get the modding of PC, with the comfort of couch and controller (or keyboard/mouse if you still choose)&lt;/li&gt;
&lt;li&gt;Better graphics - sorry, but a decent PC will plain outperform a console, especially as the console lifecycle drags on.&lt;/li&gt;
&lt;li&gt;Massive games library, not bound to one manufacturer&lt;/li&gt;
&lt;li&gt;Multi-room support - move from TV to Home Theater to PC. Or connect to different PCs with different steam accounts running.&lt;/li&gt;
&lt;li&gt;Customization - especially with a Steam Controller, customise to your hearts content either the game or the control set.&lt;/li&gt;
&lt;li&gt;Games are plain cheaper on PC with Steam Sales.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The downsides&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MUST&lt;/strong&gt; be hardwired! I can&amp;rsquo;t see any solution on wifi that won&amp;rsquo;t introduce too much input lag&lt;/li&gt;
&lt;li&gt;Comes with the inherent possibility of crashes on PC - Steam has bugged out on occasion.&lt;/li&gt;
&lt;li&gt;The odd console exclusive game&lt;/li&gt;
&lt;li&gt;Requires decent PC (mind you, I&amp;rsquo;m running MGS:V at 1080p @ 60hz with a Nvidia 670 no problems)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;closing-thoughts&#34;&gt;Closing thoughts&lt;/h2&gt;
&lt;p&gt;If you haven&amp;rsquo;t already run out and bought 10 Steam Links then I don&amp;rsquo;t know what&amp;rsquo;s wrong with you and you require professional help. Assuming you have a wired network and can&amp;rsquo;t/won&amp;rsquo;t have your PC directly hooked up to your TV, this is for you.&lt;/p&gt;
&lt;p&gt;I have had nothing but perfect streaming experiences, smooth FPS, no artefacts, lag, etc. That said, I have built a robust network, it is wired, and I have given it an optimal network to run on - and it is delivering in spades. If you want to run on Wireless then it&amp;rsquo;s your funeral - even with AC dual band, you&amp;rsquo;re going to get input lag. I think it&amp;rsquo;s a simple fact of the way wireless works.&lt;/p&gt;
&lt;p&gt;Also keep in mind that when you stream you are also asking your PC to run the game AND encode the audio/video - this means you need the grunt to run the game at 1080p as well as the stream encoding overhead.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Multiplexing Seven Segment with AVR</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/</link>
        <pubDate>Sun, 29 May 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/multiplex_sevensegment_avr_teaser.jpg" alt="Featured image of post Multiplexing Seven Segment with AVR" /&gt;&lt;h2 id=&#34;multiplexing-a-dual-seven-segment-display&#34;&gt;Multiplexing a dual seven segment display&lt;/h2&gt;
&lt;p&gt;Following on from driving a seven segment with an ATTiny2313a last &lt;a class=&#34;link&#34; href=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/&#34; &gt;post&lt;/a&gt; I swapped out the single seven segment for a dual seven segment that I bought from AliExpress. This one was a dual display with a similar set of 10-pin inputs like the last, single one. The pins from A-G+DP are different to the last, but more tellingly instead of two anode pins for the single display, there is now an anode pin for each segment. Power one pin with some of the LEDs pulling to ground and one lights up, power the other and the other one lights up. And if you power both, you get both sides displaying the same thing.&lt;/p&gt;
&lt;p&gt;I found a post at (&lt;a class=&#34;link&#34; href=&#34;http://codeandlife.com/2012/02/24/7-segment-multiplexing-with-uln2003-pnp-transistors/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;codeandlife.com&lt;/a&gt;) that helped me out with the timers &amp;amp; interrupts, which again I&amp;rsquo;ve found harder to find relevant code for:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/F5261bh_pinout.png&#34;
  width=&#34;639&#34;
  height=&#34;292&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/F5261bh_pinout_hu0df951933de623a5a1b0397c38808473_16128_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/F5261bh_pinout_hu0df951933de623a5a1b0397c38808473_16128_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Dual sevent segment dual display pinout&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;218&#34;
    data-flex-basis=&#34;525px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Here we need to multiplex. What is that? Well, multiplexing is described as:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Telecommunications. of, relating to, or using equipment permitting the simultaneous transmission of two or more trains of signals or messages over a single channel.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In this case, to drive one seven segment we have already used 7 pins + power. If we added another stand alone display, that would become 14. What about building a clock with 4 digits, do we go and get an MCU with 28 or more pins?&lt;/p&gt;
&lt;p&gt;Nope. What we do is setup an array of seven segments (two in this proof-of-concept case) which share a common set of lines to drive each LED. But we split the input lines (in this case anode) to the LEDS so we can drive them independent of each other. This enables us to set the AVR pins to sink current to enable one number, and turn the first part of the display on. After a brief delay, we turn that segment off, change the AVR pins for the second number, and turn on the second part of the display.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve measured this rig at between 5-15mA, depending on what is lit up (with a number 8 being the most)&lt;/p&gt;
&lt;blockquote class=&#34;book-hint warning&#34;&gt;
  &lt;b&gt;Warning:&lt;/b&gt; Keep in mind as well that an ATTiny2313a is rated to 20mA sourcing of current. Exceed that and you might burn it out!
&lt;/blockquote&gt;

&lt;p&gt;If we do this very fast (I measured the frequency at around 250mhz) the human eye blends together images and we see both sides lit up simultaneously. This is extremely common and you may be surprised to find where this occurs. If you have a DSLR, try taking very short exposures of LED displays!&lt;/p&gt;
&lt;h2 id=&#34;wiring-up-the-breadboard&#34;&gt;Wiring up the breadboard&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/multiplex_sevensegment_avr.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;795&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/multiplex_sevensegment_avr_hu9567584493ea639d53483572da38b97a_364426_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/multiplex_sevensegment_avr_hu9567584493ea639d53483572da38b97a_364426_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Multiplexing a dual seven segment display with a ATTiny2313a&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;150&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;So I rewired the breadboard up similar to last time, but taking into account the different pins. Also, instead of +5 going to one of the anode pins of the seven segment I wired one anode of the seven segment to PD4 and the other to PD5 of the ATTiny2313 - this time the AVR will drive the anodes.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;avr-pin&lt;/th&gt;
&lt;th&gt;letter&lt;/th&gt;
&lt;th&gt;led-pin&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PB7&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;pin 10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB6&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;pin 9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB5&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;pin 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB4&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;pin 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB3&lt;/td&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;pin 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB2&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;pin 6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB1&lt;/td&gt;
&lt;td&gt;G&lt;/td&gt;
&lt;td&gt;pin 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;schematic&#34;&gt;Schematic&lt;/h2&gt;
&lt;blockquote class=&#34;book-hint info&#34;&gt;
  &lt;b&gt;Info:&lt;/b&gt; I couldn&amp;rsquo;t find a common-anode dual seven segment display on octopart - this is a quad display but imagine its only a dual display.
&lt;/blockquote&gt;

&lt;blockquote class=&#34;book-hint warning&#34;&gt;
  &lt;b&gt;Warning:&lt;/b&gt; The pinouts on this dont match above, again because the part isn&amp;rsquo;t present. If you follow this, check your part datasheet.
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/schematic_seven_segment_multiplex.png&#34;
  width=&#34;1208&#34;
  height=&#34;796&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/schematic_seven_segment_multiplex_hu09faf03f7f0f098e1fb33e686bf45482_93690_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/schematic_seven_segment_multiplex_hu09faf03f7f0f098e1fb33e686bf45482_93690_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Schematic for muiltplexing two seven segment displays with a ATTiny2313a&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;151&#34;
    data-flex-basis=&#34;364px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;AVR_Multiplex_Seven_Segment.PDF&#34; &gt;PDF Schematic Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://circuitmaker.com/Projects/0B2CC870-16DB-4604-87C3-4571C2FBB3D5&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;View on CircuitMaker&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;code&#34;&gt;Code&lt;/h2&gt;
&lt;p&gt;With the below code, the display counts from 0-99. Brightness is fine, but can be a problem with more displays. AVR is running interal clock with clockdiv/8 fuse set.&lt;/p&gt;
&lt;p&gt;Here we use a timer to increment a counter each second. A second timer runs the multiplexing, with ~500 interrupts per second. Thats almost it!&lt;/p&gt;
&lt;blockquote class=&#34;book-hint info&#34;&gt;
  &lt;b&gt;Info:&lt;/b&gt; I have started using bit flipping defines for legible code and easy of use. Might annoy the purists!
&lt;/blockquote&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * PoorMansSevenSegment.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * A bodge program to run a seven segment without a BCD - 7 segment display decoder
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Created: 15/05/2016 6:50:30 PM
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Author : Nat
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define F_CPU 1000000UL &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//CPU speed, set clockdiv/8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;avr/io.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;util/delay.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;avr/interrupt.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Defines for  easy bit flipping
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_set(...)        bit_set_(__VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_set_(x,y)        x |= 1&amp;lt;&amp;lt;y            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// set a bit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_clear(...)        bit_clear_(__VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_clear_(x,y)        x &amp;amp;= ~(1&amp;lt;&amp;lt;y)            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// clear a bit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_test(...)        bit_test_(__VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_test_(x,y)        (!!(x &amp;amp; (1&amp;lt;&amp;lt;y)))        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// test a bit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/*** following macros related to the PORTx - register only !    ***/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/***                                ***/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_dir_outp(...)    bit_dir_outp_(__VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_dir_outp_(x,y)    *(&amp;amp;x-1) |= 1&amp;lt;&amp;lt;y            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// access DDRx of PORTx !
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_dir_inp(...)    bit_dir_inp_(__VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_dir_inp_(x,y)    *(&amp;amp;x-1) &amp;amp;= ~(1&amp;lt;&amp;lt;y)        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// access DDRx of PORTx !
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_test_in(...)    bit_test_in_(__VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_test_in_(x,y)    (!!(*(&amp;amp;x-2) &amp;amp; (1&amp;lt;&amp;lt;y)))        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// access PINx of PORTx !
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// pin defines
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define PORT_LED PORTB
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define DDR_LED DDRB
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define PORT_PWR PORTD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define DDR_PWR DDRD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// define Seven segment output ports for Vcc to Seven Segment
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define LED0    PORTD, 4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define LED1    PORTD, 5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//binary representations of binary required to light seven segment 0-9
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mb&#34;&gt;0b11111100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b01100000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11011010&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mb&#34;&gt;0b11110010&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b01100110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b10110110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b10111110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11100000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11111110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11100110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;volatile&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i_timer_seconds&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;volatile&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i_active_display&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;seven_write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i_digit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// write to entire LED port - invert due to the fact that in a common anode display LOW = on.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// to use in a common cathode display, remove inversion.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;PORT_LED&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=~&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i_digit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ISR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TIMER1_COMPA_vect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// increment timer count
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;i_timer_seconds&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ISR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TIMER0_OVF_vect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PORT_PWR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i_active_display&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// turn off LED
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;//toggle active display
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;i_active_display&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;^=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i_active_display&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;seven_write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i_timer_seconds&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;seven_write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i_timer_seconds&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PORT_PWR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i_active_display&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// turn on LED
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//disable interupts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//Data Direction Register, set all bits high
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;DDR_LED&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0xFF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;                &lt;span class=&#34;c1&#34;&gt;// enable entire LED port as output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// set led common anode wires to outputs (PD4/5)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;bit_dir_outp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LED0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;bit_dir_outp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LED1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// init timer 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;TIMSK&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TOIE0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// timer 0 overflow interupt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;TCCR1B&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;WGM12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// config for CTC mode
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;TIMSK&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;OCIE1A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// CTC interupt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;OCR1A&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15625&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;             &lt;span class=&#34;c1&#34;&gt;// prescaler
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;sei&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;TCCR0B&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CS01&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//timer 0 at clk/8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;TCCR1B&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CS11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CS10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//timer 1 at clk/64
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
        </item>
        <item>
        <title>Poor man&#39;s seven segment LED display with AVR</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/</link>
        <pubDate>Sun, 15 May 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/seven_segment_teaser.jpg" alt="Featured image of post Poor man&#39;s seven segment LED display with AVR" /&gt;&lt;h2 id=&#34;driving-a-seven-segment-display-with-no-bcd-to-seven-segment-chip&#34;&gt;Driving a seven segment display with no BCD to seven segment chip&lt;/h2&gt;
&lt;p&gt;I have gotten a batch of cheap seven segments from DealExtreme, and it was high time I put them through their paces.&lt;/p&gt;
&lt;p&gt;However, I have no BCD to seven segment chips. No matter, I can bodge it up just using 7 pins. So I ran through some code to just drive each segment with a pin from an ATTiny2313a.&lt;/p&gt;
&lt;p&gt;I found from the data-sheet for the 7-seg LED that it was a common anode. So that means I had to drive LOW to sink current to light LEDs - and keep HIGH to keep segments off.&lt;/p&gt;
&lt;p&gt;Starting off by working out the seven segment display and working out in a table which logic levels for each led; to drive the segments for numbers 0-9. I&amp;rsquo;m sure it was searchable online, but where&amp;rsquo;s the fun in that?&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/poormans_seven_segment_writeup.jpg&#34;
  width=&#34;795&#34;
  height=&#34;1200&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/poormans_seven_segment_writeup_hub93b819d2670c4d60beff054f8df3c25_195200_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/poormans_seven_segment_writeup_hub93b819d2670c4d60beff054f8df3c25_195200_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Working out which led&amp;rsquo;s to drive for each number&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;66&#34;
    data-flex-basis=&#34;159px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Using my new target board to hook up the 2313a to a breadboard - with 330Ω from each LED. I saw from the datasheet for the LED seven segment that it had common anode on pins 3 &amp;amp; 8. Using the pinout below I was able to breadboard connections. It was a simple case of matching up PB0-PB7 to match up with the led segments from the datasheet, via the letters.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/led_datasheet.png&#34;
  width=&#34;335&#34;
  height=&#34;260&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/led_datasheet_hue7f50d361d67c20f732309dd83c160c6_11119_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/led_datasheet_hue7f50d361d67c20f732309dd83c160c6_11119_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;6161BS seven segment wiring from data-sheet&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;128&#34;
    data-flex-basis=&#34;309px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;I hooked up PB0 through PB7 to the seven segment display, using the pinouts above to correlate to the pinouts I drew out. I did get tripped up on the direction here - thinking that PB0 was the highest bit in the register! Of course, it isn&amp;rsquo;t!&lt;/p&gt;
&lt;p&gt;So I ended up with:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;avr-pin&lt;/th&gt;
&lt;th&gt;letter&lt;/th&gt;
&lt;th&gt;led-pin&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PB7&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;pin 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB6&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;pin 6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB5&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;pin 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB4&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;pin 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB3&lt;/td&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;pin 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB2&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;pin 9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB1&lt;/td&gt;
&lt;td&gt;G&lt;/td&gt;
&lt;td&gt;pin 10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote class=&#34;book-hint info&#34;&gt;
  &lt;b&gt;Info:&lt;/b&gt; Pin 0 is not connected! When I added the binary to the code I added a trailing 0 to the binary to bump it up to 8-bit.
&lt;/blockquote&gt;

&lt;h2 id=&#34;schematic&#34;&gt;Schematic&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/schematic_poormans_seven_segment.png&#34;
  width=&#34;855&#34;
  height=&#34;645&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/schematic_poormans_seven_segment_hubc3862dac8b35084a2eb907574a7df76_62161_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/schematic_poormans_seven_segment_hubc3862dac8b35084a2eb907574a7df76_62161_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Schematic for ATTiny2313a Seven Segment display&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;132&#34;
    data-flex-basis=&#34;318px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;PoorMans_Seven_Segment.pdf&#34; &gt;PDF Schematic Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://circuitmaker.com/Projects/77BEF137-9137-430F-81A3-6B6F78F57DEB&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;View on CircuitMaker&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;code&#34;&gt;Code&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * PoorMansSevenSegment.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * A bodge program to run a seven segment without a BCD - 7 segment display decoder
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Created: 15/05/2016 6:50:30 PM
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Author : Nat
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define F_CPU 8000000UL &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//CPU speed, remove clockdiv/8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;avr/io.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;util/delay.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//binary representations of binary required to light seven segment 0-9
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mb&#34;&gt;0b11111100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b01100000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11011010&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mb&#34;&gt;0b11110010&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b01100110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b10110110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b10111110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11100000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11111110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11100110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;DDRB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//Data Direction Register, set all bits high
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;//change output of entire portb register to above hex (inverted, as its common anode and LED on requires sinking current.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;PORTB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=~&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;_delay_ms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;end-result&#34;&gt;End result&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/seven_segment_poorman.jpg&#34;
  width=&#34;795&#34;
  height=&#34;1200&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/seven_segment_poorman_hu018b86b423c8ee8d819f5d88e50bd969_403130_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/seven_segment_poorman_hu018b86b423c8ee8d819f5d88e50bd969_403130_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Seven segment display, poorman style&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;66&#34;
    data-flex-basis=&#34;159px&#34;
  
&gt;
&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Error with device 0x000102 whilst programming AVR</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-device-00102/</link>
        <pubDate>Sat, 14 May 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-device-00102/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-device-00102/device_0x000102_avr_reset_short_teaser.png" alt="Featured image of post Error with device 0x000102 whilst programming AVR" /&gt;&lt;h2 id=&#34;device-is-read-correctly-the-first-time-but-fails-to-be-read-on-subsequent-reads&#34;&gt;Device is read correctly the first time but fails to be read on subsequent reads&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m building an AVR target board for a few different flavours of AVR to make my life easier.&lt;/p&gt;
&lt;p&gt;I had some &lt;em&gt;real fun&lt;/em&gt; trying to read the data-sheet pins back to front whilst soldering down the sockets, and had to have more than one go at getting the ATMega328P socket wired up correctly.&lt;/p&gt;
&lt;p&gt;I was using Atmel Studio 7 to read the device ID of various AVR chips I had on my board. When suddenly it would work on the initial read after power up - but subsequent reads would fail with the device ID being returned reading &lt;code&gt;0x000102&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-device-00102/device_0x000102_avr_reset_short.png&#34;
  width=&#34;805&#34;
  height=&#34;374&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-device-00102/device_0x000102_avr_reset_short_hu525d38fc0e7772734b6a0ff259679fce_26308_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-device-00102/device_0x000102_avr_reset_short_hu525d38fc0e7772734b6a0ff259679fce_26308_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Picture of Atmel Studio 7 returning devide 0x000102 after a reset line short to ground&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;215&#34;
    data-flex-basis=&#34;516px&#34;
  
&gt;
&lt;/p&gt;
&lt;h2 id=&#34;reset-line-short-to-ground-stopping-reset-line-returning-to-high-post-programming&#34;&gt;Reset line short to ground stopping reset line returning to high post-programming&lt;/h2&gt;
&lt;p&gt;I had introduced a short on the reset line to ground when fixing my wiring. This was causing the reset pin to be low regardless of what the programmer did.&lt;/p&gt;
&lt;p&gt;This makes sense - the initial read works OK as the reset line is LOW. But the AVR chip never leaves programming mode until reset returns to HIGH. This is the reason we add pullups to the reset line.&lt;/p&gt;
&lt;p&gt;With the reset pullup being forced LOW all the time, the AVR never leaves programming mode, and a second programming attempt fails as the AVR is not reset back to the start of its programming phase.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Responsive Images in Jekyll</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/jekyll-responsive-images/</link>
        <pubDate>Tue, 10 May 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/jekyll-responsive-images/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/jekyll-responsive-images/Code.jpg" alt="Featured image of post Responsive Images in Jekyll" /&gt;&lt;h2 id=&#34;responsive-images-the-jekyll-way&#34;&gt;Responsive images, the Jekyll way&lt;/h2&gt;
&lt;p&gt;One of the first things I did in my exploration of Jekyll was to go away from using GitHub to generate the site. The first limitation that frustrated me was the inability to use plugins. Currently, I only use one plugin that I couldn&amp;rsquo;t use on GitHub - which relates to responsive images.&lt;/p&gt;
&lt;p&gt;I shoot most of my pictures that I&amp;rsquo;m using for the site on my DSLR - which means I&amp;rsquo;m getting large pictures. I export from Lightroom via a preset I have setup. However, the process of resizing images for the web is an additional step in publishing a post. I want to be able to toss the image into a folder, type out some text in Notepad++, and upload the site without worrying about image size, resizing, srcset, etc.&lt;/p&gt;
&lt;p&gt;Without plugins, this means that all the images you have on your site are going to be resized in the browser - which is a big detractor for page load speed and general usability of the site.&lt;/p&gt;
&lt;p&gt;So I set out to find a plugin that would do responsive images (via srcset or picture tags) as well as automatically resizing the images, so I didn&amp;rsquo;t have to worry about anything except the parent image.&lt;/p&gt;
&lt;h2 id=&#34;jekyll-picture-tags&#34;&gt;Jekyll-picture-tags&lt;/h2&gt;
&lt;p&gt;After a bit of searching, I found three candidates for creating responsive images.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/wildlyinaccurate/jekyll-responsive-image&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Jekyll-responsive-images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/robwierzbowski/jekyll-picture-tag&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Jekyll-picture-tags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/netlify/jekyll-srcset&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Jekyll-srcset&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I found Jekyll-srset broken as of May 2016, and it did not generate multiple images. I couldn&amp;rsquo;t get Jekyll-responsive-images to run properly either.&lt;/p&gt;
&lt;p&gt;Jekyll-picture-tags works a treat after some setup. Unfortunately, it has poor error messages (generic Ruby messages) and was tough to debug.&lt;/p&gt;
&lt;p&gt;After installing into my &lt;code&gt;gemfile&lt;/code&gt;, I ended up on the following addition to &lt;code&gt;_config.yml&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;picture:
  source: &amp;#34;images&amp;#34;
  output: &amp;#34;images/resize&amp;#34;
  markup: &amp;#34;picture&amp;#34;
  presets:
    default:
      ppi: [1, 1.5, 2.0]
      source_medium:
        media: &amp;#34;(min-width: 40em)&amp;#34;
        width: &amp;#34;600&amp;#34;
      source_default:
        width: &amp;#34;600&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote class=&#34;book-hint info&#34;&gt;
  &lt;b&gt;Info:&lt;/b&gt; Ensure your indentation is correct if copying a config - misalignment&amp;rsquo;s will give you a dreaded generic error message &lt;code&gt;Liquid Exception: undefined method [] for nil:NilClass in _drafts/JekyllAnchors.md/#excerpt&lt;/code&gt;
&lt;/blockquote&gt;

&lt;blockquote class=&#34;book-hint warning&#34;&gt;
  &lt;b&gt;Warning:&lt;/b&gt; Also ensure your &lt;code&gt;base-url&lt;/code&gt; in &lt;code&gt;_config.yml&lt;/code&gt; is set to an empty string &amp;quot;&amp;quot; (&lt;code&gt;base-url:   &amp;quot;&amp;quot;&lt;/code&gt;). Without this, the images won&amp;rsquo;t be found or load correctly, even if it generates correctly.
&lt;/blockquote&gt;

&lt;p&gt;After much fiddling and debugging, I had it working. I decided to add it to my shortcuts in Notepad++ using &lt;a class=&#34;link&#34; href=&#34;https://github.com/erinata/FingerText&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;FingerText&lt;/a&gt;. I came up with the following code, which also allowed me to have an alt and title text in the tag.&lt;/p&gt;
&lt;p&gt;FingerText enables me Notepad++ users to write blocks of text with a single keyword (amongst other uses). So now when I type &lt;code&gt;respimage&lt;/code&gt; with a tab immediately after, the below code will be automatically inserted and the text between &lt;code&gt;$[![&lt;/code&gt; and &lt;code&gt;]!]&lt;/code&gt; will be selected upon each tab to allow me to enter the relevant details. Entering an Image Filename (from my /assets/images/ folder) and an Image title defines the image, and the Preset name will tell Jekyll-picture-tag which config branch to run - which dictates the which sets of images to include.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-liquid&#34; data-lang=&#34;liquid&#34;&gt;{% capture imagesrc %}$[![Image_Filename]!]{% endcapture %}
{% capture imagetitle %}$[![Image_Title]!]{% endcapture %}
&amp;lt;a href=&amp;#34;/assets/images/{{ imagesrc }}&amp;#34;&amp;gt;{% picture $[![Preset_name]!] {{ imagesrc }} alt=&amp;#34;{{ imagetitle }}&amp;#34; title=&amp;#34;{{ imagetitle }}&amp;#34; %}&amp;lt;/a&amp;gt;
{: .text-center}
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote class=&#34;book-hint warning&#34;&gt;
  &lt;b&gt;Warning:&lt;/b&gt; Jekyll-picture-tag also hates spaces in picture filenames. Not that you should have spaces in filenames anyway, but that&amp;rsquo;s another thing I stumbled on.
&lt;/blockquote&gt;

&lt;p&gt;I now have images that (should) be responsive for mobile and desktop, and I don&amp;rsquo;t have to do the resizing myself.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>First AVR LED blinky</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/</link>
        <pubDate>Thu, 05 May 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_attiny_2313a_first_blinky.jpg" alt="Featured image of post First AVR LED blinky" /&gt;&lt;h2 id=&#34;testing-out-new-avr-gear&#34;&gt;Testing out new AVR Gear&lt;/h2&gt;
&lt;p&gt;Well, I’ve received the new programmers I ordered. Amongst them was the &lt;a class=&#34;link&#34; href=&#34;http://www.atmel.com/tools/atatmel-ice.aspx&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Atmel ICE&lt;/a&gt;, which I have chosen to be the first thing I would test.&lt;/p&gt;
&lt;p&gt;I’ve been meaning to get fully into MCU development, but I have to say that the Arduino craze didn’t really grab me. A sketch? Shield? Buy pre-assembled gear and push it together, copy and paste code?&lt;/p&gt;
&lt;p&gt;Pass. I prefer to code, learning and assembling circuitry myself and learning code from examples.&lt;/p&gt;
&lt;p&gt;I’m actually struggling a bit to find decent tutorials for MCU programming (I can’t be looking in the right places). However, it wasn’t too hard to figure out the pinout of the Atmel-ICE and compare to the pinout of the ATtiny 2313A using the data-sheets. I build a miniature shield that plugged in over the top of the MCU and had a neat little 6-pin plugin header (I may cover it in another post).&lt;/p&gt;
&lt;blockquote class=&#34;book-hint info&#34;&gt;
  &lt;b&gt;Info:&lt;/b&gt; The Atmel-ICE data-sheet nicely doesn’t include the direction of the tab in the user guide. The pinout on the user guide doesn’t include the tab on the 6-pin connector. I have added it to the data-sheet image below - the tabbed connector is on the side of MISO, SCK and RESET (for SPI programming)
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/atmel_ice_SPI_pinout_clarified.png&#34;
  width=&#34;206&#34;
  height=&#34;100&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/atmel_ice_SPI_pinout_clarified_hue9c08831f19e3c45bc457bd14b623727_3651_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/atmel_ice_SPI_pinout_clarified_hue9c08831f19e3c45bc457bd14b623727_3651_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Pinout of Ateml-ICE SPI 6 pin wire clarified with tab connector&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;206&#34;
    data-flex-basis=&#34;494px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;So after plugging in the programmer I confirmed all was well in Atmel Studio 7. &lt;code&gt;Tools -&amp;gt; Device programming&lt;/code&gt; gets you to the device programming screen, and selecting &lt;code&gt;Atmel-ICE&lt;/code&gt; tool and your chosen device (in my case I had the ATTiny 2313A, so I selected &lt;code&gt;ATtiny2313a&lt;/code&gt; from the device selection). The interface is &lt;code&gt;ISP&lt;/code&gt; and you can click Apply.&lt;/p&gt;
&lt;p&gt;Once this has been selected, you should be able to click on Read for the device signature. If it reads an address and target voltage, you have succeeded.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/atmel_studio_check_device_id.png&#34;
  width=&#34;763&#34;
  height=&#34;231&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/atmel_studio_check_device_id_hu3165ed16cc1b0970999c2b5db3e5a8fd_13264_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/atmel_studio_check_device_id_hu3165ed16cc1b0970999c2b5db3e5a8fd_13264_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Atmel Studio 7 Device programming screen confirming Device signature for ATtiny2313a&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;330&#34;
    data-flex-basis=&#34;792px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;I proceeded to load up a blinky led program to confirm all was well, and well, all was well.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_attiny_2313a_first_blinky.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;795&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_attiny_2313a_first_blinky_hu49ba83949d675dc6df701e038fdae511_287207_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_attiny_2313a_first_blinky_hu49ba83949d675dc6df701e038fdae511_287207_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;ATtiny 2313A dual-led blinking circuit&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;150&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Out of curiosity, I was interested to know the maximum frequency this would have out of the box on the output pins with no &lt;code&gt;_delay_ms()&lt;/code&gt;, with its default 1Mhz clock cycle (8Mhz internal oscillator with the CKDIV8 fuse clocking it down to 1MHz)&lt;/p&gt;
&lt;p&gt;Whilst I did leave it with two I/O operations per cycle, I did come up with a frequency of 103khz.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_stock_max_freq_103khz.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;795&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_stock_max_freq_103khz_huc755c4aec7c2ca909a660ba5465e9920_316907_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_stock_max_freq_103khz_huc755c4aec7c2ca909a660ba5465e9920_316907_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;DS1054z showing 103khz for AVR blinking circuit&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;150&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Nexus 6P Pocket Dial woes</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/6p-pocketdial-woes/</link>
        <pubDate>Tue, 03 May 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/6p-pocketdial-woes/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/6p-pocketdial-woes/nexus-6p-bend.png" alt="Featured image of post Nexus 6P Pocket Dial woes" /&gt;&lt;h2 id=&#34;nexus-6p-keeps-pocket-dialing&#34;&gt;Nexus 6P keeps pocket dialing&lt;/h2&gt;
&lt;p&gt;I love my Nexus 6P. It’s a fantastic android phone and easily the best phone I’ve ever owned (despite the almost excellent experience with my Samsung Galaxy S4). The Nexus 6P is perfect for someone who wants a non-bloated OS/ROM but also still excellent hardware.&lt;/p&gt;
&lt;p&gt;Also, the phone is encouraging me to be social. Like, calling my friends from my pocket whilst there at work. Sorry, Crossy.&lt;/p&gt;
&lt;p&gt;I’ve been scratching my head and finally found out the root settings that were causing the pocket dialing.&lt;/p&gt;
&lt;h2 id=&#34;fixing-pocket-dialing&#34;&gt;Fixing pocket dialing&lt;/h2&gt;
&lt;p&gt;Finally figured out the pocket dialing settings that were causing me the woes. Many people complain about ambient display waking up the phone in your pocket, and then from there the phone getting random touches from your leg and thus pocket dialing.&lt;/p&gt;
&lt;p&gt;In my case, that wasn’t actually the whole story. My issue was actually the &lt;code&gt;Tap to wake&lt;/code&gt; being set to on. This setting wakes the device if it detects a double-tap on the screen whilst it’s off. So yeah, pocket dial city - I don’t remember my S4 being this touchy-feely on the screen.&lt;/p&gt;
&lt;p&gt;Ensure both are off and you should be fine.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/6p-pocketdial-woes/6P_settings_display_dbltap_ambient.png&#34;
  width=&#34;1440&#34;
  height=&#34;2560&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/6p-pocketdial-woes/6P_settings_display_dbltap_ambient_hu5e5dd59c099fd0dc1f6caed10ac7526e_136730_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/6p-pocketdial-woes/6P_settings_display_dbltap_ambient_hu5e5dd59c099fd0dc1f6caed10ac7526e_136730_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Image of Nexus 6P settings that should be disabled to stop pocket dialing&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;56&#34;
    data-flex-basis=&#34;135px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Unfortunately, Ambient Display has been pretty poor on Andriod so far. It should be quite good - but I’ve found it difficult to use effectively. It is quite difficult to move it enough if it’s just sitting on your desk to activate ambient. I&amp;rsquo;t seemed to display every time you didn’t care about it - and none of the times it did.&lt;/p&gt;
&lt;p&gt;Time (and patches) will tell if this feature is built into anything as good as Moto Display.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Docking a PuTTY window into Notepad&#43;&#43;</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/ssh-terminal-in-notepadpp/</link>
        <pubDate>Sun, 01 May 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/ssh-terminal-in-notepadpp/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/ssh-terminal-in-notepadpp/putty_teaser.png" alt="Featured image of post Docking a PuTTY window into Notepad&#43;&#43;" /&gt;&lt;h2 id=&#34;challenge-of-developing-in-jekyll-via-remote-linux-server&#34;&gt;Challenge of developing in Jekyll via remote Linux server&lt;/h2&gt;
&lt;p&gt;During development of this site, I came across too many limitations with using Jekyll on Windows. You can use Jekyll in Windows with &lt;a class=&#34;link&#34; href=&#34;https://github.com/madhur/PortableJekyll&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PortableJekyll&lt;/a&gt;, but I found the Windows environment still limited Jekyll. Mainly ImageMagick for using responsive images, which isn’t worth the hassle of setting up on Windows. I decided it was easier to spool up a Debian VM on my virtual server to install Gem/Ruby/Jekyll on. This lets me keep the website code on my NAS (allowing for easy cloud backup), code on Windows, and run Jekyll on Linux.&lt;/p&gt;
&lt;p&gt;However, swapping back and forward between a terminal and the website code to site build was annoying, so I decided to see if I could ‘dock’ a PuTTY terminal into Notepad++&lt;/p&gt;
&lt;h2 id=&#34;adding-a-putty-terminal-into-notepad&#34;&gt;Adding a Putty Terminal into Notepad++&lt;/h2&gt;
&lt;p&gt;I’ve been using &lt;a class=&#34;link&#34; href=&#34;https://notepad-plus-plus.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Notepad++&lt;/a&gt; to develop in Windows for quite some time now. It’s a fantastic little program for us Windows people. A docked PuTTY window would greatly improve my workflow.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/ssh-terminal-in-notepadpp/putty_terminal_in_npp2.png&#34;
  width=&#34;1179&#34;
  height=&#34;941&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/ssh-terminal-in-notepadpp/putty_terminal_in_npp2_hu7d34ed4b4e283d1ea3b71933d17998e7_99800_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/ssh-terminal-in-notepadpp/putty_terminal_in_npp2_hu7d34ed4b4e283d1ea3b71933d17998e7_99800_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Picture of Notepad&amp;#43;&amp;#43; with attached PuTTY terminal&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;125&#34;
    data-flex-basis=&#34;300px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;To do the same as I have above, it’s actually pretty simple.&lt;/p&gt;
&lt;p&gt;Download:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Plink&lt;/a&gt; - PuTTY command line&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Ansicon&lt;/del&gt; - (Git repo defunct) Ansi escape sequence converter (to convert Linux CLI escape codes to Windows CLI, else the terminal doesn&amp;rsquo;t work well)&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://sourceforge.net/projects/nppconsole/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;nppconsole&lt;/a&gt; - Notepad++ console plugin.
&lt;blockquote class=&#34;book-hint warning&#34;&gt;
  &lt;b&gt;Warning:&lt;/b&gt; I had to use the older &lt;code&gt;11.53&lt;/code&gt; ansicon version under Windows 10 x64, the later versions crashed frequently.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The do the following&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Extract &lt;em&gt;NPPConsole&lt;/em&gt; to your Notepad++ plugins directory (Program Files x86/Notepad++/Plugins)&lt;/li&gt;
&lt;li&gt;Restart Notepad++ if it&amp;rsquo;s running&lt;/li&gt;
&lt;li&gt;Unzip and copy &lt;em&gt;plink&lt;/em&gt; and &lt;em&gt;ansicon&lt;/em&gt; to a folder of your choosing (I put them both in the Notepad++ folder as it&amp;rsquo;s where the CLI defaults to, and I’m lazy)&lt;/li&gt;
&lt;li&gt;Open a CLI at the Notepad++ folder and run &lt;code&gt;ansicon.exe plink.exe -ssh user@location -pw yourpasword&lt;/code&gt;, replacing the relevant parts with your user/server IP/password.&lt;/li&gt;
&lt;li&gt;All going well, you can now replicate that command in Notepad++. Open Notepad++, select &lt;em&gt;Plugins -&amp;gt; NppConsole&lt;/em&gt; (should be there if you restarted and copied the dll correctly). Run the command and you are set!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you have a saved profile in PuTTy you can replace the command with &lt;code&gt;ansicon plink -ssh SESSION_NAME&lt;/code&gt; , replacing &lt;code&gt;SESSION_NAME&lt;/code&gt; with your sessions name from the PuTTY dialogue. This works with key authentication as well, which I much prefer to use. This also saves you the risk of keeping a plaintext password in a potentially insecure location.&lt;/p&gt;
&lt;blockquote class=&#34;book-hint info&#34;&gt;
  &lt;b&gt;Info:&lt;/b&gt; You can use the plugin Nppexec as well instead of NppConsole - but I prefer Nppconsole for this.
&lt;/blockquote&gt;

&lt;p&gt;You now have a working CLI in Notepad++ that can call an SSH session. I wrote a few batch scripts, so I just have to run &lt;code&gt;site-dev&lt;/code&gt; in Windows to jump to my Linux VM that contains Jekyll, then &lt;code&gt;./site-dev&lt;/code&gt; to run a bash script to call up Jekyll in dev mode. Already having made a &lt;code&gt;site-push&lt;/code&gt; bash to push the site to Amazon AWS, so I don’t need to leave Notepad++ to do any development work.&lt;/p&gt;
&lt;p&gt;I couldn’t get Ctrl-C to work with either NppConsole or NppExec, both terminate the command without sending SIGTERM or similar to the PuTTY. Let me know if you figure out a way around this, as it means it’s difficult to gracefully terminate Jekyll. Workaround below.&lt;/p&gt;
&lt;h2 id=&#34;workaround-for-no-ctrl-c-to-exit-jekyll&#34;&gt;Workaround for no Ctrl-C to exit Jekyll&lt;/h2&gt;
&lt;p&gt;My workaround for this has become to have a PuTTY terminal open just for stopping Jekyll. This isn’t as bad as it sounds. Just write a bash script to kill ruby as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pgrep ruby &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote class=&#34;book-hint warning&#34;&gt;
  &lt;b&gt;Warning:&lt;/b&gt; This will kill all ruby threads! Note this if you often have other ruby threads often running
&lt;/blockquote&gt;

&lt;p&gt;I saved it as &lt;code&gt;site-kill&lt;/code&gt;. My workflow is &lt;code&gt;site-dev&lt;/code&gt; for the development of this site (with dev flags for config, etc.), &lt;code&gt;site-push&lt;/code&gt; to rebuild the site from scratch and push to AWS. The new &lt;code&gt;site-kill&lt;/code&gt; kills off any ruby threads.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/ssh-terminal-in-notepadpp/ctrl_c_workaround.png&#34;
  width=&#34;932&#34;
  height=&#34;458&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/ssh-terminal-in-notepadpp/ctrl_c_workaround_huf87992d0dc7f47f66ab8f82d597439e6_35490_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/ssh-terminal-in-notepadpp/ctrl_c_workaround_huf87992d0dc7f47f66ab8f82d597439e6_35490_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Picture of using external ssh script to kill jekyll window instead of killing notepad&amp;#43;&amp;#43; CLI&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;203&#34;
    data-flex-basis=&#34;488px&#34;
  
&gt;
&lt;/p&gt;
&lt;h2 id=&#34;bonus---markdown-highlighting-in-notepad&#34;&gt;Bonus - Markdown highlighting in Notepad++&lt;/h2&gt;
&lt;p&gt;The default colours finally made me crack during writing this post. Too much white! The language highlighting file I had for Markdown didn’t play ball with custom styles.&lt;/p&gt;
&lt;p&gt;I found a language highlighting file for Markdown on &lt;a class=&#34;link&#34; href=&#34;https://github.com/Edditoria/markdown_npp_zenburn&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub&lt;/a&gt; that had a file for the Zenburn colour scheme. This is what you can see in the screenshots above. So much better!&lt;/p&gt;
</description>
        </item>
        <item>
        <title>W.E.P 853d clone soldering station</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/</link>
        <pubDate>Mon, 25 Apr 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_overview.jpg" alt="Featured image of post W.E.P 853d clone soldering station" /&gt;&lt;h2 id=&#34;time-for-an-upgrade-from-cheap-solder-pen-to-cheap-solder-station&#34;&gt;Time for an upgrade, from cheap solder pen to cheap solder station.&lt;/h2&gt;
&lt;p&gt;After living with an old non-temperature controlled soldering iron for years I decided it was time to upgrade. I had been using a Goot PX232 for a long time, and before that some Jaycar $15 iron that was only just passable as a soldering iron.&lt;/p&gt;
&lt;p&gt;Now, despite the fact I &lt;em&gt;should&lt;/em&gt; be getting a decent brand, I decided to try a cheap eBay clone. I found a &amp;lsquo;W.E.P 853D Soldering Station/Hot Air Gun/DC Power supply&amp;rsquo; on eBay, within Australia. Few days later I have it in my grubby hands.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been perfectly happy with the operation. I&amp;rsquo;ve had it now for a few months with no issues.&lt;/p&gt;
&lt;p&gt;The soldering iron has tips that fit over the cartridge, it heats up quite nicely. It comes with a large variety of tips (conical, chisel, wedge) and sizes. The iron holder is pretty lousy and the tip will hit the rear of the case and lean against it. I&amp;rsquo;ve continued to use my old iron holder due to this. Its such a relief to be using decent bits now after struggling along with conical for so long.&lt;/p&gt;
&lt;p&gt;The iron heats up to 300° C within 47 seconds, so on that side it&amp;rsquo;s not so great, unfortunately.&lt;/p&gt;
&lt;p&gt;The hot-air gun comes with a few tips to have wider/smaller airflow.&lt;/p&gt;
&lt;p&gt;The power supply I only used a little, but it was accurate to its displayed measurements. I haven&amp;rsquo;t had much experience at measuring power supply ripple so will skip that for now, but I can&amp;rsquo;t say I&amp;rsquo;ve noticed or seen much ripple on my oscilloscope.&lt;/p&gt;
&lt;h2 id=&#34;teardown&#34;&gt;Teardown&lt;/h2&gt;
&lt;p&gt;Finally, that&amp;rsquo;s out of the way. I had to have a look see inside - would it be complete cheap Shenzhen market garbage? Or would it be somewhat passable. More importantly, was it a Yihua station with a different name like I suspected?&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_overview.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;795&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_overview_hu45b04c46da18a4228ede64e15a5bcfcf_214574_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_overview_hu45b04c46da18a4228ede64e15a5bcfcf_214574_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;WEP 853D soldering station view from front&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;150&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Presentation was quite nice. My preference is the black and gold to the gaudy blue and yellow others have. Buttons have a nice tactile feel to them and knobs are firmly stuck on and feel OK considering. LCD is clear and bright.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_power.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;795&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_power_hu69ccab16872f1199e8d1590778e9be78_313121_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_power_hu69ccab16872f1199e8d1590778e9be78_313121_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;WEP 853D soldering station transformer internal section&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;150&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;I won&amp;rsquo;t profess to be any good at a teardown, but the transformer seemed OK, earthed down to chassis with decent connectors. Power transistor is well secured (housed on the rear of the chassis). I know people have concerns about cheap Chinese equipment such as this being a fire hazard - but I didn&amp;rsquo;t see anything that concerned me. I&amp;rsquo;ve seen worse build quality from gear built in better countries and companies that was worse.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_mid.jpg&#34;
  width=&#34;795&#34;
  height=&#34;1200&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_mid_hu0ef121f7a3cbafd5768a0ae06b3d1117_362611_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_mid_hu0ef121f7a3cbafd5768a0ae06b3d1117_362611_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;WEP 853D soldering station mid-section PCB&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;66&#34;
    data-flex-basis=&#34;159px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;PCB in the middle of the board hosts some TRIACS, bridge rectifier, MMOC3041 optocouplers, and various passives. Caps are no name (&lt;a class=&#34;link&#34; href=&#34;http://www.jiaweicheng.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Jwco&lt;/a&gt;) garbage, but at least the TRIACS have heat sinks. A single LM723 voltage regular sits on the board. Soldering seemed perfectly fine, looks wave soldered (or at least reflowed)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_frontpanel.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;795&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_frontpanel_hub5b04cbd893a806c6515110cc59471ae_370829_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/wep-853d-clone-soldering-station/wep_853d_frontpanel_hub5b04cbd893a806c6515110cc59471ae_370829_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;WEP 853D soldering station mid-section PCB&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;150&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;The control panel has two S3F94C4EZZ MCU&amp;rsquo;s and two LED display drivers (TM1620 &amp;amp; TM1628). Can&amp;rsquo;t determine the manufacture for the MCU&amp;rsquo;s, I get either a Samsung or Zilog part - I&amp;rsquo;ll leave you to guess which I think is the more likely manufacturer. Not much else happening there, soldering continues to look fine. I can&amp;rsquo;t see any post-production fixes or anything untoward dodgy - if I had been given the photos to look at without knowing where it came from it would look visually OK to me.&lt;/p&gt;
&lt;p&gt;Wait a minute here - the control PCB has a silk-screen designator of &amp;lsquo;YH852DV5A&amp;rsquo;. Clearly the same control board as the Yihua model. After some googling I found an &lt;a class=&#34;link&#34; href=&#34;http://www.eevblog.com/forum/reviews/new-toy-yihua-853dplus-rework-station/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;EEVBlog post&lt;/a&gt; regarding the Yihua which showed a photo with an identical control board, but what to me looked like a significantly worse power board.&lt;/p&gt;
&lt;p&gt;Meanwhile, whilst I wait to see if Shenzhen lets me down again I will continue to enjoy my nifty little soldering station.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>LCD Haul</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/lcd-haul/</link>
        <pubDate>Fri, 22 Apr 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/lcd-haul/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/lcd-haul/Working_salvaged_lcd_hd44780_teaser.jpg" alt="Featured image of post LCD Haul" /&gt;&lt;h2 id=&#34;workplace-preps-to-throw-out-300-phone-units&#34;&gt;Workplace preps to throw out 300+ phone units&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve upgraded our phone system for the entire business at work. When I piled the old Ericsson desk phone into the box they had set up to return the old phones the thought hit me - there’s a lot of speakers in the 300 odd phones that are being thrown out. Wait, forget that - I bet this LCD is generic.&lt;/p&gt;
&lt;p&gt;So I took a few home and tore them down - and what do you know, but the LCD is a HD44780 based. I politely informed the IT dept they no longer needed an external contractor the throw them out, I would take them, thank you.&lt;/p&gt;
&lt;p&gt;I wanted to ensure I could get it working before grabbing them all. While I am yet to receive the MCU programming kits I’ve ordered, so I found an old Arduino Mega I had lying around from the 3D printer build. Whilst this should have been a simple check, Murphy, of course, got me - the ribbon cable pin pitch width was just too small for me to solder on my own ribbon cable to break out onto a breadboard. I had a few goes but the two sizes of ribbon cable I had on hand were the right width and bending the pins to neatly marry up with the solder pads just wasn’t working for me.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/lcd-haul/box_of_old_phones.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;1604&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/lcd-haul/box_of_old_phones_hua3e6dcff578a1910a1742cbe9c1b2f77_196617_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/lcd-haul/box_of_old_phones_hua3e6dcff578a1910a1742cbe9c1b2f77_196617_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;A cardboard box containing old phones with LCD screens&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;74&#34;
    data-flex-basis=&#34;179px&#34;
  
&gt;
&lt;/p&gt;
&lt;h2 id=&#34;getting-a-salvaged-10-pin-hd447800-lcd-working&#34;&gt;Getting a salvaged 10 pin HD447800 LCD working&lt;/h2&gt;
&lt;p&gt;My solution to break it out was to slice up the individual wires from one of the actual ribbon cables from the phone and solder it to a 12 pin header. The challenge here was that most HD4480’s are 16-pin - and this puppy had a 12 pin input. I did notice that 2 pins weren’t apparently connected by a quick scan of the PCB, and assuming it was actually a 10 pin LCD some googling revealed the following pinout.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/lcd-haul/Working_salvaged_lcd_hd44780.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;1600&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/lcd-haul/Working_salvaged_lcd_hd44780_hu3c5a1bead15a5cbaabe1db327abf4b3e_304344_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/lcd-haul/Working_salvaged_lcd_hd44780_hu3c5a1bead15a5cbaabe1db327abf4b3e_304344_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;A working LCD wired to a breadboard displaying characters&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;75&#34;
    data-flex-basis=&#34;180px&#34;
  
&gt;
&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1: Gnd
2: VCC (5v)
3: Contrast (10k pot)
4: RS
5: R/W
6: E
7: DB4
8: DB5
9: DB6
10: DB7
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And the header of the Arduino Liquidcrystal library includes where to connect the pins of the Arduino to the LCD.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;From there it’s easy enough to connect the dots. So no backlight, but a perfectly working 2x20 LCD.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/lcd-haul/LCD_HD44780_breakoiut_cable_mod.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;1600&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/lcd-haul/LCD_HD44780_breakoiut_cable_mod_hu3c5a1bead15a5cbaabe1db327abf4b3e_279012_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/lcd-haul/LCD_HD44780_breakoiut_cable_mod_hu3c5a1bead15a5cbaabe1db327abf4b3e_279012_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Quick mod to breakout small ribbon cable into breadboard for LCD HD44780&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;75&#34;
    data-flex-basis=&#34;180px&#34;
  
&gt;
&lt;/p&gt;
</description>
        </item>
        <item>
        <title>New Site</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/new-site/</link>
        <pubDate>Sat, 09 Apr 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/new-site/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/new-site/Code.jpg" alt="Featured image of post New Site" /&gt;&lt;h2 id=&#34;new-site-hits-the-internet&#34;&gt;New Site hits the Internet&lt;/h2&gt;
&lt;p&gt;Finally found the inspiration to build a nice personal site. I&amp;rsquo;ve been toying with &lt;a class=&#34;link&#34; href=&#34;https://www.wordpress.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Wordpress&lt;/a&gt; for some time, but it&amp;rsquo;s quite bloated for a nice basic site. And then there&amp;rsquo;s the security hassles, addons, database setup, theme setup, etc. It&amp;rsquo;s so far beyond what I want to be doing for a personal site it&amp;rsquo;s not funny.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve wanted to be getting posts back online about projects and tinkering I&amp;rsquo;m always doing, so that will be the aim for this site. I&amp;rsquo;ve also been looking for some time for a better layout to be able to post about projects. The default blogging layout to be &lt;em&gt;inadequate&lt;/em&gt; for something project like, or anything that is posted about over time. Making a visitor have to browse multiple posts to piece together the history of one project really doesn&amp;rsquo;t work.&lt;/p&gt;
&lt;p&gt;With what I&amp;rsquo;m crafting here, I will be able to have static pages for projects that can be appended to over time to add up to one larger page per project. Most likely with blog posts for updates or miscellaneous stuff that fits on the site. I&amp;rsquo;ll also be planning to write up some mini-guides for things I&amp;rsquo;ve come across in my hobby projects.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve gone with an &lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;AWS&lt;/a&gt; approach, along with using &lt;a class=&#34;link&#34; href=&#34;https://jekyllrb.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Jekyll&lt;/a&gt;. This gives me a simpler way of posting and updating a site without the big CMS overhead, and after skipping over static site generators as being probably more effort than their worth, I went back to check out Jekyll, then using Jekyll with S3 and AWS. And that was the end of that search.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;thoroughly&lt;/em&gt; enjoy the ease of use of Markdown for writing HTML and if you haven&amp;rsquo;t checked it out and have some basic HTML background, definitely check it out.&lt;/p&gt;
&lt;p&gt;Now its time go get cracking writing up all the projects past and present and getting the site filled out.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
