<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Render on Mark B Tomlinson</title>
    <link>https://markbtomlinson.com/tags/render/</link>
    <description>Recent content in Render on Mark B Tomlinson</description>
    <generator>Hugo -- 0.161.1</generator>
    <language>en</language>
    <copyright>Copyright ©2012–2026, Mark B Tomlinson; all rights reserved. Privacy Statement -</copyright>
    <lastBuildDate>Thu, 14 May 2026 22:46:47 +0200</lastBuildDate>
    <atom:link href="https://markbtomlinson.com/tags/render/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Changed the Feed Parameter</title>
      <link>https://markbtomlinson.com/post/2026/2026-05-15-changed-the-feed-parameter/</link>
      <pubDate>Fri, 15 May 2026 13:50:57 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2026/2026-05-15-changed-the-feed-parameter/</guid>
      <description>In the config.yaml</description>
      <content:encoded><![CDATA[<p>I don&rsquo;t know how this affects images but I turned on:</p>
<p><code>ShowFullTextinRSS: true</code></p>
<p>I added this line in the config.yaml</p>
<p>I really don&rsquo;t care if it show the full post in the RSS, and personally I like that function when I am brwsing feeds.</p>
<p>But please bare with me as I test this feature, until I get images showing as I like&hellip;</p>
<p><img alt="terminal" loading="lazy" src="/assets/terminal-mark-b-tomlinson-01.webp"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Evening Doodle 26/5/14</title>
      <link>https://markbtomlinson.com/post/2026/2026-05-14-evening-doodle/</link>
      <pubDate>Thu, 14 May 2026 22:46:47 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2026/2026-05-14-evening-doodle/</guid>
      <description>A spherical abstraction mechanical model.</description>
      <content:encoded><![CDATA[<p><img alt="Kugel doodle" loading="lazy" src="/assets/renders/kugel-doodle-06.webp" title="Metallic ball triangulated ball shaped object with protruding bits and pipes around the surface"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Social Media Posting II</title>
      <link>https://markbtomlinson.com/post/2026/2026-05-13-social-media-posting-ii/</link>
      <pubDate>Wed, 13 May 2026 12:28:55 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2026/2026-05-13-social-media-posting-ii/</guid>
      <description>In regard to my recent Note on posting.</description>
      <content:encoded><![CDATA[<p>I made a note: <a href="/notes/2026/2026-05-13-social-media-posting/">Social Media Posting</a> post in the middle of the night:</p>
<blockquote>
<p>I have noticed a distinct decline in interactions on Mastodon recently, the last and only social media platform I still use&hellip;.</p>
</blockquote>
<p>and after some feed back and thought I decided I would do a Post:</p>
<h2 id="to-post-here-or-mastodon">To post here or Mastodon</h2>
<p>I am now leaning towards posting <em>Notes</em> on here and then linking them over onto my <a href="https://graphics.social/@mbt3d">Mastodon</a>. This will allow me more control and I will have them in a nice list and searchable within this Blog.</p>
<p>I think I will still post images, my renders and photographs, directly to Mastodon. This will help keep the bandwidth down on this site and all followers on there to see them more easily Knowing my fickle nature I will change my mind and post here too, but for now it is a plan.</p>
<p>In the long term it is my intention to have some form of portfolio on here, even it is just a series of posts indexed in the <a href="/tags/">Tags</a> section of this blog. I haven&rsquo;t found a suitable portfolio for the <em>theme</em> I am using so, that&rsquo;s looking likely. I don&rsquo;t like posting images over on the Mastodon server either, for the same reasons I mentioned with the <em>notes</em> posting.</p>
<p>I like Mastodon, but I also like my Blog, and want to become less dependant on third party sites for posting. I would still need a window on the Web and Mastodon is my preferred porthole. One day I hope to set up my own instance, as much for a challenge as for any other reason, I know a few who have done it and it appeals to me, perhaps in a <em>masochistic</em> way.</p>
<p>Anyway to sum up I am going to post <em>Notes</em> from here to <a href="https://graphics.social/@mbt3d">Mastodon</a> whilst still posting directly there where it feels more practical or efficient. I will continue posting images directly there for now, but that may change.</p>
<p>To wrap up tangled web I am weaving here is a little render of a Torus Knot I made earlier this month:</p>
<p><img alt="torus" loading="lazy" src="/assets/26/knot.webp" title="Torus knot model"></p>
]]></content:encoded>
    </item>
    <item>
      <title>HUGO Limited RSS</title>
      <link>https://markbtomlinson.com/post/2026/2026-05-10-hugo-limited-rss/</link>
      <pubDate>Sun, 10 May 2026 16:36:26 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2026/2026-05-10-hugo-limited-rss/</guid>
      <description>Using PaperMod Theme</description>
      <content:encoded><![CDATA[<h3 id="after-trying-various-tips-and-tricks-i-found-a-solution">After trying various tips and tricks, I found a solution.</h3>
<p>There were a lot of older posts claiming you could turn off the RSS in sections <em>frontmater</em> and on in some other. This I found out to be a fallacy, all I managed was to turn it off totally or on totally.</p>
<p>The solution does not lay in the <strong>frontmater</strong>, at least not for me, it lies in the <strong>rss.xml</strong> file in the <em>themes</em> directory.</p>
<p>The full path to the file will be: <code>&lt;webroot&gt;/themes/PaperMod/layouts/_default/rss.xml</code></p>
<p>This is of course for the <em>PaperMod</em> theme so your mileage may vary depending on your theme.</p>
<p>Once inside the file the line you are looking for is <code> {{- range $pages }}</code> on mine it was line 67 in the file.</p>
<p>Here is the surrounding code block:</p>
<pre tabindex="0"><code class="language-hugo" data-lang="hugo">    {{- with .OutputFormats.Get &#34;RSS&#34; }}
    {{ printf &#34;&lt;atom:link href=%q rel=\&#34;self\&#34; type=%q /&gt;&#34; .Permalink .MediaType | safeHTML }}
    {{- end }}
    {{- range $pages }}
    {{- if and (ne .Layout `search`) (ne .Layout `archives`) }}
</code></pre><p>Once you have the line located you need to edit it to read as follows, (backup now):</p>
<p><code> {{ range where (where .Site.Pages &quot;.Section&quot; &quot;post&quot;) &quot;Kind&quot; &quot;page&quot; }}</code></p>
<p>The <em>.Section</em> on mine was post, I have seen others use blog. It all depends on your setup, be prepared for a little trial and error, and remember that backup.</p>
<p>The net result of this is that only the <strong>post</strong> type of entry will end up in the <strong>RSS</strong> feed. The nice thing with <strong>HUGO</strong> is that you can check all this before deploying you blog updates. <strong>Vivaldi</strong> has a nice built in RSS reader that makes this very easy, just a tip, not a sales pitch.</p>
<p>Now remember the backup and don&rsquo;t come crying to me if it all goes pear shaped. Your terminal will show you if there is an error, syntax or otherwise, so keep it in view.</p>
<p>I want to play more later and see about adding extra code to have an RSS for other parts of this blog, but that is for another day.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Evening Doodle 26/5/08</title>
      <link>https://markbtomlinson.com/post/2026/2026-05-08-evening-doodle/</link>
      <pubDate>Fri, 08 May 2026 22:46:47 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2026/2026-05-08-evening-doodle/</guid>
      <description>A cubical extruded cube abstraction mechanical model.</description>
      <content:encoded><![CDATA[<p><img alt="Cubic doodle" loading="lazy" src="/assets/renders/cubical-07.webp" title="Cubical extruded cube shape in dark metal"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Evening Doodle 26/5/07</title>
      <link>https://markbtomlinson.com/post/2026/2026-05-07-evening-doodle/</link>
      <pubDate>Thu, 07 May 2026 22:46:47 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2026/2026-05-07-evening-doodle/</guid>
      <description>Fabric covered torus knotted 3d model.</description>
      <content:encoded><![CDATA[<p><img alt="Torus doodle" loading="lazy" src="/assets/renders/torus-05.webp" title="Fabric covered torus knotted tube in grey with a ring"></p>
]]></content:encoded>
    </item>
    <item>
      <title>My First Computer</title>
      <link>https://markbtomlinson.com/post/2026/2026-05-05-my-first-computer/</link>
      <pubDate>Tue, 05 May 2026 19:11:05 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2026/2026-05-05-my-first-computer/</guid>
      <description>44 years ago I got my first computer</description>
      <content:encoded><![CDATA[<p>I was thinking recently about computers, computing and programming. I realised that this year marks forty four years since I bought my first computer, a Dragon 32.</p>
<p>I had wanted to get a ZX Spectrum previously, but they were in short supply and so I waited until the Dragon 32 appeared on the market.</p>
<p>In 1981 a shipmate of mine who had a ZX80 and had just bought the new ZX81. These were the first personal computers I had seen, tiny plastic boxes with the worst keyboards ever invented. They weren&rsquo;t that cheap but the build quality certainly felt like it. Plug them into the TV and hook a cassette player load a bit of code and a whole new world opened up before our eyes.</p>
<p>I was in the Navy at the time and stationed all over the place and so ended up having to wait a year or so to get my first computer. Coincidentally I had been a computer watchman on a warship and was responsible to fixing the computer hardware when it failed. Back then it was all discrete components and one PCB (printed circuit board) contained only 2 logic gates, so the computer was large, hot and not very powerful. That was back at the end of the seventies, yea I am that old.</p>
<p>The Dragon was made in Wales, well to be fair it was assembled in Wales and based on a Tandy machine of the time. It was pretty powerful and had a nice keyboard, and it was on that I wrote my first BASIC computer program.</p>
<p>Over the years I have had quite a few machines including a BBC-B and quite a few PC&rsquo;s from 8086 CPU&rsquo;s on, but the Dragon remains special for it being the intro to computing and code.</p>
<p>In the early 90&rsquo;s I ended up at University as a mature student reading Computer Science, I had left school at seventeen so only had a couple of O-levels but I was accepted and finished the 3 years with an honours degree. During that time Java and the World Wide Web were launched, and I was lucky to be at college at the same time, so was one of the early users of both.</p>
<p>So there you go a little history of how I got into the world of computing and the machine that got me here forty fours years ago. (No idea what happened to the Dragon, I guess I sold it in an upgrade)</p>
<p><img alt="Dragon" loading="lazy" src="/assets/26/dragon_32.webp" title="Dragon 32 computer"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Blogging - Bubbles - Comments</title>
      <link>https://markbtomlinson.com/post/2026/2026-04-25-bbc/</link>
      <pubDate>Sat, 25 Apr 2026 12:39:37 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2026/2026-04-25-bbc/</guid>
      <description>Blogging, Bubbles &amp;amp; Comments</description>
      <content:encoded><![CDATA[<h2 id="blogging">Blogging</h2>
<p>As some may be aware I am quite a quiet fan of blogs and blogging. I like the low profile old school method of posting news information and updates.</p>
<p>No big companies in the background milking our content for the advertising cow. Just ordinary people posting their thoughts and ideas. Sometimes mundane, sometimes informative but always human.</p>
<p>AI blogging will come I suppose eventually, I think it may already be here in some form, though I haven&rsquo;t been mithered by it, yet!  I won&rsquo;t be partaking of it in any way shape or form. Someone mentioned in their blog they had stopped using M-Dash &lsquo;&rsquo;— &quot; punctuation as it is oft used by AI, I have no idea, also no reason not to believe them.</p>
<h2 id="bubbles">Bubbles</h2>
<p>I was recently made aware, from a <a href="https://kaigulliksen.com/bubbles-town-is-a-pretty-cool-place/">blog I follow</a>, of <a href="https://bubbles.town/">Bubbles</a> a Blogs directory gathered from around the Web. These are appear to be  non commercial in nature and are varied and assorted on numerous topics, follow the link to <a href="https://bubbles.town/about">read more about Bubbles</a> .</p>
<p>You will find a link in there on how to join in the adventure, I did, as I had subscribed to their feed a while back and was impressed with the variety and quality of the posts being syndicated. They haven&rsquo;t been live for too long but are really gathering a good head of steam now, for good reason.</p>
<h2 id="comments">Comments</h2>
<p>In the past I used to have a WordPress based blog, one of the first I had if I remember correctly, I ran it for years, but one day decided I didn&rsquo;t like the Database format of the system and so looked for something more along a Flat-File system, this is how I ended up on a HUGO blog, which I really like. Simple fast and posts all written in Markdown which I really love, thanks Mr Gruber! I have been using Markdown since John released it in the early 2000&rsquo;s.</p>
<p>One of the things I don&rsquo;t have on my current setup though is <em>Commenting</em> A couple of reasons but mostly to do with noise and cookie regulations, also self hosted comments would need a DB to be realistic. As I mentioned I don&rsquo;t want one on my server.</p>
<p>To this end I have been prompting people wishing to comment to do so over on Mastodon. So in that vain I will use this post linked on my <a href="https://graphics.social/@mbt3d">Mastodon</a>.</p>
<h3 id="finally">Finally:</h3>
<p>As is my wont, here is a little model I made recently:</p>
<p><img alt="double-cone-05" loading="lazy" src="/assets/26/double-cone-05.jpg" title="Double Cone 3d Model"></p>
]]></content:encoded>
    </item>
    <item>
      <title>My Virtual Bookshelf</title>
      <link>https://markbtomlinson.com/post/2026/2026-04-10-my-virtual-bookshelf/</link>
      <pubDate>Fri, 10 Apr 2026 19:03:45 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2026/2026-04-10-my-virtual-bookshelf/</guid>
      <description>Some books I have read over time</description>
      <content:encoded><![CDATA[<p>Over the last few years I have read and listened to many books.</p>
<p>I had kept a list of them on Goodreads site. Then one day in a fit of pique I decided to delete my account and of course the list. However I later decided it was more useful than I had thought at the time, and so opened a new account, reimporting my previously exported list not reimporting or maybe it did, it was hard to tell.</p>
<p>Recently one of my connections on Mastodon added a list of books on their site and I thought that is a good idea.</p>
<p>Implementing it on my Hugo site isn&rsquo;t ideal as it has to be in listed post format, where I would have liked a grid format with thumbnails linking to a note, but it still works as a reference of what I read and felt about the books.</p>
<p>I have added a few books today and intended to add more over time, not all the books I have read, but certainly the ones I read this year and perhaps a few from last.</p>
<p>The last I may just add as a job lot in one list, which I have as a Markdown table in any case, as there are far too many for me to do it one by one.</p>
<p>Below is a 3d model I made earlier this year for use on something like this post, it took a while but now it is posted and the <a href="/books/">bookshelf</a>  is hung on my blog.</p>
<p><img alt="3d render of an old book" loading="lazy" src="/assets/books/book-web-03.webp" title="3d Model render of an old book"></p>
]]></content:encoded>
    </item>
    <item>
      <title>March Of Time</title>
      <link>https://markbtomlinson.com/post/2026/2026-03-26-march-of-time/</link>
      <pubDate>Thu, 26 Mar 2026 12:34:05 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2026/2026-03-26-march-of-time/</guid>
      <description>Another month and nothing posted until now</description>
      <content:encoded><![CDATA[<h2 id="march-of-time">March Of Time</h2>
<p>March is nearly over and European Summer Time is just a few days away, and I haven&rsquo;t posted on here again. I missed February completely and so I was determined not to fail March. To that end here is a little post about nothing in particular to fill the gap.</p>
<p>To be fair though March went by quite quickly, I guess the depressing news cycle helped pass the time with its constant sabre rattling and doom scrolling headlines. Try as I might I find it hard not get caught up in it, mostly in the hope there is some good news and the end of the madness is on the horizon. Of course it isn&rsquo;t these things go on and on, powered by ego, greed, and stupidity. So no end in sight.</p>
<p>To help keep the remnants of my sanity going I am listening to books and modelling my doodles in Blender. This month I even opened my old copy of Substance Painter, not the Adobe version. The old tool is still working, for now, and I still enjoy creating with it. It really is a shame that one of the few great European based tools sold out to the US monopoly software house. Still hard to turn down a few hundred million dollars when it is offered, eh! Affinity, okay to be fair they went Down Under.</p>
<p>So to wrap up this little post here&rsquo;s one of the models I made this month, no idea what it does as I haven&rsquo;t pushed the button, yet!</p>
<p>Oh! Don&rsquo;t forget to set your clocks on Saturday, if you&rsquo;re in the zone.</p>
<p><img alt="Red-Cube" loading="lazy" src="/assets/26/cubic-thing-01.jpg" title="Red Cubic Push Button"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Dark Days</title>
      <link>https://markbtomlinson.com/post/2026/2026-01-24-dark-days/</link>
      <pubDate>Sat, 24 Jan 2026 15:23:43 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2026/2026-01-24-dark-days/</guid>
      <description>Keeping my mind busy to keep my mood up</description>
      <content:encoded><![CDATA[<h2 id="dark-days">Dark Days</h2>
<p>This year has not got off to a particularly good start, geopolitically at least, and do not worry this is not going to focus on that, it is only the basis for my current state of well-being.</p>
<p>I am not one to get involved with online discussions that involve anything much beyond my interest in Computer Graphics and 3D modelling in particular. That is not to say I am happy with what is happening, it is just that, for the sake of sanity, I am avoiding it as much as possible right now.</p>
<p>I pass my time modelling, mostly in Blender, and creating assets for myself, such as textures and labels. I also make little mesh objects such as tools and accessories, that I can reuse to add interest to my scenes.</p>
<p>This is not only cathartic but very good exercise in the &ldquo;use it or loose it&rdquo; sense. I also expand my knowledge of the tools I use and it helps to to keep my aging brain sharp.</p>
<p>I also listen to audiobooks, at the moment I am in Wyoming with a certain sheriff and his crazy posse. I find reading books harder and harder, I have always had a problem with books and small text in particular, with tablets it is easier as I can make the text larger, I am a pretty fast reader though, go figure.</p>
<p>I do not read as much these days but still love a good story, plus with listening I can do my modelling at the same time. I used to love listening to music but find I am less likely to do that in recent years. No idea why, it is just so.</p>
<p>I still like to get my head around a little programming exercise,  especially little scripts to automate any repetitive tasks, my pet hate is repetition and if I can script it I will.</p>
<p>I have no interest in doing it for money anymore just for fun. A big part of that is the need to support code one writes, which I have no interest in doing anymore either, I see a trend here..</p>
<p>Support concerns and a lack of interest is also the main reason I have removed stuff, I made and had up for sale, all in the name of a quiet life, the other was geopolitical.</p>
<p>So here you go a little light in the darkness, I modelled recently:</p>
<p><img alt="e-12-Light-bulb" loading="lazy" src="/assets/26/e12-led-bulb-15.jpg" title="E12 Electric lightbulb model"></p>
]]></content:encoded>
    </item>
    <item>
      <title>End Of An Era</title>
      <link>https://markbtomlinson.com/post/2026/2026-01-14-end-of-an-era/</link>
      <pubDate>Wed, 14 Jan 2026 19:26:24 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2026/2026-01-14-end-of-an-era/</guid>
      <description>After many years on Artstation</description>
      <content:encoded><![CDATA[<h2 id="end-of-an-era">End Of An Era</h2>
<p>For a long time now I have been meaning to delete my Artstation account. One reason I kept it around was that it was a link source of some images on my other website, the other was a lack of impetus.</p>
<p>I haven&rsquo;t used the place in a very long time. Posting just once in the last twelve months, and then only because I hadn&rsquo;t posted; very meta I know.</p>
<p>This month I final got around to deleting the account. Pretty easy for once and no hoops to jump through just a simple confirmation click.</p>
<p>Part of the reason I deleted it was to reduce my online presence and especially my use of US based sites. The political situation over there is exasperating, and any steps I can make to reduce my exposure will be welcome. I am fully aware that it will be impossible to fully pull out of US online services, they are too deeply ingrained in the Internet for that to happen, but small steps.</p>
<p>Last year I deleted all my Cloud storage data, Apple Google et al. The reasons for this are more to do with corporate trust and long term control. I am getting older and one day I won&rsquo;t be here and I have no wish to leave a massive IT clean up behind me. Why should anyone else have to deal with my online data, a few SSD drives and all my data is backed-up. I also deleted all my old archived emails, there were a lot and I am sure some will be missed but most not.</p>
<p>I wonder how many people actually think about what happens to their data after they are gone, after all most think they will live for ever, right. Not wishing to be morbid, just practical, I mean that bus may be just around the corner&hellip;</p>
<p>So there you go a little ramble in the realm of data, storage and retention, or not.</p>
<p>To wrap up here is a model of an imaginary storage device I made recently:</p>
<p><img alt="alt text" loading="lazy" src="/assets/26/Toon-SSD-10.png" title="SSD Drive Model"></p>
]]></content:encoded>
    </item>
    <item>
      <title>EOY!</title>
      <link>https://markbtomlinson.com/post/2025/2025-12-27-eoy/</link>
      <pubDate>Sat, 27 Dec 2025 22:20:10 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2025/2025-12-27-eoy/</guid>
      <description>End Of Year</description>
      <content:encoded><![CDATA[<p>And another year bites the dust:</p>
<p>This has not been a particularly pleasant year for many. The world seems to be on the verge of some social implosion, it has become tiresome and depressing. Most, I think, hope that the next one will be better, personally however, I doubt it, and so don&rsquo;t want to think too much about it.</p>
<p>The global state of affairs has certainly affected my will and energy to post or comment, the later always a stressor due to others oft hostile reactions. So I spent most of the year doodling in Blender as a stress distractor and listened to a good number of books whilst modelling.</p>
<p>I made this little guy a couple of years ago and thought I&rsquo;d take the chance to update his apparel, scenery and render:</p>
<p><img alt="xmas-gnome-05" loading="lazy" src="/assets/25/xmas-gnome-05.jpg" title="Green Woollen Gnome 3d Model"></p>
<p>So quietly crossing fingers and pressing thumbs for a better year to come&hellip;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Month Of Dials</title>
      <link>https://markbtomlinson.com/post/2025/2025-08-31-month-of-dials/</link>
      <pubDate>Sun, 31 Aug 2025 10:26:43 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2025/2025-08-31-month-of-dials/</guid>
      <description>Spend a lot of time this month on old dials</description>
      <content:encoded><![CDATA[<h2 id="that-time-again">That time again:</h2>
<p>End of the month once again and as usual I have been lapse in my blog posting.</p>
<p>A combination of external distractions and a general lack of interest in everything at the moment. So, forcing myself, I have managed to do a last minute post, the image fits my lack of energy and I had fun making it, so all good.</p>
<p>I don&rsquo;t suppose next month will be any different as I seem to be in somewhat of a rut. Having said that I do like September and the end of the school holidays, which is a welcome change.</p>
<p><img alt="alt text" loading="lazy" src="/assets/25/dial_mAmp.jpg" title="Milliampere Dial"></p>
<p>There are a few more renders of this over on Mastodon if you are interested:</p>
<p><a href="https://graphics.social/@mbt3d/114981462062129916">Mastodon Dial Post</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Lack Of Interest</title>
      <link>https://markbtomlinson.com/post/2025/2025-07-18-lack-of-interest/</link>
      <pubDate>Fri, 18 Jul 2025 16:13:15 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2025/2025-07-18-lack-of-interest/</guid>
      <description>Sometimes I just really can&amp;#39;t be bothered</description>
      <content:encoded><![CDATA[<h2 id="lack-of-interest">Lack Of Interest</h2>
<p>I haven&rsquo;t posted in a while and missed June completely, I could come up with some esoteric reason but the truth is I just couldn&rsquo;t be arsed. I have a lot of external things on my mind at the moment and writing a post for the web isn&rsquo;t high on my list of things to do. That said I do hold with the idea of posting regularly even it isn&rsquo;t anything of particular import.</p>
<p>I have been busy though, I wouldn&rsquo;t say productive as that is a relative term, but busy with bits and pieces. Mostly making little assets in Blender for my collection. I do this as an exercise in the Blender tools and as a refresher for things I don&rsquo;t use too often.</p>
<p>I am pretty comfortable with Blender but I still find a lot of interesting and useful tips in the UI often hidden in the status-bar at the bottom of the screen, for example I had a look at the Bevel tool and found a nice shortcut for the bevel mode using the &lsquo;M&rsquo; Key. This allows one to change the Mode of the bevel from Width to Percentage. This can be done using the F9 key after the effect but that isn&rsquo;t optimal as the values will need re-entering as well.</p>
<p>So there you go a little update from me and a little tip from the status-bar in Blender.</p>
<p>Here&rsquo;s a little render of one of the aforementioned assets:</p>
<p><img alt="alt text" loading="lazy" src="/assets/25/knob-castellated-01.jpg" title="Small Square recessed knob asset"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Virtual Fruit</title>
      <link>https://markbtomlinson.com/post/2025/2025-05-18-virtual-fruit/</link>
      <pubDate>Sun, 18 May 2025 19:07:59 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2025/2025-05-18-virtual-fruit/</guid>
      <description>Spent some time on some old models</description>
      <content:encoded><![CDATA[<h2 id="some-virtual-fruit-brought-back-to-life">Some virtual fruit brought back to life</h2>
<p>Some years ago, back when I still using Modo as my daily driver, <em>what a stupid term</em>, as my main modelling tool, that&rsquo;s better, I made some fruit models.</p>
<p>I have been making a few icons for my stuff over the last years and thought it would be nice to bring the old fruit models over and freshen them up for use in Blender.</p>
<p>As an aside I want to bring all my old work over, into FBX, OBJ and or .blend, I learnt from experience, a long time ago, that propriety formats have an annoying limitation, a <em>use by date</em>.</p>
<p>Some of my early work in 3DS Max should still be accessible as there seem to be a few 3DS importers/convertors out there, but there are none, that I found, for Maya files whether they be .MA or .MB. Autodesk only offers an FBX convertor and as I no longer have access to Maya all those files, that I didn&rsquo;t export to FBX (for Substance Painter), are effectively lost to me. I suppose in a pinch I could ask someone still using Maya to do me a favour and convert them, but to be honest there aren&rsquo;t many and you know, I can&rsquo;t be bothered, but I digress:</p>
<p>So I now have a Pear, two Apples and a Banana. All resurrected and accessible in Blender and rendered in Cycles, By the way I love Cycles the it has become so good in the last few years.</p>
<p>So without further ado here they are:</p>
<p><img alt="Apples and Pear" loading="lazy" src="/assets/25/fruit-group-01.jpg" title="Apples and Pear Models renders"></p>
<p>I have to work a bit more on the Banana model so if you were hoping for a bit of yellow fruit, you&rsquo;re out of luck, for now at least.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Moving Instances</title>
      <link>https://markbtomlinson.com/post/2025/2025-05-04-moving-instances/</link>
      <pubDate>Sun, 04 May 2025 19:12:39 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2025/2025-05-04-moving-instances/</guid>
      <description>After two years on fosstodon.org I have moved</description>
      <content:encoded><![CDATA[<h2 id="moving-instances">Moving Instances</h2>
<p>For no particular reason I have decided to move Mastodon instances: from fosstodon.org to graphics.social</p>
<p>Okay partially it was due to my posting: I tend to post 3d renders and graphics and so it felt more fitting to be on an instance that appears to be ostensibly more graphical than software. Also I know a few folk on there and so assumed it would be a good fit.</p>
<p>There was some scandal on fosstodon.org recently which I didn&rsquo;t really notice and that was not in my reasoning, except superficially&hellip;</p>
<p>To celebrate the move I did a new render of  my Viking Egg with a rather more cheerful countenance than the previous one.</p>
<p><img alt="alt text" loading="lazy" src="/assets/25/viking-egg-29.jpg" title="Brown Grinning Viking Egg"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Hugo Update Problem</title>
      <link>https://markbtomlinson.com/post/2025/2025-05-02-hugo-update-problem/</link>
      <pubDate>Fri, 02 May 2025 12:11:50 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2025/2025-05-02-hugo-update-problem/</guid>
      <description>A missing template definitions breaks production builds in hugo v0.146.0</description>
      <content:encoded><![CDATA[<h2 id="hugo-post-after-update-fails">Hugo Post after update fails</h2>
<p>After updating to HUGO version v0.146.0 I was unable to run the compilation due to template definition errors.
I found the solution below and after correcting the lines shown in the diff all was working once again.</p>
<p>For those unfamiliar with diff the lines starting with a +green are the new line, the -red the old.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-diff" data-lang="diff"><span style="display:flex;"><span>diff --git a/layouts/partials/head.html b/layouts/partials/head.html
</span></span><span style="display:flex;"><span>index 3e55c67..ae6450a 100644
</span></span><span style="display:flex;"><span><span style="color:#f92672">--- a/layouts/partials/head.html
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+++ b/layouts/partials/head.html
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">@@ -150,8 +150,8 @@
</span></span></span><span style="display:flex;"><span> 
</span></span><span style="display:flex;"><span> {{- /* Misc */}}
</span></span><span style="display:flex;"><span> {{- if hugo.IsProduction | or (eq site.Params.env &#34;production&#34;) }}
</span></span><span style="display:flex;"><span><span style="color:#f92672">-{{- template &#34;_internal/google_analytics.html&#34; . }}
</span></span></span><span style="display:flex;"><span><span style="color:#f92672">-{{- template &#34;partials/templates/opengraph.html&#34; . }}
</span></span></span><span style="display:flex;"><span><span style="color:#f92672">-{{- template &#34;partials/templates/twitter_cards.html&#34; . }}
</span></span></span><span style="display:flex;"><span><span style="color:#f92672">-{{- template &#34;partials/templates/schema_json.html&#34; . }}
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+{{- partial &#34;google_analytics.html&#34; . }}
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+{{- partial &#34;templates/opengraph.html&#34; . }}
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+{{- partial &#34;templates/twitter_cards.html&#34; . }}
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+{{- partial &#34;templates/schema_json.html&#34; . }}
</span></span></span><span style="display:flex;"><span> {{- end -}}
</span></span><span style="display:flex;"><span>diff --git a/layouts/partials/templates/schema_json.html b/layouts/partials/templates/schema_json.html
</span></span><span style="display:flex;"><span>index dc3bfd6..8a4efb4 100644
</span></span><span style="display:flex;"><span><span style="color:#f92672">--- a/layouts/partials/templates/schema_json.html
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+++ b/layouts/partials/templates/schema_json.html
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">@@ -85,7 +85,7 @@
</span></span></span><span style="display:flex;"><span>     {{ (path.Join .RelPermalink .Params.cover.image ) | absURL }},
</span></span><span style="display:flex;"><span>     {{- end}}
</span></span><span style="display:flex;"><span>   {{- else }}
</span></span><span style="display:flex;"><span><span style="color:#f92672">-    {{- $images := partial &#34;partials/templates/_funcs/get-page-images&#34; . -}}
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+    {{- $images := partial &#34;templates/_funcs/get-page-images&#34; . -}}
</span></span></span><span style="display:flex;"><span>     {{- with index $images 0 -}}
</span></span><span style="display:flex;"><span>   &#34;image&#34;: {{ .Permalink }},
</span></span><span style="display:flex;"><span>     {{- end }}
</span></span><span style="display:flex;"><span>diff --git a/layouts/partials/templates/twitter_cards.html b/layouts/partials/templates/twitter_cards.html
</span></span><span style="display:flex;"><span>index 6b0d59b..a6e1d05 100644
</span></span><span style="display:flex;"><span><span style="color:#f92672">--- a/layouts/partials/templates/twitter_cards.html
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+++ b/layouts/partials/templates/twitter_cards.html
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">@@ -6,7 +6,7 @@
</span></span></span><span style="display:flex;"><span> &lt;meta name=&#34;twitter:image&#34; content=&#34;{{ (path.Join .RelPermalink .Params.cover.image ) | absURL }}&#34;&gt;
</span></span><span style="display:flex;"><span> {{- end}}
</span></span><span style="display:flex;"><span> {{- else }}
</span></span><span style="display:flex;"><span><span style="color:#f92672">-{{- $images := partial &#34;partials/templates/_funcs/get-page-images&#34; . -}}
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+{{- $images := partial &#34;templates/_funcs/get-page-images&#34; . -}}
</span></span></span><span style="display:flex;"><span> {{- with index $images 0 -}}
</span></span><span style="display:flex;"><span> &lt;meta name=&#34;twitter:card&#34; content=&#34;summary_large_image&#34;&gt;
</span></span><span style="display:flex;"><span> &lt;meta name=&#34;twitter:image&#34; content=&#34;{{ .Permalink }}&#34;&gt;
</span></span></code></pre></div><p>Link to the <a href="https://github.com/adityatelange/hugo-PaperMod/issues/1719">Original Post</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>May Day</title>
      <link>https://markbtomlinson.com/post/2025/2025-05-01-may-day/</link>
      <pubDate>Thu, 01 May 2025 22:31:26 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2025/2025-05-01-may-day/</guid>
      <description>Another day another month</description>
      <content:encoded><![CDATA[<h2 id="may-day">May Day</h2>
<p>It is the first of May or in the common parlance: May Day. The international workers day and a public holiday in most western countries.</p>
<p>I took the day as a day of rest and relaxation, enjoying the fine weather and relative peace and quiet for a change. The older I get, the more noisy humans irritate me and my ability to ignore them diminishes. Perhaps I am imagining it but I am sure world is just getting louder and more annoying.</p>
<p>Over the last week since easter I have been playing around with eggs and characters based on eggs. A fitting theme given the season and the tradition of Easter Eggs, I prefer the chocolate ones to the natural ones but that is neither here nor there.</p>
<p>So here is an egg on me:</p>
<p><img alt="A Egg Brown" loading="lazy" src="/assets/25/single-egg-01.webp" title="A little brown egg"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Summer Time Bug Fix</title>
      <link>https://markbtomlinson.com/post/2025/2025-04-01-summer-time-bug-fix/</link>
      <pubDate>Tue, 01 Apr 2025 19:37:18 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2025/2025-04-01-summer-time-bug-fix/</guid>
      <description>This is how I fixed the DST date problem</description>
      <content:encoded><![CDATA[<h2 id="the-problem">The problem</h2>
<p>The <code>date:</code> variable in <strong>HUGO</strong> needs to be actual, not in the past, for the post to register. I don&rsquo;t know yet why but that isn&rsquo;t important, only the solution is so&hellip;</p>
<p>The correct post date format in YAML is:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-YAML" data-lang="YAML"><span style="display:flex;"><span><span style="color:#f92672">date</span>: <span style="color:#e6db74">2025-04-01T19:37:18</span><span style="color:#ae81ff">+02</span>:<span style="color:#ae81ff">00</span>
</span></span></code></pre></div><p>The last part of the string <code>+02:00 </code> indicates UTC<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> plus 2 hours, which for my current location is CET +1 <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<h2 id="the-first-solution">The first solution</h2>
<p>After a little searching, for the wrong thing (UTC offsets) I came across the Python class: <code>time</code> and the function<code>time.daylight</code> specifically. This boolean function returns True if it is Summer Time and False if it is Winter Time, which allows to check the state in an if statement, thus:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>  <span style="color:#f92672">import</span> time
</span></span><span style="display:flex;"><span>  
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">if</span> time<span style="color:#f92672">.</span>daylight:
</span></span><span style="display:flex;"><span>    output_date <span style="color:#f92672">=</span> datetime<span style="color:#f92672">.</span>now()<span style="color:#f92672">.</span>strftime(<span style="color:#e6db74">&#34;%Y-%m-</span><span style="color:#e6db74">%d</span><span style="color:#e6db74">T%H:%M:%S+02:00&#34;</span>) <span style="color:#75715e"># Summer</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">else</span>:
</span></span><span style="display:flex;"><span>    output_date <span style="color:#f92672">=</span> datetime<span style="color:#f92672">.</span>now()<span style="color:#f92672">.</span>strftime(<span style="color:#e6db74">&#34;%Y-%m-</span><span style="color:#e6db74">%d</span><span style="color:#e6db74">T%H:%M:%S+01:00&#34;</span>) <span style="color:#75715e"># Winter</span>
</span></span></code></pre></div><p>This works perfectly well and is fairly efficient if a little verbose, and so I thought maybe I can make it shorter perhaps one line.</p>
<h2 id="the-second-solution">The second solution</h2>
<p>Given that the return value of the function call is a Boolean i.e. 0 or 1, I did a little string theory magic I came up with the following one liner:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>datetime<span style="color:#f92672">.</span>now()<span style="color:#f92672">.</span>strftime(<span style="color:#e6db74">&#34;%Y-%m-</span><span style="color:#e6db74">%d</span><span style="color:#e6db74">T%H:%M:%S+0&#34;</span> <span style="color:#f92672">+</span> str(time<span style="color:#f92672">.</span>daylight<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>) <span style="color:#f92672">+</span><span style="color:#e6db74">&#34;:00&#34;</span>)
</span></span></code></pre></div><p>This is a nice clean solution, although I will have to wait until October to know if it works for sure 😉</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Coordinated Universal Time&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Central European Time&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Summer Time Bug</title>
      <link>https://markbtomlinson.com/post/2025/2025-03-30-summer-time-bug/</link>
      <pubDate>Sun, 30 Mar 2025 15:29:17 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2025/2025-03-30-summer-time-bug/</guid>
      <description>My fancy little hugo post app and summer time</description>
      <content:encoded><![CDATA[<h2 id="a-bit-of-a-post-winter-bug">A bit of a post winter bug</h2>
<p>My little Hugo post creation app stopped working correctly this morning. The reason was the date formatting in the post <code>date:</code> variable. The code had the date formatted for GMT + 1 and now we have GMT + 2.</p>
<p>I haven’t checked what was happening, but assume the date must be in the future for it to fail to post. I can’t see it as a date in the past, which seems more logical given +1 instead of +2.</p>
<p>In any case I need to redo the date formatting to allow for summer time correctly, or just change it every six months. I will probably end up doing that, as I have other things to do.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I Have An Icon</title>
      <link>https://markbtomlinson.com/post/2025/2025-03-17-i-have-an-icon/</link>
      <pubDate>Mon, 17 Mar 2025 11:26:22 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2025/2025-03-17-i-have-an-icon/</guid>
      <description>Creating a Desktop Icon for my Shell Script</description>
      <content:encoded><![CDATA[<h2 id="how-i-did-it">How I did it</h2>
<p>I recently wrote a Python app for creating a basic HUGO post, <em>front matter</em> and post.md  file in content directory.</p>
<p>Then I decided to make an icon on the desktop to launch the code.</p>
<p>This is what I did:</p>
<p>These instructions are for <strong>MacOS</strong> not <strong>Windows</strong>:</p>
<p>The main thing is to create a shell script that runs the python file and then copy it to the desktop and remove any extension like .sh</p>
<p>Next <code>CMD I</code>  on the icon and drag a new icon into the properties, top left.</p>
<p>This is the contents of my <em>shell</em> script:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>    <span style="color:#ae81ff">1</span> <span style="color:#75715e">#!/bin/sh</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ae81ff">2</span> echo <span style="color:#e6db74">&#34;Running Post Creator&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ae81ff">3</span> cd /Users/mark/HugoPostApp
</span></span><span style="display:flex;"><span>    <span style="color:#ae81ff">4</span> python3 app.py
</span></span><span style="display:flex;"><span>    <span style="color:#ae81ff">5</span> echo <span style="color:#e6db74">&#34;Done&#34;</span>
</span></span></code></pre></div><p>This will then launch the terminal and run the script.</p>
<p>To close the terminal after running: go to the Terminal settings set <strong>When the shell exits:</strong>  to close window on clean exit.</p>
<p><img alt="Terminal Settings" loading="lazy" src="/assets/25/terminal-close.webp" title="Terminal Settings"></p>
<p>I may share the python HUGO post creation file eventually, once I am happy it is stable.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Stage Lighting</title>
      <link>https://markbtomlinson.com/post/2025/stage-lighting/</link>
      <pubDate>Sat, 08 Mar 2025 11:52:11 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2025/stage-lighting/</guid>
      <description>Experimenting with some scene lighting for product visualisation</description>
      <content:encoded><![CDATA[<p>A brief recap of the week thus far:</p>
<p>I have been busy experimenting with Blender again, this time on cosmetics and such as way to try out some different rendering environments. Normally I use a basic three point lighting set up with an HDR image as the fill light. Usually something fairly flat like a cloudy sky to give a balanced background light.</p>
<p><img alt="HDR stage lighting in the 3D scene" loading="lazy" src="/assets/25/hdr-scene.webp" title="HDR stage lighting in the 3D scene"></p>
<p>I decided it was time to do some product shots, cosmetics in this case, and they work better with a more artificial set up. Generally two side light panels and over head to light the stage in the rear and a low level fill light on the front. This set up gives nice highlights on the sides of the object and helps lift it from the background. This is important if the background is white and the object is also light.</p>
<p>The scene setup I used in the demos here is shown below.</p>
<p><img alt="Over view of the stage lighting in the 3D scene" loading="lazy" src="/assets/25/light-stage-03.webp" title="Over view of the stage lighting in the 3D scene"></p>
<p>The result is shown below and the background is extremely clean and so ideal for product shots.</p>
<p><img alt="Reflective cylinder and sphere catching the scene lights" loading="lazy" src="/assets/25/light-stage-02.webp" title="Reflective 3d model cylinder and sphere"></p>
<p>The models above are exceptionally reflective in this instance to show off the lighting positions.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Zoom Image on Click in HUGO</title>
      <link>https://markbtomlinson.com/post/2025/image-zoom-hugo/</link>
      <pubDate>Wed, 26 Feb 2025 10:36:57 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2025/image-zoom-hugo/</guid>
      <description>Image zooming script for HUGO and PaperMod.</description>
      <content:encoded><![CDATA[<p><img alt="Extended Footer" loading="lazy" src="/assets/25/extended-footer.png#center" title="Location of extended-footer"></p>
<p>Edit the extend_footer.html ,location shown above, and add the following snippet to the file. This will then zoom the image when clicked and set the background to a darker grey.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-js" data-lang="js"><span style="display:flex;"><span>{{<span style="color:#f92672">-</span> <span style="color:#75715e">/* Footer custom content area start */</span> <span style="color:#f92672">-</span>}} {{<span style="color:#f92672">-</span> <span style="color:#75715e">/* Insert any custom code
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">web-analytics, resources, etc. here */</span> <span style="color:#f92672">-</span>}}
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;</span><span style="color:#a6e22e">script</span>
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://cdnjs.cloudflare.com/ajax/libs/medium-zoom/1.0.6/medium-zoom.min.js&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">integrity</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;sha512-N9IJRoc3LaP3NDoiGkcPa4gG94kapGpaA5Zq9/Dr04uf5TbLFU5q0o8AbRhLKUUlp8QFS2u7S+Yti0U7QtuZvQ==&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">crossorigin</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;anonymous&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">referrerpolicy</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;no-referrer&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&gt;&lt;</span><span style="color:#960050;background-color:#1e0010">/script&gt;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;</span><span style="color:#a6e22e">script</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">images</span> <span style="color:#f92672">=</span> Array.<span style="color:#a6e22e">from</span>(document.<span style="color:#a6e22e">querySelectorAll</span>(<span style="color:#e6db74">&#34;.post-content img&#34;</span>));
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">images</span>.<span style="color:#a6e22e">forEach</span>((<span style="color:#a6e22e">img</span>) =&gt; {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">mediumZoom</span>(<span style="color:#a6e22e">img</span>, {
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">margin</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">0</span> <span style="color:#75715e">/* The space outside the zoomed image */</span>,
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">scrollOffset</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">40</span> <span style="color:#75715e">/* The number of pixels to scroll to close the zoom */</span>,
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">container</span><span style="color:#f92672">:</span> <span style="color:#66d9ef">null</span> <span style="color:#75715e">/* The viewport to render the zoom in */</span>,
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">template</span><span style="color:#f92672">:</span> <span style="color:#66d9ef">null</span> <span style="color:#75715e">/* The template element to display on zoom */</span>,
</span></span><span style="display:flex;"><span>      <span style="color:#75715e">/*background: &#34;rgba(50, 50, 50, 1)&#34;,*/</span>
</span></span><span style="display:flex;"><span>    });
</span></span><span style="display:flex;"><span>  });
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/script&gt;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>{{<span style="color:#f92672">-</span> <span style="color:#75715e">/* Footer custom content area end */</span> <span style="color:#f92672">-</span>}}
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Just A Pot</title>
      <link>https://markbtomlinson.com/post/2025/a-pot-that-is-it/</link>
      <pubDate>Mon, 24 Feb 2025 19:39:12 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2025/a-pot-that-is-it/</guid>
      <description>Posting for the sake of potting</description>
      <content:encoded><![CDATA[<p>This month has been an unadulterated mess, geopolitically, but I am not here to post about that, politics are one thing I try to keep off line there is more than enough Troll fodder out there already.</p>
<p>It has however been very nerving and frankly bewildering. So much of a distraction in fact I ended the month with little more than a pot, that&rsquo;s it a pot. Perhaps because the whole month has been so damned potty.</p>
<p>Also; I wanted to post something, anything, anything at all, even if it&rsquo;s just a clay plant pot.</p>
<h3 id="so-here-you-are-a-pot">So here you are a pot</h3>
<p><img alt="a clay plant pot" loading="lazy" src="/assets/25/plant-pot-07.webp" title="A 3d model of a clay plant pot CC-0"></p>
<p>I release it CC-0 feel free to use it as you will.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Small Computer Parts</title>
      <link>https://markbtomlinson.com/post/2025/computer-components/</link>
      <pubDate>Wed, 29 Jan 2025 15:23:50 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2025/computer-components/</guid>
      <description>Modelling small computer parts</description>
      <content:encoded><![CDATA[<p>I had some fun recently modelling some diverse computer components.</p>
<p>It started when I spotted a Ryzen CPU online and thought it would be interesting to recreate it in 3D. Initially I created an SVG plan of the chip from which to model.</p>
<hr>
<p><img alt="CPU" loading="lazy" src="/assets/25/ryzen-cpu-10.webp" title="3D model of a Ryzen CPU"></p>
<hr>
<p>After the CPU I decided to have a go at a little Solid State Drive. I have this on in my machine so that seemed apt.
<img alt="SSD" loading="lazy" src="/assets/25/samsung-ssd-03.webp" title="3D model of a Samsung Sold State Drive"></p>
<hr>
<p>Finally and for no particular reason I went with a Floppy Disk, in this instance a three and a half inch version.
<img alt="FD" loading="lazy" src="/assets/25/floppy-08.webp" title="3D model of a 3.5 inch floppy disk"></p>
<p>Here is a SVG of the Floppy Disk I made and used as the modelling template.</p>
<p><img alt="FD" loading="lazy" src="/assets/25/3.5-Floppy-Disk.svg" title="Scalable Vector Graphic (SVG) of a 3.5 inch floppy disk CC-0"></p>
<p>And finally, here is the SVG of the Ryzen CPU I also made as a modelling template.</p>
<p><img alt="FD" loading="lazy" src="/assets/25/AMD-CHIP.svg" title="AMD Ryzen 9x series CPU SVG image CC-0"></p>
]]></content:encoded>
    </item>
    <item>
      <title>First Post of the Year</title>
      <link>https://markbtomlinson.com/post/2025/first-post-2025/</link>
      <pubDate>Sun, 05 Jan 2025 19:39:00 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2025/first-post-2025/</guid>
      <description>A new year and a new post for the new year.</description>
      <content:encoded><![CDATA[<p><img alt="Shader Ball and Cube" loading="lazy" src="/assets/25/rusty-ball-cube.jpg" title="A rust covered metal ball and cube thing">
I started the new year playing with some image textures for my models, in particular metal and rust:</p>
<h2 id="example-maps-used-above">Example maps used above</h2>
<p>As an example of some of the textures I made here is a Steel and Rust one used on the shader ball I made. If you wish you can right-click and download them and use them on your own work as you please:</p>
<h3 id="base-diffuse-colour">Base Diffuse Colour</h3>
<p><img alt="Base Colour" loading="lazy" src="/assets/25/3_steel_rust_and_wear_base_color.webp" title="Base Colour"></p>
<h3 id="roughness">Roughness</h3>
<p><img alt="Roughness" loading="lazy" src="/assets/25/3_steel_rust_and_wear_roughness.webp" title="Roughness"></p>
<h3 id="metallic">Metallic</h3>
<p><img alt="Metallic" loading="lazy" src="/assets/25/3_steel_rust_and_wear_metallic.webp" title="Metallic"></p>
<h3 id="height">Height</h3>
<p><img alt="Height" loading="lazy" src="/assets/25/3_steel_rust_and_wear_height.webp" title="Height"></p>
<hr>
<p><em>Comments are off on this site, if you wish to say something you are invited to do so via <a href="https://main.elk.zone/fosstodon.org/@mbt3d/113777876601959936">Mastodon</a></em></p>
]]></content:encoded>
    </item>
    <item>
      <title>Xmas Gnome 2024</title>
      <link>https://markbtomlinson.com/post/2024/this-years-gnome-redressed/</link>
      <pubDate>Sun, 15 Dec 2024 16:10:52 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2024/this-years-gnome-redressed/</guid>
      <description>A new look for my Christmas Gnome model</description>
      <content:encoded><![CDATA[<br>
<br>
<p>This year I went with a dark grey suit and hat, with the addition of a little colour in the form of the Christmas tree badge.
<img alt="alt text" loading="lazy" src="/assets/24/xmas-gnome.webp" title="Xmas Gnome model in a knitted suit">
<br>
<br></p>
<p>Here is a copy of the Christmas tree in the SVG format, feel free to copy and use as you wish.
<img alt="alt text" loading="lazy" src="/assets/24/xmas%20tree%20logo.svg#center" title="xmas tree - CC0 Public Domain">
<br>
<br>
Almost certainly this will be the last post of the year and so I wish you a peaceful Yuletide.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Nearly missed November</title>
      <link>https://markbtomlinson.com/post/2024/barrel-of-nothing/</link>
      <pubDate>Sat, 30 Nov 2024 15:59:02 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2024/barrel-of-nothing/</guid>
      <description>Better late than never.</description>
      <content:encoded><![CDATA[<p>I haven&rsquo;t posted at all this month, I have been busy though so to make it before December here is a little model I made at the end of last month:</p>
<p><img alt="alt text" loading="lazy" src="/assets/24/Wooden_Barrel.jpg" title="Wooden Barrel Model"></p>
<p>I don&rsquo;t think next month will be any better, we will see&hellip;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Blender Volume Shader</title>
      <link>https://markbtomlinson.com/post/2024/b3d-volume/</link>
      <pubDate>Tue, 01 Oct 2024 21:43:27 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2024/b3d-volume/</guid>
      <description>How to set up Volume shading on renders</description>
      <content:encoded><![CDATA[<p>Blender has nice newish shader node for doing Volumetric renders i.e. foggy, misty environments, called <strong>Principled Volume</strong>.</p>
<p>The way I have been doing it recently is to add a mesh cube around the object in the scene, see the image below.<br>
Tip: it helps to set the Cube <strong>Mesh Viewport Display</strong> to <strong>Display as Bounds</strong>.</p>
<p><img alt="alt text" loading="lazy" src="/assets/b3d-demo/top-view-volume-cube.webp" title="Volume Cube Top View"></p>
<p>The Shader connections are shown below, note the <strong>Surface</strong> input is empty, the only connection is to the <strong>Volume</strong>.
The settings I used in this demo are as shown and are a good start. The main tweaks are <strong>Density</strong> and <strong>Anisotropy</strong>, play with both to see the effect on the scene.</p>
<p><img alt="alt text" loading="lazy" src="/assets/b3d-demo/shader-node-connection.webp" title="Principled Volume Node"></p>
<p>And finally this is full render of the scene, the fog/mist is subtle but effective.</p>
<p><img alt="final render" loading="lazy" src="/assets/b3d-demo/battery-pack.jpg" title="Final Render of Scene"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Blender Bevel Miter Outer</title>
      <link>https://markbtomlinson.com/post/2024/blender-bevel-types/</link>
      <pubDate>Sat, 31 Aug 2024 12:05:58 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2024/blender-bevel-types/</guid>
      <description>Blender Bevel Types</description>
      <content:encoded><![CDATA[<p>Blender Bevels come with a few options that are worth checking out before applying them.
The interesting one for most use cases is the <strong>Miter Outer</strong> to change the spread pattern of the bevel on the outer edge.</p>
<p>The default one is <strong>Sharp</strong> and is shown below:
<img alt="Bevel Sharp" loading="lazy" src="/assets/24/bevel/bevel-sharp.webp" title="Blender Bevel Sharp"></p>
<p>The second one is an <strong>Arc</strong>:
<img alt="Bevel Arc" loading="lazy" src="/assets/24/bevel/bevel-arc.webp" title="Blender Bevel Arc"></p>
<p>And finally the <strong>Patch</strong>:
<img alt="Bevel Patch" loading="lazy" src="/assets/24/bevel/bevel-patch.webp" title="Blender Bevel Patch"></p>
<p>Personally I like the Arc as it gives nicely spread out geometry around the sides and results in less shading issues.</p>
<p>There are other options in the menu worth looking at but the Outer Miter is the most interesting for most cases.</p>
]]></content:encoded>
    </item>
    <item>
      <title>August a Hairy Month</title>
      <link>https://markbtomlinson.com/post/2024/learning-blender-hair/</link>
      <pubDate>Fri, 30 Aug 2024 15:16:34 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2024/learning-blender-hair/</guid>
      <description>I decided to try Blender&amp;#39;s hair system</description>
      <content:encoded><![CDATA[<p>Almost the end of the month of August and I haven&rsquo;t posted anything at all.<br>
So I managed to get one post in before I missed the deadline, a hair month indeed.
I have, as you may have guessed, been looking at the hair system.</p>
<p>I started with the old Particle system and them moved on to the new Geometry Nodes version that comes with Blender 4.2 and in my case the 4.2.1 LTS version.
After watching a short video or two, I managed to get some quite decent results.<br>
I will link to the videos at the end.</p>
<p>This one is just some random mechanical part that ended up looking a burner so I decided to add a fur wick to it just for the hell of it:
<img alt="alt text" loading="lazy" src="/assets/24/odd-box-02.jpg"></p>
<p>Links to the videos I watched:</p>
<p><a href="https://youtu.be/TnmCOeqfZ5o?si=fMNewtT8HORRCuFu">Create Dynamic Hair in Blender</a><br>
<a href="https://youtu.be/bIsJquzVsPY?si=C__cV2P03-DkBiI8">Get into Geometry Node Hair Fast</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Fix Windows Desktop Icon Spacing</title>
      <link>https://markbtomlinson.com/post/2024/windows-icon-spacing/</link>
      <pubDate>Tue, 23 Jul 2024 10:23:40 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2024/windows-icon-spacing/</guid>
      <description>How to reset Windows Desktop icons</description>
      <content:encoded><![CDATA[<p>I recently screwed up my Desktop Icons in Windows 11. I had been playing with the scaling factor and that had messed up the icon space scaling. The icons ended up with a massive hit size as shown above.</p>
<p>To reset the icon sizes all you need to do is edit the <strong>WindowMetrics</strong> in the <em>Windows Registry</em>.
Using the <em>Registry Editor</em> search for <em>IconSpacing</em> or follow the path in the image bellow. The default seems to be <strong>-1125</strong> and if you see a massive negative number then that is the problem.</p>
<p><img alt="alt text" loading="lazy" src="/assets/24/win/icon-spacing-regedit.png"></p>
<p>Reset both the <strong>IconSpacing</strong> and <strong>IconVerticalSpace</strong> to <strong>-1125</strong> or what ever looks good on your screen. On mine I went with a wider Horizontal <strong>-2525</strong> as the <em>default</em> was too cramped.</p>
<p>You will need to log out and back in again for the changes to take effect.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Editing Linux Grub Boot Loader</title>
      <link>https://markbtomlinson.com/post/2024/grub-boot-edit/</link>
      <pubDate>Sun, 21 Jul 2024 16:36:44 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2024/grub-boot-edit/</guid>
      <description>How to edit the Grub boot screen in Linux</description>
      <content:encoded><![CDATA[<h3 id="this-is-for-my-reference">This is for my reference</h3>
<p>I recently needed to revert the Kernel on my iMac/Linux machine. I had updated to the latest version, which caused a problem with the <em>Brightness</em> not working anymore. On an iMac that meant I had no way to adjust the screen, as it doesn&rsquo;t have any physical buttons.</p>
<p>I attempted to edit the <em>grub</em> file from the boot loader, but that didn&rsquo;t work as there doesn&rsquo;t seem to be an editor in the boot shell. So after booting up a very bright UI I edited from the main UI.</p>
<p>If you are wondering how to access the boot loader screen, mine wasn&rsquo;t showing by default, you will need to hit <strong>Escape</strong> as the machine boots up. Just keep tapping it on startup until the menu shows up.</p>
<p>My editable grub file is located in: <code>/etc/default/grub</code> <strong>Note</strong>: the main file is <code>/boot/grub/grub.cfg</code> <strong>Do not</strong> edit it though, the file clearly warns that it is automatically generated.</p>
<p>To edit the <code>/etc/default/grub</code> you will need to be <em>root</em>. Below is a copy of my grub file. The key lines are:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-zsh" data-lang="zsh"><span style="display:flex;"><span>GRUB_DEFAULT<span style="color:#f92672">=</span>saved
</span></span><span style="display:flex;"><span>GRUB_TIMEOUT<span style="color:#f92672">=</span><span style="color:#ae81ff">5</span>
</span></span><span style="display:flex;"><span>GRUB_SAVEDEFAULT<span style="color:#f92672">=</span>true
</span></span></code></pre></div><p>The first line sets the default to saved, the second sets the menu timeout before continuing, and the last line saves the last used as default.</p>
<p>After editing the file as root, save the file, and run <code>update-grub</code> to make changes.</p>
<p>This is my current grub file for reference:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-zsh" data-lang="zsh"><span style="display:flex;"><span><span style="color:#75715e"># If you change this file, run &#39;update-grub&#39; afterwards to update</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># /boot/grub/grub.cfg.</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># For full documentation of the options in this file, see:</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#   info -f grub -n &#39;Simple configuration&#39;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>GRUB_DEFAULT<span style="color:#f92672">=</span>saved
</span></span><span style="display:flex;"><span>GRUB_TIMEOUT_STYLE<span style="color:#f92672">=</span>menu
</span></span><span style="display:flex;"><span>GRUB_TIMEOUT<span style="color:#f92672">=</span><span style="color:#ae81ff">5</span>
</span></span><span style="display:flex;"><span>GRUB_DISTRIBUTOR<span style="color:#f92672">=</span><span style="color:#e6db74">`</span>lsb_release -i -s 2&gt; /dev/null <span style="color:#f92672">||</span> echo Debian<span style="color:#e6db74">`</span>
</span></span><span style="display:flex;"><span>GRUB_CMDLINE_LINUX_DEFAULT<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;quiet splash&#34;</span>
</span></span><span style="display:flex;"><span>GRUB_CMDLINE_LINUX<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;&#34;</span>
</span></span><span style="display:flex;"><span>GRUB_SAVEDEFAULT<span style="color:#f92672">=</span>true
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Uncomment to enable BadRAM filtering, modify to suit your needs</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># This works with Linux (no patch required) and with any kernel that obtains</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#GRUB_BADRAM=&#34;0x01234567,0xfefefefe,0x89abcdef,0xefefefef&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Uncomment to disable graphical terminal (grub-pc only)</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#GRUB_TERMINAL=console</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># The resolution used on graphical terminal</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># note that you can use only modes which your graphic card supports via VBE</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># you can see them in real GRUB with the command `vbeinfo&#39;</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#GRUB_GFXMODE=640x480</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Uncomment if you don&#39;t want GRUB to pass &#34;root=UUID=xxx&#34; parameter to Linux</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#GRUB_DISABLE_LINUX_UUID=true</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Uncomment to disable generation of recovery mode menu entries</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#GRUB_DISABLE_RECOVERY=&#34;true&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Uncomment to get a beep at grub start</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#GRUB_INIT_TUNE=&#34;480 440 1&#34;</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Virtual writing implements</title>
      <link>https://markbtomlinson.com/post/2024/pens-pencils-sharpener/</link>
      <pubDate>Thu, 18 Jul 2024 15:03:10 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2024/pens-pencils-sharpener/</guid>
      <description>Making some writing implements in Blender</description>
      <content:encoded><![CDATA[<p>I had some fun recently with some pens and pencils, not real but rather virtual. Although the models are for the most part simple enough it was still a nice learning experience.</p>
<p>I tried a few methods to model the pencils tip and in the end went with a Boolean cutter, which kind of fits with the real world. Basically a 3D pencil sharpener.</p>
<p>Next, I decided to model a Stabilo pen, as I happened to have one laying around on my desk. The pen was nice in its youth, but now old and drying out. It is too faint to be of much use other than light outlining and model reference.</p>
<p>Anyway here are some of the renders from my little writing episode:</p>
<p><img alt="Pencils" loading="lazy" src="/assets/24/pens/coloured-pencil-05.webp" title="Pencils">
<img alt="Pencil Sharpener" loading="lazy" src="/assets/24/pens/sharpener-pencil-01.webp" title="Pencil and Sharpener">
<img alt="Pencils" loading="lazy" src="/assets/24/pens/fat-pencil-04.webp" title="Pencils">
<img alt="Shaperner" loading="lazy" src="/assets/24/pens/sharpener-01.webp" title="Sharpener">
<img alt="Stabilo Pens" loading="lazy" src="/assets/24/pens/stabilo-13.webp" title="Stabilo Pen">
<img alt="Stabilo Pen" loading="lazy" src="/assets/24/pens/stabilo-22.webp" title="Stabilo Pen">
<img alt="Stabilo Pens" loading="lazy" src="/assets/24/pens/stabilo-23.webp" title="Stabilo Pen">
<img alt="Stabilo Pen" loading="lazy" src="/assets/24/pens/stabilo-17.webp" title="Stabilo Pens"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Boolean Toggle Node Group</title>
      <link>https://markbtomlinson.com/post/2024/boolean-node-grp/</link>
      <pubDate>Tue, 25 Jun 2024 11:28:27 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2024/boolean-node-grp/</guid>
      <description>A very simple node group to create a switch</description>
      <content:encoded><![CDATA[<p>I recently posted a quick video of a very basic and yet useful <em>Node Group</em> setup in <em>Blender</em>. I think it was a little esoteric and perhaps people didn&rsquo;t think it a serious post. It was serious and for me very useful. So I decided to explain the <em>Group</em> here and perhaps others may find it useful too.</p>
<h2 id="the-node-group">The Node Group</h2>
<p><img alt="alt text" loading="lazy" src="/assets/b3d/mbt-nrm-group.webp">
As you see there are no nodes inside the <em>Node Group</em> this is intentional as none are actually needed. The magic is done by the <strong>input</strong> connector, labelled <em>Toggle</em> above. See the settings for this below.</p>
<h2 id="add-an-empty-group">Add an Empty Group</h2>
<p>You may be wondering how the empty group is created:<br>
Blender doesn&rsquo;t have an empty <em>Node Group</em> in the Add menu, so you will need to make one. The easiest is to use a <strong>Value Node</strong>. Add it and then select it and hit <strong>CTRL-G</strong> to group it. Then remove the <strong>Value Node</strong> from within the Group and connect up as shown above:</p>
<h2 id="the-group-input-connector">The Group Input Connector</h2>
<p><img alt="alt text" loading="lazy" src="/assets/b3d/mbt-nrm-input.webp">
With the Node Group expanded (select the node and hit TAB if it isn&rsquo;t)<br>
Select the Group Input and in the N-Panel select the Group Tab. Change the input socket type to Boolean, it is the one called Toggle in the diagram above, the label isn&rsquo;t important, I used Toggle for clarity of use. The important part is that it is of <em>Type</em> Boolean.</p>
<h2 id="the-group-output-connector">The Group Output Connector</h2>
<p><img alt="alt text" loading="lazy" src="/assets/b3d/mbt-nrm-output.webp">
You can also change the output connector name and type at this time too, again the name should be something that makes sense and the type is up to you, I went with <strong>Float</strong> as Type as that is the colour type the <strong>Fac</strong> input is, so it matches.</p>
<h2 id="so-what-is-happening">So what is happening</h2>
<p>It may be a little confusing to find that an empty Group does anything at all, why is that.<br>
The answer is that the input connector has a Boolean value of True or False (One or Zero), this the reason the <strong>Checkbox</strong> appears on the <em>Node Group</em>. This is then outputted directly (Nothing in between the input and output) as True=1 or False=0. In effect an On/Off Toggle is created.</p>
<p>By the way: don&rsquo;t connect anything other than perhaps another Boolean to the input of the Node Group, the results won&rsquo;t be what you want, it effectively bypasses the node entirely.</p>
<h2 id="example-use-case-for-the-node">Example use case for the node</h2>
<p><img alt="alt text" loading="lazy" src="/assets/b3d/mbt-boolean-switch.webp"></p>
<p>Well there you go the magic explained, I hope.</p>
<p><a href="https://main.elk.zone/fosstodon.org/@mbt3d/112673476562953985">The original Mastodon post:</a></p>
<p>I can be reached on Mastodon: <a href="https://fosstodon.org/@mbt3d" title="Mark B Tomlinson">Mark B Tomlinson</a>. You can also subscribe to this Blog via its <a href="https://markbtomlinson.com/index.xml">RSS link</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Art Posts from Mastodon</title>
      <link>https://markbtomlinson.com/post/2024/masto-art-posts/</link>
      <pubDate>Fri, 21 Jun 2024 19:48:43 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2024/masto-art-posts/</guid>
      <description>Collection of old Mastodon posts.</description>
      <content:encoded><![CDATA[<p>Some Moi3d and Blender models, in no particular order:</p>
<p><img alt="D-Sub Plug" loading="lazy" src="/assets/masto/d-sub-01.jpg" title="D-Sub Plug">
<img alt="D-Sub Socket" loading="lazy" src="/assets/masto/d-sub-02.jpg" title="D-Sub Socket">
<img alt="Electric Motor Model" loading="lazy" src="/assets/masto/e-motor-05.jpg" title="Electric Motor Model">
<img alt="Elbow Joint Concept" loading="lazy" src="/assets/masto/elbow-01.jpg" title="Elbow Joint Concept">
<img alt="Sci-Fi concept" loading="lazy" src="/assets/masto/floptop-01.jpg" title="Sci-Fi concept">
<img alt="Industrial Laser Model" loading="lazy" src="/assets/masto/industrial-laser.jpg" title="Industrial Laser Model">
<img alt="Latch Concept" loading="lazy" src="/assets/masto/latch-01.jpg" title="Latch Concept">
<img alt="Latch Concept" loading="lazy" src="/assets/masto/latch-02.jpg" title="Latch Concept">
<img alt="Latch Concept" loading="lazy" src="/assets/masto/latch-04.jpg" title="Latch Concept">
<img alt="Abstract Sci-Fi Part" loading="lazy" src="/assets/masto/machine-part.jpg" title="Abstract Sci-Fi Part">
<img alt="Ring Latch Concept" loading="lazy" src="/assets/masto/ring-latch.jpg" title="Ring Latch Concept">
<img alt="Screw This" loading="lazy" src="/assets/masto/screw-this-01.jpg" title="Screw This, Thread practice piece">
<img alt="Sci-fi Panel" loading="lazy" src="/assets/masto/scy-panel-01.jpg" title="Sci-fi Panel modelled in Moi3d and rendered in Blender">
<img alt="Sci-fi Panel" loading="lazy" src="/assets/masto/scy-panel-05.jpg" title="Sci-fi Panel arrayed and deformed in Blender">
<img alt="Spar model" loading="lazy" src="/assets/masto/spar-10.jpg" title="Spar model">
<img alt="Spar model" loading="lazy" src="/assets/masto/spar-02.jpg" title="Spar model">
<img alt="Rope Connector Models" loading="lazy" src="/assets/masto/spar-01.jpg" title="Rope Connector Models">
<img alt="Abstract Spar Concept" loading="lazy" src="/assets/masto/sparty-01.jpg" title="Abstract Spar Concept">
<img alt="Abstract Connector Model" loading="lazy" src="/assets/masto/double-01.jpg" title="Abstract Connector Model">
<img alt="Default Cube Remodelled" loading="lazy" src="/assets/masto/cubism-01.jpg" title="Default Cube Remodelled">
<img alt="Abstract Glass model" loading="lazy" src="/assets/masto/twisty-01.jpg" title="Abstract Glass model"></p>
<p>I can be reached on Mastodon: <a href="https://fosstodon.org/@mbt3d" title="Mark B Tomlinson">Mark B Tomlinson</a>. You can also subscribe to this Blog via its <a href="https://markbtomlinson.com/index.xml">RSS link</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Blender Cut a Rounded Rectangle Demo</title>
      <link>https://markbtomlinson.com/post/2024/blender-lozenge-cut/</link>
      <pubDate>Thu, 20 Jun 2024 16:46:24 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2024/blender-lozenge-cut/</guid>
      <description>This will show how to cut a rounded rectangle capsule lozenge shape using Blender tools</description>
      <content:encoded><![CDATA[<h2 id="overview-and-prerequisites">Overview and Prerequisites</h2>
<p><img alt="Overview of stages involved" loading="lazy" src="/assets/b3d-demo/01-bld-overview.webp" title="Overview of stages involved">
This demonstration requires only one Add-On to be installed, it is one that ships with Blender by default, and it is called <em>Loop Tools</em>.</p>
<h2 id="1-create-the-loop-cuts">1. Create the Loop Cuts</h2>
<p>Add some loop cuts to create two vertices with at least four connected edges. In this example one vertical edge and two horizontal ones.
<img alt="Loop cuts" loading="lazy" src="/assets/b3d-demo/02-bld-loop-cuts.webp" title="Loop cuts"></p>
<h2 id="2-select-the-vertices">2. Select the Vertices</h2>
<p>Select two vertices top and bottom in this example.</p>
<p><img alt="alt text" loading="lazy" src="/assets/b3d-demo/03-bld-select-verts.webp" title="Select Vertices to Bevel"></p>
<h2 id="3-bevel-the-vertices">3. Bevel the Vertices</h2>
<p>Bevel the two vertices using <em>Ctrl+Shift+B</em> (Blender default mapping). Adjust the segments with the mouse wheel or in the dialog after creating. Change the Bevel <strong>Shape</strong> to something around <em>0.09</em> to form a rough circle.</p>
<p><img alt="alt text" loading="lazy" src="/assets/b3d-demo/04-bld-bevel-verts.webp" title="Bevel Vertices to form Circle"></p>
<h2 id="4-refine-the-circle">4. Refine the Circle</h2>
<p>With the circles still selected, right click on the mesh and with <em>Loop Tools</em> installed, select <strong>Circle</strong> to form a proper circular shape.
<img alt="alt text" loading="lazy" src="/assets/b3d-demo/05-bld-loop-tools-circle.webp" title="Use Loop Tools to clean up Circle"></p>
<h2 id="5-dissolve-the-faces">5. Dissolve the Faces</h2>
<p>This step is optional, and can be done after Step three, with the Face press X then select Dissolve Faces, <em>Ctrl X</em> is my Shortcut. This creates an N-Gon so it is up to you. I do it as the geometry is cleaner and easier to work with, do this and then rerun Loop Tools - Circle if you have problems in Step Four.</p>
<p><img alt="alt text" loading="lazy" src="/assets/b3d-demo/06-bld-disolve-faces.webp" title="Dissolve the faces"></p>
<h2 id="6-cut-the-side-edges">6. Cut the Side Edges</h2>
<p>Using the <strong>Knife Tool</strong>, <em>K</em> in default mapping, connect the two extreme vertices, left and right, to form the lozenge shape, do one side then right click and do the other, space to confirm and exit the tool.
<img alt="alt text" loading="lazy" src="/assets/b3d-demo/07-bld-knife-cut.webp" title="Join two vertices with Knife Tool"></p>
<h2 id="7-dissolve-faces">7. Dissolve Faces</h2>
<p>You now have the basic rounded lozenge shape, you can now select the polygons in the shape and dissolve the faces once more.
<img alt="alt text" loading="lazy" src="/assets/b3d-demo/08-bld-lozenge-faces.webp" title="Dissolve the faces"></p>
<h2 id="8-faces-after-dissolving">8. Faces after Dissolving</h2>
<p>The faces are dissolved to form a lozenge shaped N-Gon for further manipulation.
<img alt="alt text" loading="lazy" src="/assets/b3d-demo/09-bld-lozenge-disolve-face.webp" title="Dissolved faces"></p>
<h2 id="9-mark-border-edges">9. Mark Border Edges</h2>
<p>This step is optional but recommended as it helps with clean Normals. With the shape polygons selected right click and choose <strong>Mark Sharp</strong> from the menu.
<img alt="alt text" loading="lazy" src="/assets/b3d-demo/10-bld-mark-sharp.webp" title="Mark border edges sharp"></p>
<h2 id="10-inset-edges-to-bevel">10. Inset Edges to Bevel</h2>
<p>Next we will inset the faces first to form a Bevel. With the faces selected click on the Face Menu and choose Inset Face, shortcut I. Drag the mouse to change the offset from the edge and use Ctrl Drag to adjust the depth. Don&rsquo;t be too accurate as you can adjust the settings after in the dialog <em>F9</em>.
Set the <strong>Thickness</strong> and <strong>Depth</strong> to the same value to get a forty five degree angle, negative for inset. As show in the image.
<img alt="alt text" loading="lazy" src="/assets/b3d-demo/11-bld-inset-faces.webp" title="Inset faces to form Chamfer"></p>
<h2 id="11-inset-the-shape-into-the-mesh">11. Inset the shape into the Mesh</h2>
<p>Repeat the last step holding the Ctrl key to inset into the mesh, as shown in the image.
<img alt="alt text" loading="lazy" src="/assets/b3d-demo/12-bld-inset-faces-2.webp" title="Inset face to recess into Mesh"></p>
<h2 id="finally-to-refresh">Finally to Refresh</h2>
<h3 id="circles-to-lozenge">Circles to Lozenge</h3>
<p>Here are the first stages of marking the lozenge shape from two circles:
<img alt="alt text" loading="lazy" src="/assets/b3d-demo/13-bld-circle-lozenge.webp" title="Topology"></p>
<h3 id="inset-the-lozenge">Inset the Lozenge</h3>
<p>And here is the final shape inset into the Mesh:
<img alt="alt text" loading="lazy" src="/assets/b3d-demo/14-bld-circles-lozenge-inset.webp" title="Topology"></p>
<p>I can be reached on Mastodon: <a href="https://fosstodon.org/@mbt3d" title="Mark B Tomlinson">Mark B Tomlinson</a>. You can also subscribe to this Blog via its <a href="https://markbtomlinson.com/index.xml">RSS link</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>April a Month Of Moves</title>
      <link>https://markbtomlinson.com/post/2024/april-in-the-middle-of-a-move/</link>
      <pubDate>Wed, 08 May 2024 09:48:30 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2024/april-in-the-middle-of-a-move/</guid>
      <description>A month of packing and unpacking</description>
      <content:encoded><![CDATA[<p>I have been remiss in posting for a while and in April I posted nothing. The reason for this is the move I mentioned in the previous post. Well that and nothing really much of interest to say, apart from how much I hate cardboard now.</p>
<p>May has had a slow start, still figuring out where to put stuff in the new place and how many curtains I need to hang, it is very bright here and I have four large windows, three full length with a door to open and a balcony, I know terrible. The problem is blocking the light from my screen in the daytime as it is very bright from behind. I have a solution for three of the windows and another pair of &ldquo;blackouts&rdquo; coming on the weekend, then I should be secure in my little dark man cave.</p>
<p>On the technical side, I was looking through some of my old Modo models, which were setup for using Vray, which I have, but wasn&rsquo;t installed. So I decided to try and get that reinstalled, not as easy as it once was due to it being discontinued by Chaos Group. Anyway after a quick email to their support people, I got it up and running, which I have to say wasn&rsquo;t as complicated as I had first thought. The big issue was the license server, which was old and no longer working, I got their new one and was pleasantly surprised when it worked.</p>
<p>I am still playing with Vray and Modo, and it works, but to be honest Cycles in Blender is faster and not far off in quality. Plus to use vray I have to use Modo which is also nice, but slow, and to be honest crashes a fair amount. It is something to do with the new drivers and the old version of Modo, I think. I like to play around with tools and it is nice to have the option to use Modo properly with my old models, which was the whole reason in the first place.</p>
<p>So there you go folks, all caught up and up to date.<br>
Oh! and here&rsquo;s a bonus, Easter Bunny, I spotted in the garden outside my window.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Moving Once Again</title>
      <link>https://markbtomlinson.com/post/2024/moving-again/</link>
      <pubDate>Thu, 28 Mar 2024 10:36:03 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2024/moving-again/</guid>
      <description>After a few years on the river it is time to return to civilisation.</description>
      <content:encoded><![CDATA[<p>After nearly three years living here on the Elbe, we have finally found a new place back in town. Living out here has been a mixed bag of country calm, noisy garden machinery, and day tripper motorcycle madness. Post COVID has seen the later go from manageable to really annoying at times.</p>
<p>The Elbe is not far from us, about 150m behind our house with the main shipping lane to Hamburg about 1.5km across the water, this means we often hear the deep drone of container ships coming and going, this is more noticeable in winter when the trees along the shore are bare. Worse than the sound though is the pollution from the ships. We never considered this, as we moved in here during the COVID lock down and so it was much less pronounced then.</p>
<p>The main reason for moving, however, is the isolation of this place, there isn&rsquo;t a single shop here, which means driving to the nearest town every couple of weeks to top up with vittles. No amenities at all, and I really don&rsquo;t like driving everywhere when I should be able to walk or cycle. The car sits there and every two weeks gets put into action, which is better than a daily commute I suppose.</p>
<p>So we have a new place, all signed and sealed and move in some weeks. As you can imagine the interim is a bit on the stressy side, and the older I get the harder that is to ignore. So I will be glad when it is oll over.</p>
<p>Cheers!
<img alt="alt text" loading="lazy" src="/assets/pics/sanderman.webp" title="Sanderman Port Wine"></p>
]]></content:encoded>
    </item>
    <item>
      <title>February a Bust</title>
      <link>https://markbtomlinson.com/post/2024/february-a-bust/</link>
      <pubDate>Sun, 25 Feb 2024 19:52:09 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2024/february-a-bust/</guid>
      <description>Not the most productive month</description>
      <content:encoded><![CDATA[<p>A lot of stuff going on this month and almost none of it productive. February has been a month of waiting and hoping, details still under wraps as I don&rsquo;t wish to jinx anything.</p>
<p>The first half of the month was reasonably productive I managed to add a more features to the addon I am working on. It is almost complete and I will post when it is finished. I am still not sure if I will release it or just keep it for personal use.</p>
<p>So there you go another quick post with next to no substantive information. Hopefully things will improve in the coming months, actually one thing will be cleared up next week or I will be seriously annoyed.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Busy with Code</title>
      <link>https://markbtomlinson.com/post/2024/busy-with-code/</link>
      <pubDate>Thu, 25 Jan 2024 15:55:37 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2024/busy-with-code/</guid>
      <description>Starting the year finishing some coding</description>
      <content:encoded><![CDATA[<p>Twenty Five days into the new year and I realised, I hadn&rsquo;t posted on here yet. To remedy that, here is a short update post:</p>
<p>Last year I was working on an Addon for Blender, more details when it is finished. Suffice to say I had the addon working and I&rsquo;ve been using it for a while. I wanted to add some additional features and tidy up the UI and then perhaps release it.</p>
<p>I&rsquo;d become stuck with one integration in the kit proper, even though I had the function working within Blender, I found it hard integrating it within the Addon.
This month, January, I cracked it and got the code integrated, man that was a good feeling. This lead to some new ideas and wishes for the tool, those are where I am now.</p>
<p>I hope to wrap it up in the next month or so, although I&rsquo;m not in any hurry and am using the exercise as a learning experience, the Blender API is not the most transparent, often it feels like juggling eels. I&rsquo;m also not certain if I will release it publicly or not. I would like to, but the idea of dealing with end users doesn&rsquo;t appeal to me at all. So for now at least it&rsquo;s a just for me app, I may Beta test it with some people, later though.</p>
<p>So that&rsquo;s everything caught up, now back to the code&hellip;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Winter Time is Here Again</title>
      <link>https://markbtomlinson.com/post/2023/winter-time-is-here-again/</link>
      <pubDate>Fri, 15 Dec 2023 15:10:02 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/winter-time-is-here-again/</guid>
      <description>And the year is coming to an end</description>
      <content:encoded><![CDATA[<p>It has been an interesting year, I have rekindled my interest in photography, which I had let slide for a long time.
I even bought back into the Adobe software by renewing my Photography plan.</p>
<p>I have been using Affinity apps for a few years now and thought they were all I needed, and for my renders etc. the tools were more than enough.<br>
However for RAW images and photo organising Lightroom and Adobe Camera Raw are far superior. Despite the subscription nature of the tools I am more that happy with my decision. Lightroom has come a long way since I last used it and I am finding the results to be very pleasing.</p>
<p>I am not one to make resolutions, but I think will be spending some time learning how to use Geometry Nodes in Blender. Thus far I haven&rsquo;t found a need and to be frank I find them confusing and draining on my machines.</p>
<p>Talking of which I going to try and use my MacBook Pro more next year and have made space on a desk for its dedicated use, even attaching a Dell monitor to get some decent screen space. More on that in the future if it works out.</p>
<hr>
<p>We had a decent amount of snow earlier in the month and this is a shot of the Elbe Strand.
<img alt="Elbe Strand" loading="lazy" src="/assets/pics/05-kollmar-snow-hafen-large.jpeg" title="Kollmar Strand"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Roll of the dice</title>
      <link>https://markbtomlinson.com/post/2023/consolidation-of-domains/</link>
      <pubDate>Fri, 24 Nov 2023 15:23:19 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/consolidation-of-domains/</guid>
      <description>After some thought and a lot of inaction, it is time to consolidate domains</description>
      <content:encoded><![CDATA[<p>In a <a href="https://markbtomlinson.com/post/2023/blenderbits-returns/">previous post</a>, one full of hopeless optimism and naive enthusiasm, I talked about re-launching my BlenderBits domain, see the <strong>About</strong> link above it you are interested in seeing the domain, for as long as it exists.</p>
<p>Unfortunately reality has kicked in and I find, that in all honesty, I have neither the time, nor the interest in maintaining two discrete blogs, especially as they intersect on topics, <em>Blender</em>, so as this is the more generalised one, I have decided to use this one only.</p>
<p>So the dice have been rolled and the decision is made. I will keep BlenderBits around for now, the domain is paid up for while, and being fickle, I may change my mind. I will try and sell it but failing that it will probably just lapse into oblivion once more, or not.</p>
<hr>
<p>And now for a little 3D Art, these dice are from a session of dice texturing exercises I did some months back.
There are a few more renders on <a href="https://www.artstation.com/artwork/8bD1wm">Artstation</a> if you are curious.</p>
<p><img alt="3D Model of some dice" loading="lazy" src="/assets/23/ebony-dice.webp" title="Ebony wood styled dark coloured dice, model"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Blender Gamma Node</title>
      <link>https://markbtomlinson.com/post/2023/blender-gamma-node/</link>
      <pubDate>Thu, 23 Nov 2023 05:16:18 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/blender-gamma-node/</guid>
      <description>One way I use the Gamma node in Blender</description>
      <content:encoded><![CDATA[<h4 id="this-isnt-intended-as-a-doctrine-just-some-food-for-thought">This isn&rsquo;t intended as a doctrine, just some food for thought</h4>
<p>For a while now, I have been using the <em>gamma node</em> in Blender as an alternative to the <em>color ramp</em> and the <em>map range</em> node.</p>
<p>There are a few reasons why I like the node:</p>
<ol>
<li>It is light weight.</li>
<li>It is a simple one slider does all node.</li>
<li>The node inputs are easily exposed in a Group.</li>
<li>I can use one Image texture easily to drive more than one input - see below.</li>
</ol>
<p>It isn&rsquo;t a replacement for the other nodes, but for tweaking the <em>levels</em> it is great.<br>
I often use an <em>RGB</em> image texture and set the <em>Color Space</em> to <em>Linear</em> and then use a <em>Gamma Node</em> set to 2.4 to get a more realistic RGB output, 2.2 is the default but I think 2.4 is more colour accurate, or at least I read that somewhere. In any case it often looks better.<br>
Doing this allows for easy connection to Linear inputs for <em>Roughness</em> etc.</p>
<hr>
<p>Here is an example of how I may use the node:</p>
<h2 id="gamma-node-tree"><img alt="gamma node tree" loading="lazy" src="/assets/b3d/gamma-test-node-tree.png" title="Blender Gamma Node Tree"></h2>
<hr>
<p>Below is the render from the above node setup:</p>
<h2 id="alt-text"><img alt="Alt text" loading="lazy" src="/assets/b3d/gamma-test-render.jpg" title="Plaster texture on the Default cube"></h2>
<hr>
<p>This is a shot of the texture I used to drive the node tree:</p>
<p><img alt="Alt text" loading="lazy" src="/assets/b3d/gamma-test-plaster-texture.jpg" title="Plaster texture used in nodes"></p>
<hr>
<p>So now you know and perhaps you have a go and like the set up.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Skipped September</title>
      <link>https://markbtomlinson.com/post/2023/september-not-conducive/</link>
      <pubDate>Thu, 05 Oct 2023 10:29:22 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2023/september-not-conducive/</guid>
      <description>Missing the mark by a month</description>
      <content:encoded><![CDATA[<p>We are now in the early stages of October, thank-fully, and I realised I hadn&rsquo;t posted at all in the previous month. I put this down to the weather, the depressing news cycle, and the general distraction of work.</p>
<p>Recently I started posting pictures on <a href="https://unsplash.com/@markbtomlinson">Unsplash</a>, as a way of giving back to the site, which I have used for textures a few times over the year, and here is one I posted recently:</p>
<p><img alt="Mauerfall" loading="lazy" src="/assets/23/mark-tomlinson-23OtGiCNRm4-unsplash.jpg" title="Rainbow coloured LEGO bricks"></p>
<p>I have been trying to improve a plastic shader for some LEGO bricks I made and wanted to implement a single shader for all colours and this is the result. The full size render is on the site: <a href="https://unsplash.com/photos/23OtGiCNRm4">LEGO - Mauerfall</a>.</p>
<p>I may release the shader later on depending on how I like it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Feeling Sheepish</title>
      <link>https://markbtomlinson.com/post/2023/sheepish-feel/</link>
      <pubDate>Sat, 26 Aug 2023 19:27:03 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2023/sheepish-feel/</guid>
      <description>It has been and odd month</description>
      <content:encoded><![CDATA[<p>The month is nearly at an end and I am not feeling like this month has been very productive.
The reason is probably the weather and the amount of people visiting this area in August.</p>
<p>The weather has also been pretty horrid. Extreme humidity has left everything feeling muggy and damp. We have had so much rain in the last couple of months, I am expecting next years crop to be rice not wheat.</p>
<p>All this is just an excuse to post the sheep picture. The Ewe was watching me from taking pictures and when I waved, yea that&rsquo;s a thing, she bleated back in response, and not only once. I think she it one of the pack leaders and so on watch. We have the flock going back and forth passed our house a few times a day which is nice, except in summer when they do their group gathering call at 4 a.m.</p>
<p>And now the sheep:</p>
<p><img alt="Sheep Picture" loading="lazy" src="/assets/pics/elbe-sheep-sunset.webp" title="Elbe Ewe on the Dyke"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Blender Edge Wear Node</title>
      <link>https://markbtomlinson.com/post/2023/blender-edge-wear-node-graph/</link>
      <pubDate>Mon, 31 Jul 2023 10:35:37 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2023/blender-edge-wear-node-graph/</guid>
      <description>How to set up a Edge Wear node in Blender</description>
      <content:encoded><![CDATA[<p>This is a demonstration of how to create a Node Graph in Blender to make and Edge Wear node for use in Cycles.</p>
<h3 id="step-one">Step one:</h3>
<p><img loading="lazy" src="/assets/b3d/2-edge-wear-node-graph.webp" title="Edge Wear Node Graph Set Up"></p>
<p>Create the node graph as shown above in Blender&rsquo;s shader editor. Note the samples input this will be added next.</p>
<h3 id="step-two">Step two:</h3>
<p><img loading="lazy" src="/assets/b3d/3-add-input-node-for-driver.webp" title="Add a Samples Input slot"></p>
<p>Add a Samples input slot, so you can drive the Bevel node samples from outside the group.</p>
<h3 id="step-three">Step three:</h3>
<p><img loading="lazy" src="/assets/b3d/4-edge-wear-copy-driver.webp" title="Copy the Samples as Driver"></p>
<p>TAB out of the node group and then right click on the Samples input and Copy as Driver.</p>
<h3 id="step-four">Step four:</h3>
<p><img loading="lazy" src="/assets/b3d/5-paste-driver-samples.webp" title="Add a Samples Input slot"></p>
<p>TAB back into the node group and right click in the Bevel Node Samples input and Paste Driver.</p>
<h3 id="finally">Finally:</h3>
<p><img loading="lazy" src="/assets/b3d/1-edge-wear-group-node.webp" title="Edge Wear Node">
TAB out again and you can use the Edge Mask output to drive a Mix Color node or anything else that you want to drive Edge Wear with.</p>
<h3 id="download">Download</h3>
<p>For those not wishing to make the node themselves I have uploaded the finished asset file to Gumroad:
<a href="https://markbtomlinson.gumroad.com/l/mbt-edge-wear">Gumroad Edge Wear Node</a></p>
<p>If you can&rsquo;t afford €2 and I know some can&rsquo;t, you can use this code <em>3M8CFBB</em> in the checkout, enter €2 first then apply the code to get 100% off, free!</p>
<p>I appreciate those that do pay and it encourages me to post more stuff.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Blending Machine Parts</title>
      <link>https://markbtomlinson.com/post/2023/blending-machine-parts/</link>
      <pubDate>Mon, 17 Jul 2023 17:37:03 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2023/blending-machine-parts/</guid>
      <description>A little example of using Anisotropic maps on a model</description>
      <content:encoded><![CDATA[<p>I have recently been watching a YouTube channel from a Japanese machine tool maker, which I find interesting and relaxing.
It is also a great source of reference material for 3D modelling. For ideas and materials, I have been making screenshots like crazy as I watch through his demonstrations.</p>
<p>If you are interested in checking the channel out it is here: <a href="https://www.youtube.com/@SwaplampJapan">@SwapLampJapan</a></p>
<p>I hadn&rsquo;t thought of using YouTube as a source of reference but as the quality of the video cameras improve I am able to get some really nice shots for reference.</p>
<p>Here is one I made earlier:</p>
<p><img alt="Machine Tool Model" loading="lazy" src="/assets/pics/mark-b-tomlinson-machine-tool-bar-03.webp"></p>
<p>and here is the wireframe of the model:
<img alt="Machine Tool Wireframe" loading="lazy" src="/assets/pics/mark-b-tomlinson-machine-tool-bar-wire-03.webp"></p>
<p>The model uses two anisotropic texture maps one for the circular top section and a linear one for the sides. I did this as two materials instead of one as it is easier in Blender to have square textures than rectangular ones. I may be missing something but blender always changes the aspect ratio of the UV editor which isn&rsquo;t helpful for laying out and checking proportions.</p>
<p>I going to be doing more of these in the next days, as I have a good selection of reference, as I mentioned.
I also want to see about using procedural textures for the anisotropy instead of bitmaps, my reluctance to procedural texturing in Blender will be tested though, they always feel overly heavy on my machine, even big png&rsquo;s are quicker.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Cut and paste in Finder</title>
      <link>https://markbtomlinson.com/post/2023/mac-cut-paste/</link>
      <pubDate>Sun, 18 Jun 2023 10:39:50 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2023/mac-cut-paste/</guid>
      <description>How to cut and paste in files and folders in Finder</description>
      <content:encoded><![CDATA[<p>Mac doesn&rsquo;t support Cut and Paste from Finder using:
<strong>CMD-X CMD-V</strong></p>
<p>But you can achieve exactly the same results by using:
<strong>CMD-C</strong> and then <strong>CMD-OPT-V</strong></p>
<p>This isn&rsquo;t very intuitive as most OS&rsquo;s use <em>Ctrl-X</em> and <em>Ctrl-V</em>, but the functionality is there if a little hidden.</p>
<p>For a bonus tip: if you hold press ALT/OPTION over the open Menu Bar you will see alternative functions appear.</p>
<p><img alt="Cut and Past" loading="lazy" src="/assets/23/cut-paste.webp"></p>
<p>There is at least one plugin on the App Store, that turns this into CMD-X, but to be honest, I don&rsquo;t think CMD-OPTION-V too hard a combination to master.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Summer Rumblings</title>
      <link>https://markbtomlinson.com/post/2023/summer-hot-and-dry/</link>
      <pubDate>Fri, 16 Jun 2023 19:39:08 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2023/summer-hot-and-dry/</guid>
      <description>It is has been a while since I posted</description>
      <content:encoded><![CDATA[<p>We are now well into June, half way in fact, and I realised I haven&rsquo;t posted on the blog in a while.</p>
<p>The reasons are the usual ones, a lack of interest and anything interesting to say.</p>
<p>To that end this post is somewhat of an oxymoron, it is all of the above and thus posted purely for the sake of maintaining the blogs output. If I leave it too long, I will fall into a state of low inertia, and so will my posting.</p>
<p>I have been busy, on programming for a change, I have a little pet project I have been working on for a while, namely a kit for Blender.</p>
<p>The kit is fully functional and works pretty well, it isn&rsquo;t finished though it needs a little trimming and tidying up. Refactoring and general reorganisation.</p>
<p>The kit may or may not get released to the wider world depending on how I feel about maintaining it and the general hostility of the wider web.</p>
<p>I find the web stressful and often wonder why I still subject myself to its foibles, I am though human and inquisitive and the Web is still an interesting place in the corners if not in the spotlight.</p>
<p>Well that is a post done, I have managed to write something, anything&hellip;</p>
<p>Ah! The kit, yes right, well that will be for another day&hellip;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Asset Surface Snapping Blender</title>
      <link>https://markbtomlinson.com/post/2023/surface-snap-blender/</link>
      <pubDate>Mon, 08 May 2023 11:21:39 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2023/surface-snap-blender/</guid>
      <description>Blender settings for surface snapping to underlying geometry</description>
      <content:encoded><![CDATA[<p>When adding mesh assets, for use as a cutter for example, it is important to align the asset to the underlying geometry&rsquo;s surface normals. This can be achieved by using the following setting in the snap options menu in the tool bar at the top of the Blender UI.</p>
<p><img loading="lazy" src="/assets/b3d/surface-snap-settings-blender.webp" title="Blender surface snap settings"></p>
<p>This will snap the assets origin, as the center, to the surface of the target mesh, when using the CTRL key or by toggling the snapping option Magnet icon in the menu.</p>
<p>The surface normal of the target asset will show as an orange line as you move the asset.</p>
<p><img loading="lazy" src="/assets/b3d/surface-snap-align.webp" title="Blender surface snap example"></p>
<p><strong>Note</strong>: it is important that the origin of the asset is located at the place you wish the asset to meet the surface of the target mesh, to low and it will be above the surface and to high and the asset will be inside the target.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Moi3d Shortcuts</title>
      <link>https://markbtomlinson.com/post/2023/moi3d-shortcuts/</link>
      <pubDate>Fri, 28 Apr 2023 12:00:18 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2023/moi3d-shortcuts/</guid>
      <description>Shortcuts sorted alphabetically</description>
      <content:encoded><![CDATA[<h2 id="a">A</h2>
<p><strong>Alt+A</strong> = <code>ArrayDir</code></p>
<p><strong>Ctrl+A</strong> = <code>script:moi.geometryDatabase.selectAll();</code></p>
<p><strong>Shift+A</strong> = <code>script:moi.view.resetAll();</code></p>
<p><strong>Shift+Alt+A</strong> = <code>ArrayCurve</code></p>
<p><strong>Ctrl+Shift+A</strong> = <code>ArrayCircular</code></p>
<hr>
<h2 id="b">B</h2>
<p><strong>B</strong> = <code>Fillet</code></p>
<p><strong>Alt+B</strong> = <code>sBridge</code></p>
<hr>
<h2 id="c">C</h2>
<p><strong>C</strong> = <code>Rebuild</code></p>
<p><strong>Ctrl+C</strong> = <code>CopyClipboard</code></p>
<p><strong>Ctrl+Alt+C</strong> = <code>ODCopyToExternal</code></p>
<p><strong>Alt+C</strong> = <code>script: moi.view.setCPlaneInteractive();</code></p>
<p><strong>Ctrl+Shift+C</strong> = <code>CopyClipboardWithOrigin</code></p>
<p><strong>Shift+Alt+C</strong> = <code>script: /* Align CPlane with 3D view 1.0 */ var cp = moi.view.getCPlane(), tp = moi.ui.mainWindow.viewpanel.getViewport('3D').targetFrame, tl = moi.VectorMath.pointsWithinTolerance; if (tl(cp.origin,tp.origin) &amp;&amp; tl(cp.zaxis,tp.zaxis)) { moi.view.resetCPlane() } else {moi.view.setCPlane(tp, false)}</code></p>
<p><strong>Shift+C</strong> = <code>script: /* Toggle visibility of all curves */ var objs = moi.geometryDatabase.getObjects().getCurves(); var ishidden = objs.length &gt; 0 ? objs.item(0).hidden : false; objs.setProperty( 'hidden', !ishidden );</code></p>
<hr>
<h2 id="d">D</h2>
<p><strong>D</strong> = <code>DelCorners</code></p>
<p><strong>Alt+D</strong> = <code>Distribute</code></p>
<p><strong>Ctrl+D</strong> = <code>script: /* Duplicate selected objects */ var gd = moi.geometryDatabase; var objs = gd.getSelectedObjects(); if ( objs.length ! =  0 ) gd.copyToClipboard( objs ); moi.command.execCommand( 'paste' );</code></p>
<hr>
<h2 id="e">E</h2>
<p><strong>E</strong> = <code>Rotate</code></p>
<p><strong>Ctrl+E</strong> = <code>Export</code></p>
<p><strong>Ctrl+Shift+E</strong> = <code>_sScale</code></p>
<hr>
<h2 id="f">F</h2>
<p><strong>F</strong> = <code>Chamfer</code></p>
<p><strong>Alt+F</strong> = <code>Flow</code></p>
<hr>
<h2 id="g">G</h2>
<p><strong>G</strong> = <code>script: /* Toggle Grid Snap */ moi.drawingAids.gridSnap = !moi.drawingAids.gridSnap;</code></p>
<p><strong>Shift+G</strong> = <code>script: /* Toggle grid and axis lines */ moi.grid.display = !moi.grid.display; moi.grid.showXYAxes = moi.grid.display;</code></p>
<hr>
<h2 id="h">H</h2>
<p><strong>H</strong> = <code>script: /* Hide selection */ moi.geometryDatabase.hide();</code></p>
<p><strong>Alt+H</strong> = <code>script: /* Toggle using hidden edge display for selected objects only */ moi.view.hiddenLinesSelectedOnly = !moi.view.hiddenLinesSelectedOnly;</code></p>
<hr>
<h2 id="i">I</h2>
<p><strong>I</strong> = <code>script: /* Isolate selection */ moi.geometryDatabase.isolate();</code></p>
<p><strong>Alt+I</strong> = <code>script:moi.geometryDatabase.invertSelection(); /Invert/</code></p>
<hr>
<h2 id="j">J</h2>
<p><strong>J</strong> = <code>Join</code></p>
<p>Shift+J = <code>script: /* Show naked edges */ var gd = moi.geometryDatabase; gd.deselectAll(); var breps = gd.getObjects().getBreps(); for ( var i = 0; i &lt; breps.length; ++i ) breps.item(i).getNakedEdges().setProperty( 'selected', true );</code></p>
<hr>
<h2 id="l">L</h2>
<p><strong>L</strong> = <code>Polyline</code></p>
<p><strong>Shift+L</strong> = <code>Loft</code></p>
<p><strong>Alt+L</strong> = <code>script: /* Select edges v1.4 */ var gd = moi.geometryDatabase, so = gd.getSelectedObjects(); function ss(o,v){o.setProperty(&quot;selected&quot;,v)} function sl(o){ for ( var i = 0; i&lt;o.length; ++i ) o.item(i).getEdges().invertProperty(&quot;selected&quot;);} gd.selectLoop(); sl(so.getFaces()); sl(so.getSolids()); sl(so.getOpenBReps()); sl(so.getSingleFaceBReps()); ss(so.getBReps(),0); ss(so.getFaces(),0);</code></p>
<p><strong>Ctrl+Alt+L</strong> = <code>script: /* Loop selection */ moi.geometryDatabase.selectLoop();</code></p>
<p><strong>Ctrl+Shift+L</strong> = <code>script: /*! Show-hide edges on selected objects */var breps = moi.geometryDatabase.getSelectedObjects().getBreps(); for ( var i = 0; i &lt; breps.length; ++i ) {var brep = breps.item(i);brep.getEdges().invertProperty( 'hidden');}</code></p>
<p><strong>Shift+Alt+L</strong> = <code>script:  /* Highlight naked edges */ var gd = moi.geometryDatabase; gd.deselectAll(); var breps = gd.getObjects().getBreps(); for ( var i = 0; i &lt; breps.length; ++i ) breps.item(i).getNakedEdges().setProperty( 'selected', true );</code></p>
<hr>
<h2 id="m">M</h2>
<p><strong>M</strong> = <code>Mirror</code></p>
<p><strong>Ctrl+M</strong> = <code>Merge</code></p>
<p><strong>Alt+M</strong> = <code>unwrapcurve</code></p>
<hr>
<h2 id="n">N</h2>
<p><strong>Ctrl+N</strong> = <code>New</code></p>
<p><strong>Alt+N</strong> = <code>orient</code></p>
<hr>
<h2 id="o">O</h2>
<p><strong>O</strong> = <code>Offset</code></p>
<p><strong>Ctrl+O</strong> = <code>Open</code></p>
<hr>
<h2 id="p">P</h2>
<p><strong>P</strong> = <code>PlanarSrf</code></p>
<hr>
<h2 id="q">Q</h2>
<p><strong>Alt+Q</strong> = <code>script:moi.ui.mainWindow.viewpanel.reverseView( moi.ui.getActiveViewport().name );</code></p>
<hr>
<h2 id="r">R</h2>
<p><strong>R</strong> = <code>Scale</code></p>
<p><strong>Alt+R</strong> = <code>Scale2d</code></p>
<p><strong>Ctrl+Alt+R</strong> = <code>Scale1d</code></p>
<p><strong>Ctrl+R</strong> = <code>RailRevolve</code></p>
<p><strong>Ctrl+Shift+R</strong> = <code>Revolve</code></p>
<p><strong>Shift+R</strong> = <code>ScaleIndividual</code></p>
<hr>
<h2 id="s">S</h2>
<p><strong>S</strong> = <code>script: /* Scale, switch between center and regular */ var didcenter = false; try { didcenter = moi.command.getOption( 'scale_center' ); } catch(e){} if ( didcenter ) { moi.command.execCommand( 'Scale' ); } else { moi.command.execCommand( 'Scale BoundingBoxCenter' ); } moi.command.setOption( 'scale_center', !didcenter );</code></p>
<p><strong>Ctrl+Shift+S</strong> = <code>SaveAs</code></p>
<p><strong>Ctrl+S</strong> = <code>Save</code></p>
<p><strong>Ctrl+Alt+S</strong> = <code>IncrementalSave</code></p>
<p><strong>Shift+S</strong> = <code>Sweep</code></p>
<hr>
<h2 id="t">T</h2>
<p><strong>T</strong> = <code>Trim</code></p>
<p><strong>Ctrl+Shift+T</strong> = <code>_sSplit</code></p>
<p><strong>Alt+T</strong> = <code>script: /* Toggle both sides for offset or extrude */ if ( moi.command.currentCommandName ) { if ( moi.ui.commandUI.curvebothsides ) moi.ui.commandUI.curvebothsides.click(); if ( moi.ui.commandUI.bothsides ) moi.ui.commandUI.bothsides.click(); }</code></p>
<p><strong>Ctrl+T</strong> = <code>script: /* Toggle cap ends for offset or extrude */ if ( moi.command.currentCommandName ) { if ( moi.ui.commandUI.curvecapends ) moi.ui.commandUI.curvecapends.click(); if ( moi.ui.commandUI.capends ) moi.ui.commandUI.capends.click(); }</code></p>
<hr>
<h2 id="u">U</h2>
<p><strong>U</strong> = <code>script:var gd = moi.geometryDatabase; gd.deselectAll(); var objects = gd.getObjects(); for ( var i = 0; i &lt; objects.length; ++i ) { var obj = objects.item(i); if ( obj.name = =  '' ) { obj.selected = true; } }</code></p>
<hr>
<h2 id="v">V</h2>
<p><strong>Ctrl+V</strong> = <code>Paste</code></p>
<p><strong>Ctrl+Alt+V</strong> = <code>ODPasteFromExternal</code></p>
<p><strong>Ctrl+Shift+V</strong> = <code>PastePart</code></p>
<hr>
<h2 id="w">W</h2>
<p><strong>Alt+W</strong> = <code>script:/* Wireframe v1.0 */ var gd = moi.geometryDatabase, so = gd.getSelectedObjects(); if (so.length&gt;0) { so.setProperty( 'displayMode',1); so.setProperty( 'selected', 0); } else { gd.getObjects().setProperty( 'displayMode',0); }</code></p>
<p><strong>Shift+W</strong> = <code>move boundingboxcenter</code></p>
<p><strong>W</strong> = <code>script: /* Move, switch between center and regular */ var didcenter = false; try { didcenter = moi.command.getOption( 'move_center' ); } catch(e){} if ( didcenter ) { moi.command.execCommand( 'Move' ); } else { moi.command.execCommand( 'Move BoundingBoxCenter' ); } moi.command.setOption( 'move_center', !didcenter );</code></p>
<hr>
<h2 id="x">X</h2>
<p><strong>X</strong> = <code>Extrude</code></p>
<p><strong>Ctrl+Shift+X</strong> = <code>ExplodeMove</code></p>
<p><strong>Ctrl+X</strong> = <code>Cut</code></p>
<hr>
<h2 id="y">Y</h2>
<p><strong>Ctrl+Y</strong> = <code>script:moi.command.redo();</code></p>
<hr>
<h2 id="z">Z</h2>
<p><strong>Ctrl+Z</strong> = <code>script:moi.command.undo();</code></p>
<p><strong>Shift+Z</strong> = <code>script: /* Toggle edge display */ var breps = moi.geometryDatabase.getObjects().getBReps(); var hide = true; for ( var i = 0; i &lt; breps.length; ++i ) { var edges = breps.item(i).getEdges(); if ( i = =  0 ) hide = !edges.item(0).hidden; edges.setProperty( 'hidden', hide ); }</code></p>
<p><strong>Ctrl+Shift+Z</strong> = <code>script:moi.command.redo();</code></p>
<hr>
<h2 id="numbers">Numbers</h2>
<p><strong>5</strong> = <code>script:/* Wireframe v1.0 */ var gd = moi.geometryDatabase, so = gd.getSelectedObjects(); if (so.length&gt;0) { so.setProperty( 'displayMode',1); so.setProperty( 'selected', 0); } else { gd.getObjects().setProperty( 'displayMode',0); }</code></p>
<hr>
<h2 id="numpad">Numpad</h2>
<p><strong>Numpad-</strong> = <code>BooleanDifference</code></p>
<p><strong>Numpad*</strong> = <code>BooleanUnion</code></p>
<p><strong>Numpad/</strong> = <code>BooleanIntersection</code></p>
<p><strong>Numpad+</strong> = <code>BooleanMerge</code></p>
<p><strong>Numpad5</strong> = <code>script: /* Toggle between Parallel and Perspective view */ var vp = moi.ui.mainWindow.viewpanel.getViewport('3D'); vp.projection = (vp.projection == 'Perspective' ? 'Parallel': 'Perspective');</code></p>
<p><strong>Numpad7</strong> = <code>script: /* Top view */ var vname = 'Top'; var vp = moi.ui.mainWindow.viewpanel; vp.mode = vname; if ( vp.getViewport(vname).name != vname ) vp.reverseView( vname );</code></p>
<p><strong>Alt+Numpad1</strong> = <code>script: /* Top view */ var vname = 'Top'; var vp = moi.ui.mainWindow.viewpanel; vp.mode = vname; if ( vp.getViewport(vname).name ! =  vname ) vp.reverseView( vname );</code></p>
<p><strong>Alt+Numpad2</strong> = <code>script: /* Front view */ var vname = 'Front'; var vp = moi.ui.mainWindow.viewpanel; vp.mode = vname; if ( vp.getViewport(vname).name ! =  vname ) vp.reverseView( vname );</code></p>
<p><strong>Alt+Numpad3</strong> = <code>script: /* Right view */ var vname = 'Right'; var vp = moi.ui.mainWindow.viewpanel; vp.mode = vname; if ( vp.getViewport(vname).name ! =  vname ) vp.reverseView( vname );</code></p>
<p><strong>Ctrl+Numpad-</strong> = <code>script:/* Shrink selection 1.0 */ function es(edg){ var i,f; for (i = 0; i&lt;edg.length; i++) {f = edg.item(i).getFacesOfEdge(); f.setProperty('selected',0);}} var gd = moi.geometryDatabase; gd.invertSelection(); var so = gd.getSelectedObjects(), sf = so.getFaces(), i; gd.invertSelection(); for ( i = 0; i&lt;sf.length;i++) es(sf.item(i).getEdges());</code></p>
<p><strong>Ctrl+Numpad+</strong> = <code>script:/* Expand selection 1.0 */ function es(edg){ var i,f; for (i = 0; i&lt;edg.length; i++) {f = edg.item(i).getFacesOfEdge(); f.setProperty('selected',1);}} var so = moi.geometryDatabase.getSelectedObjects(), sf = so.getFaces(), i; for ( i = 0; i&lt;sf.length;i++) es(sf.item(i).getEdges()); es(so.getEdges());</code></p>
<hr>
<h2 id="function">Function</h2>
<p><strong>F1</strong> = <code>script:moi.launchHelp();</code></p>
<p><strong>Alt+F1</strong> = <code>script: moi.ui.createDialog( 'Options.htm', 'resizeable,defaultWidth:43em,defaultHeight:32em' );</code></p>
<p><strong>F2</strong> = <code>script: /* Edit object name */ var pp = moi.ui.propertiesPanel; if (pp.show &amp;&amp; pp.numSelectedObjects &gt; 0) { pp.editName(); }</code></p>
<p><strong>F3</strong> = <code>script:/* Object Library Dialog*/ moi.ui.createDialog( 'moi://appdata/customui/ObjLibrary.menu.htm' );</code></p>
<p><strong>F10</strong> = <code>script: /* Untrim the selected surface */ var gd = moi.geometryDatabase; srfs = gd.getSelectedObjects().getSingleFaceBReps(); gd.deselectAll(); for ( var i = 0; i &lt; srfs.length; ++i ) srfs.item(i).getEdges().setProperty( 'selected', true ); moi.command.execCommand( 'delete' );</code></p>
<p><strong>F11</strong> = <code>script: /* Open Add New Style dialog */ var gd = moi.geometryDatabase; gd.styleEditorOpened(); var dialog = moi.ui.createDialog( 'EditStyleDialog.htm?titleid = Add style dialog title&amp;index = -1', '', moi.ui.mainWindow ); if ( dialog.window.doModal() ! =  -1 ) { var styles = gd.getObjectStyles(); if ( styles.length&gt; 0 ) moi.ui.propertiesPanel.editStyleIndex( styles.length - 1 ); } gd.styleEditorClosed();</code></p>
<p><strong>F12</strong> = <code>var p = moi.ui.getUIPanel( 'moi://ui/BrowserPane.htm' ); if ( p ) { var w = p.document.body.style.width; if ( w = =  '' || w = =  '15em' ) { w = '20em'; } else if ( w = =  '20em' ) { w = '30em' } else { w = '15em' } p.document.body.style.width = w; }</code></p>
<hr>
<h2 id="punctuation">Punctuation</h2>
<p><strong>-</strong> = <code>script:/* Calculate length of selected curves and copy to the clipboard as text */ var crvs = moi.geometryDatabase.getSelectedObjects().getCurves(); var len = 0.0; for ( var i = 0; i &lt; crvs.length; ++i ) len + =  crvs.item(i).getLength(); moi.copyTextToClipboard( len );</code></p>
<p><strong>`</strong>= <code>script: /* 3D view (perspective or isometric) */ moi.ui.mainWindow.viewpanel.mode = '3D';</code></p>
<p><strong>Alt+.</strong> = <code>ShowPoints</code></p>
<p><strong>Ctrl+.</strong> = <code>AddPoint</code></p>
<p><strong>Backspace</strong> = <code>Delete</code></p>
<p><strong>Delete</strong> = <code>Delete</code></p>
<p><strong>Space</strong> = <code>script:if ( moi.ui.mainWindow.viewpanel.mode ! =  'split' ) { moi.ui.mainWindow.viewpanel.mode = 'split' } else { var viewport = moi.ui.getViewportUnderMouse(); if ( viewport ) viewport.viewpanel.mode = viewport.name; }</code></p>
<hr>
<h2 id="arrows">Arrows</h2>
<p><strong>Alt+RightArrow</strong> = <code>script:moi.view.setCPlane( moi.vectorMath.createRightFrame() );</code></p>
<p><strong>Alt+UpArrow</strong> = <code>script:moi.view.resetCPlane();</code></p>
<p><strong>Alt+DownArrow</strong> = <code>script:moi.view.setCPlane( moi.vectorMath.createFrontFrame() );</code></p>
<p><strong>Alt+LeftArrow</strong> = <code>script: /* Align CPlane with 3D view 1.0 */ var cp = moi.view.getCPlane(), tp = moi.ui.mainWindow.viewpanel.getViewport('3D').targetFrame, tl = moi.VectorMath.pointsWithinTolerance; if (tl(cp.origin,tp.origin) &amp;&amp; tl(cp.zaxis,tp.zaxis)) { moi.view.resetCPlane() } else {moi.view.setCPlane(tp, false)}</code></p>
<p><strong>DownArrow</strong> = Nudge Down</p>
<p><strong>LeftArrow</strong> = Nudge Left</p>
<p><strong>RightArrow</strong> = Nudge Right</p>
<p><strong>UpArrow</strong> = Nudge Up</p>
<p><strong>Shift+LeftArrow</strong> = Nudge Left Small</p>
<p><strong>Shift+RightArrow</strong> = Nudge Right Small</p>
<p><strong>Shift+UpArrow</strong> = Nudge Up Small</p>
<p><strong>Shift+DownArrow</strong> = Nudge Down Small</p>
<p><strong>PageDown</strong> = Nudge ZDown</p>
<p><strong>PageUp</strong> = Nudge ZUP</p>
<p><strong>Shift+PageUp</strong> = Nudge ZUp Small</p>
<p><strong>Shift+PageDown</strong> = Nudge ZDown Small</p>
<hr>
<h2 id="macbook">MacBook</h2>
<p><strong>Ctr+Alt+D</strong> = <code>BooleanDifference</code></p>
<p><strong>Ctr+Alt+U</strong> = <code>BooleanUnion</code></p>
<p><strong>Ctr+Alt+I</strong> = <code>BooleanIntersection</code></p>
]]></content:encoded>
    </item>
    <item>
      <title>Blender Curve Manipulation Problem</title>
      <link>https://markbtomlinson.com/post/2023/3d-curve-manipulation/</link>
      <pubDate>Tue, 11 Apr 2023 13:35:48 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2023/3d-curve-manipulation/</guid>
      <description>Unable to move curve in 3D</description>
      <content:encoded><![CDATA[<p>If you find you are unable to move a curve handle in all three axis, it is probably due to the curve type being set to <strong>2D</strong>.</p>
<p>When you create the curve expand the <strong>Simple Curve</strong> dialog in the lower left of the viewport, or press <strong>F9</strong>:</p>
<p><img loading="lazy" src="/assets/b3d/simple-curve-point.webp" title="Blender simple curve type"></p>
<p>From here choose <strong>3D</strong> and then, if you want curved splines, choose Auto in the Output Curve Type.</p>
<p>The defaults are <strong>2D</strong> and <strong>Vector</strong> and they may not be what you want for your curves.</p>
<p>The difference between <strong>Vector</strong> and <strong>Automatic</strong> are shown below:</p>
<p>You can also change from 2D to 3D after creating curves, if you forget initially. The setting is in the <strong>Properties</strong> panel on the Right (by default) of the Blender UI.</p>
<p>If you need to change the handle type from Vector to Automatic after creation, select the control points you want to change and press <strong>V</strong> then choose the type from the dialog:</p>
<p><img loading="lazy" src="/assets/b3d/set-handle-type.webp" title="Blender set curve handle type"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Sub-division Models</title>
      <link>https://markbtomlinson.com/post/2023/sub-division-models/</link>
      <pubDate>Sat, 08 Apr 2023 19:19:20 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2023/sub-division-models/</guid>
      <description>Sub-division modelling still worth learning</description>
      <content:encoded><![CDATA[<p>In recent years, there have been huge improvements in <em>n-gon&rsquo;s</em> (non quad polygons). Specifically how well they render and games engines handle non triangular or quad polygons – in reality of course, all polygons are reduced to triangles for rendering. Three vertices being the lowest amount of points that are needed to create two dimensional forms.</p>
<p>It seems now that the last place that require quad sub-D models is in deformed meshes, character animations and the like. I rarely aim for pure quad sub-D models anymore but still like to practice making them and find them cathartic to create now and then.</p>
<p>I have created a few models over the years for practice, and find the exercise quite rewarding, here are a few examples:</p>
<p><img alt="Flangypan 04" loading="lazy" src="https://cdnb.artstation.com/p/assets/images/images/040/841/311/large/mark-b-tomlinson-flangypan-02.jpg?1630011012"></p>
<p><img alt="Flangypan Wire" loading="lazy" src="https://cdnb.artstation.com/p/assets/images/images/040/841/317/large/mark-b-tomlinson-flangypan-wire-01.jpg?1630011027"></p>
<p>And finally a close up of the edge loops needed to hold the form:
<img alt="Flangypan Close up Wire" loading="lazy" src="https://cdna.artstation.com/p/assets/images/images/040/841/312/large/mark-b-tomlinson-flangypan-03-wire.jpg?1630011016"></p>
<p>It isn&rsquo;t, perhaps, the most efficient modelling style anymore but I think it does have a place in 3D work and the results can be very satisfying.</p>
<p>This model, and more renders of it, can be found on <a href="https://www.artstation.com/artwork/w6gdXg">Artstation</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Purge git repo history</title>
      <link>https://markbtomlinson.com/post/2023/git-history-delete/</link>
      <pubDate>Tue, 28 Mar 2023 10:10:07 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2023/git-history-delete/</guid>
      <description>Reseting a git repo&amp;#39;s history.</description>
      <content:encoded><![CDATA[<p>I mentioned in a previous post that I had used git and git hooks to upload Hugo blog posts to my server, and that I am now using rsync as a faster more succinct alternative.</p>
<p>This has left me with lot of git history in my .git folder, which I really don&rsquo;t need. I don&rsquo;t think I am ever going to want to recover a blog post version, ever.</p>
<p>So I thought why not just delete all the history and reduce the junk in the site directories.</p>
<p>The following are the steps I used to clean out and shrink the data down to the latest committed.</p>
<ul>
<li>Let&rsquo;s check the state of the repo:</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>git status    <span style="color:#75715e"># get the current state of repo</span>
</span></span></code></pre></div><p><strong>Caution these steps will delete all the repo&rsquo;s history</strong></p>
<ul>
<li>First create an orphan or isolated copy of the current state of the repo.</li>
<li>Then add the files and commit.</li>
<li>Next delete the old Master and move the clone to Master.</li>
<li>Then push the new master to GitHub.</li>
<li>Finally clean the old crap out of the repo using garbage collection aggressively.</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>git checkout --orphan &lt;orphanName&gt;  <span style="color:#75715e"># create and orphan clone of master</span>
</span></span><span style="display:flex;"><span>git add -A                          <span style="color:#75715e"># adds everything hardocre</span>
</span></span><span style="display:flex;"><span>git commit -am <span style="color:#e6db74">&#34;commit message&#34;</span>     <span style="color:#75715e"># Commit cleaned branch</span>
</span></span><span style="display:flex;"><span>git branch -D master                <span style="color:#75715e"># Deletes original Master</span>
</span></span><span style="display:flex;"><span>git branch -m master                <span style="color:#75715e"># Moves cloned branch to Master</span>
</span></span><span style="display:flex;"><span>git push -f origin master           <span style="color:#75715e"># Push new Master to GitHub</span>
</span></span><span style="display:flex;"><span>git gc --aggressive --prune<span style="color:#f92672">=</span>all     <span style="color:#75715e"># Garbage Collection hardcore</span>
</span></span></code></pre></div><p>After running these steps; my site directory went from around 60 MB to about 40 MB, which is a saving of around 30%.<br>
I don&rsquo;t have a heavily image based site, so mostly the history files were Markdown text files, that being said, the saving is nice and on a larger graphical site it could equate to a lot of duplicated data.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Just post something, anything</title>
      <link>https://markbtomlinson.com/post/2023/just-post-something/</link>
      <pubDate>Thu, 16 Mar 2023 18:09:58 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/just-post-something/</guid>
      <description>Spurred on by another blog post</description>
      <content:encoded><![CDATA[<p>I just read a <a href="https://robert.bearblog.dev/just-write/">post online</a> about writing and the need to keep on writing.</p>
<p>It strikes me that there is something fulfilling about the idea of the post I like, and find recognisable. I am trying to post more but often find myself doubting the value of writing at all.</p>
<p>I need to remind myself that I am writing for no one other than myself. If someone else reads these posts, then all well and good, otherwise it isn&rsquo;t relevant to me or my writing, I need to just keep writing.</p>
<p>Why, well simple really, I enjoy writing and I am by nature a creative person. Writing along with my 3D work is a creative process that gives me a feeling of achievement. A sense of creating something beyond my thoughts and something tangible even if it is only in digital form.</p>
<p>I am a big fan of RSS feeds and find the technology a great way to bypass the major social media platforms like Twitter or Facebook and get right to the source, often obscure and at the rear of social presence. Hacker News is one of my sources for feeds and it often contains articles and news that isn&rsquo;t covered by the mainstream sources. The post that spurred this post came via HM and I would never have seen it without my subscriptions to the feeds. I encourage everyone to use RSS and get more news from local smaller sources.</p>
<p>And, to finish as I mentioned 3D creation in the article; here is a model I made recently, not related in any way to this post, but I can post what I please here, so:</p>
<p><img alt="Mac Midi" loading="lazy" src="/assets/23/mac-midi.webp#center" title="Mac Midi Concept">
Mac Midi Concept Model</p>
]]></content:encoded>
    </item>
    <item>
      <title>Hugo Google-News Error</title>
      <link>https://markbtomlinson.com/post/2023/hugo-error-google-news/</link>
      <pubDate>Wed, 08 Mar 2023 08:55:39 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/hugo-error-google-news/</guid>
      <description>The latest Hugo update broke my theme with google-news partial</description>
      <content:encoded><![CDATA[<p>The Hugo theme template partial <em>google-news</em> has been deprecated for quite some time. A warning message has been posted on build for just that very reason.<br>
After the last update of Hugo <strong>v0.111.2+extended</strong> the partial appears causes Hugo to fail while building.</p>
<p>This is the error thrown on my Mac:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>❯ hugo
</span></span><span style="display:flex;"><span>Start building sites …
</span></span><span style="display:flex;"><span>hugo v0.111.2+extended darwin/arm64 BuildDate<span style="color:#f92672">=</span>unknown
</span></span><span style="display:flex;"><span>ERROR 2023/03/07 23:21:02 render of <span style="color:#e6db74">&#34;page&#34;</span> failed: <span style="color:#e6db74">&#34;/Users/mark/websites/markbtomlinson.com/themes/PaperMod/layouts/_default/baseof.html:5:8&#34;</span>: execute of template failed: template: _default/single.html:5:8: executing <span style="color:#e6db74">&#34;_default/single.html&#34;</span> at &lt;partial <span style="color:#e6db74">&#34;head.html&#34;</span> .&gt;: error calling partial: execute of template failed: html/template:partials/head.html:162:18: no such template <span style="color:#e6db74">&#34;_internal/google_news.html&#34;</span>
</span></span></code></pre></div><p>I had been expecting an error, or problem, eventually and as is normal, it happened late at night. It took me a little file search in VSC to find the file in the Hugo theme directory and delete the line causing the issue.</p>
<p>I am using the <em>PaperMod</em> theme and the file is located below and the partial is on line 164:</p>
<p>themes &gt; PaperMod &gt; layouts &gt; partials &gt; head.html</p>
<pre tabindex="0"><code class="language-hugo" data-lang="hugo">{{- template &#34;_internal/google_news.html&#34; . }}
</code></pre><p>Deleting that line, commenting it out doesn&rsquo;t work as it is Hugo shortcode not html, and the site built once more.</p>
<p>I hope this helps someone out with the same issue.<br>
If you want to comment you can reach me on <a href="https://fosstodon.org/@mbt3d">Mastodon</a><br>
I am pretty much read only on there now and only have the account for Blender and things like this post.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Bees Wax Candle</title>
      <link>https://markbtomlinson.com/post/2023/bees-wax-candle/</link>
      <pubDate>Tue, 07 Mar 2023 19:40:04 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/bees-wax-candle/</guid>
      <description>A little arts and crafts sojourn.</description>
      <content:encoded><![CDATA[<p>I recently decided to try and recycle some old bees wax candles as they had burnt down pretty much to the bottom but still had a good deal of wax left on them.
I like bees wax and it seemed a shame to waste it, so I bought some wick and took some little jam jars and made my first candle.</p>
<p>I melted the wax in a pot of hot water, but later found it is easier and quicker to melt the wax in a microwave. The secret is to do it in short bursts and not over heat the wax, 30 second bursts at full power worked well for me, and took about 4 minutes. In the pan with water it took a lot longer.</p>
<p>Nothing to do with 3D but a nice change of pace and a pleasant candle as a result.</p>
<p><img alt="candle" loading="lazy" src="/assets/23/candle.webp"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Git Hooks to Rsync</title>
      <link>https://markbtomlinson.com/post/2023/git-hooks-to-rsync/</link>
      <pubDate>Wed, 01 Mar 2023 18:36:08 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/git-hooks-to-rsync/</guid>
      <description>Replacing Git with Rsync for uploading</description>
      <content:encoded><![CDATA[<h2 id="getting-un-hooked">Getting un-hooked</h2>
<h3 id="you-git">You Git</h3>
<p>I have been using Git Hooks to sync local Hugo website files to my remote server. This has worked well, mostly, but I wondered if it was the most efficient way of syncing up.</p>
<p>I use Git on the local web structure and so have version control. Using Hooks allows me to upload to a remote location and then have the remote server copy the modified file into the live site directory,. This involves a few steps and some repetition and isn&rsquo;t completely error free. If the Hooks location gets out of sync, which it did for me a couple of times I had no alternative, at least one that worked, but to recreate the Hook directory and start again.</p>
<p>While this isn&rsquo;t a big issue but one I would rather avoid, if I can, and so I am now trying the old Rsync method.</p>
<p>I don&rsquo;t know if it is a MacOS issue but rsync on Mac doesn&rsquo;t seem to work as expected using the online example, for Linux, and so it took me some experimentation to get a command that worked.</p>
<h3 id="remote-sync-or-rsync-to-its-friends">Remote Sync or rsync to its friends</h3>
<p>Rsync is a fairly simple tool available on most OS&rsquo;s these days and was originally written in C back in 1996 and is used to synchronise files and local and remote computers.
It is also available as a Daemon that runs in the background to keep locations in sync. I am not using that aspect as I only need to run a sync after I edit a post for this website.</p>
<p>The command I use in Hugo, to achieve this from my Mac to a remote Linux server is as follows:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>rsync -uavP --delete public/ user@example.com:&lt;PATH TO&gt;/html/website/
</span></span></code></pre></div><p>The options are explained in the Man page and the &ndash;delete option deletes files on the remote that aren&rsquo;t on the local machine. This can be dangerous so it may be worth running <code>--dry-run</code> first <code>-n</code> is the short form.</p>
<p>The <code>-uavP</code> options are the ones that I had to figure out as the often proffered linux ones didn&rsquo;t seem to work for me, no idea why. But it isn&rsquo;t important now as these work for me.</p>
<p>In closing this is a fairly easy way of uploading to a server, and once I got the options figured out it seems to work quickly, the capital <code>-P</code> flag, &ldquo;Partial &amp; Progress&rdquo;, shows progress and it is nice to see the files fly away.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Last Day of February</title>
      <link>https://markbtomlinson.com/post/2023/last-day-of-february/</link>
      <pubDate>Tue, 28 Feb 2023 10:20:23 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/last-day-of-february/</guid>
      <description>A month goes by without me posting</description>
      <content:encoded><![CDATA[<p>I had wanted to be a little more consistent when it came to posting on here, however this month got away from me, and to at least post something, I am writing this little piece.</p>
<p>Before the months comes to an utter end I will slip this one in under the wire.</p>
<p>I have been busy though, mostly on learning the *nix CLI and tools, most especially the ins and outs of Find and Grep.
I have also been modelling as a form of relaxation and working on some little Blender scripts I have been putting off for some time now.</p>
<p>I did a little doodle the other day and it was interesting to see the reaction to it online. It was fairly simple and only took me an hour in total, I did another that took much longer and got about the same interest from viewers.</p>
<p>Here is the doodle:
<img alt="Artstation Doodle" loading="lazy" src="https://cdnb.artstation.com/p/assets/images/images/059/888/713/large/mark-b-tomlinson-hole-form-01.jpg?1677358535"></p>
<p>The full post is here: <a href="https://www.artstation.com/artwork/XgBX6y">Abstract Doodle Artstation</a></p>
<p>I have come to realise it is a very personal thing when it comes to what is going to be popular and what isn&rsquo;t. I often get it wrong and seem to be somewhat out of tune with the people that follow me.</p>
<p>The moral here, if you can call it that lofted term, is do what you like post what you are happy with and just move on to the next model.</p>
<p>So that has me covered for a second post in February and I can close the month without feeling guilty about tardiness.</p>
<p>Here&rsquo;s to March, may the farce (sic) be with you.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Open - command Mac terminal</title>
      <link>https://markbtomlinson.com/post/2023/open-command-mac-terminal/</link>
      <pubDate>Thu, 02 Feb 2023 15:09:53 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/open-command-mac-terminal/</guid>
      <description>Use the open command in Mac effectively</description>
      <content:encoded><![CDATA[<h2 id="open-command-mac-terminal">Open, command Mac terminal:</h2>
<p>Most Mac users will know that the <code>open</code> command in the Terminal will open files in the GUI or open a directory in Finder for example <code>open .</code> will open Finder in the current directory, this is useful, but there are a few more things it can do including opening in a specified application.</p>
<p>Here is the usage dump from the tool:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>Usage: open <span style="color:#f92672">[</span>-e<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-t<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-f<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-W<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-R<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-n<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-g<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-h<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-s &lt;partial SDK name&gt;<span style="color:#f92672">][</span>-b &lt;bundle identifier&gt;<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-a &lt;application&gt;<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-u URL<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>filenames<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>--args arguments<span style="color:#f92672">]</span>
</span></span><span style="display:flex;"><span>Help: Open opens files from a shell.
</span></span><span style="display:flex;"><span>      By default, opens each file using the default application <span style="color:#66d9ef">for</span> that file.
</span></span><span style="display:flex;"><span>      If the file is in the form of a URL, the file will be opened as a URL.
</span></span><span style="display:flex;"><span>Options:
</span></span><span style="display:flex;"><span>      -a                    Opens with the specified application.
</span></span><span style="display:flex;"><span>      -b                    Opens with the specified application bundle identifier.
</span></span><span style="display:flex;"><span>      -e                    Opens with TextEdit.
</span></span><span style="display:flex;"><span>      -t                    Opens with default text editor.
</span></span><span style="display:flex;"><span>      -f                    Reads input from standard input and opens with TextEdit.
</span></span><span style="display:flex;"><span>      -F  --fresh           Launches the app fresh, that is, without restoring windows. Saved persistent state is lost, excluding Untitled documents.
</span></span><span style="display:flex;"><span>      -R, --reveal          Selects in the Finder instead of opening.
</span></span><span style="display:flex;"><span>      -W, --wait-apps       Blocks <span style="color:#66d9ef">until</span> the used applications are closed <span style="color:#f92672">(</span>even <span style="color:#66d9ef">if</span> they were already running<span style="color:#f92672">)</span>.
</span></span><span style="display:flex;"><span>          --args            All remaining arguments are passed in argv to the application<span style="color:#960050;background-color:#1e0010">&#39;</span>s main<span style="color:#f92672">()</span> <span style="color:#66d9ef">function</span> instead of opened.
</span></span><span style="display:flex;"><span>      -n, --new             Open a new instance of the application even <span style="color:#66d9ef">if</span> one is already running.
</span></span><span style="display:flex;"><span>      -j, --hide            Launches the app hidden.
</span></span><span style="display:flex;"><span>      -g, --background      Does not bring the application to the foreground.
</span></span><span style="display:flex;"><span>      -h, --header          Searches header file locations <span style="color:#66d9ef">for</span> headers matching the given filenames, and opens them.
</span></span><span style="display:flex;"><span>      -s                    For -h, the SDK to use; <span style="color:#66d9ef">if</span> supplied, only SDKs whose names contain the argument value are searched.
</span></span><span style="display:flex;"><span>                            Otherwise the highest versioned SDK in each platform is used.
</span></span><span style="display:flex;"><span>      -u, --url URL         Open this URL, even <span style="color:#66d9ef">if</span> it matches exactly a filepath
</span></span><span style="display:flex;"><span>      -i, --stdin  PATH     Launches the application with stdin connected to PATH; defaults to /dev/null
</span></span><span style="display:flex;"><span>      -o, --stdout PATH     Launches the application with /dev/stdout connected to PATH;
</span></span><span style="display:flex;"><span>          --stderr PATH     Launches the application with /dev/stderr connected to PATH to
</span></span></code></pre></div><hr>
<h2 id="examples">Examples:</h2>
<h3 id="view-a-md-file-in-marked-2app">View a MD file in Marked 2.app:</h3>
<p><code>open -a Marked\ 2 markdown.md</code></p>
<p>Opens the file <code>markdown.md</code> in the <strong>Marked 2</strong> application, note the escaped <em>space</em>.</p>
<h2 id="select-a-file-in-finder">Select a file in Finder</h2>
<p><code>open -R &lt;filename&gt;</code></p>
<p>This will open the file called <code>&lt;filename&gt;</code> in the Mac Finder window and then select it.</p>
<h2 id="edit-a-text-file-in-textedit-in-the-gui">Edit a text file in Textedit in the GUI</h2>
<p><code>open -e &lt;filename&gt;</code></p>
<p>This one will open <code>&lt;filename&gt;</code>in the Textedit app, handy if you aren&rsquo;t comfortable with Vim.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Who will read this</title>
      <link>https://markbtomlinson.com/post/2023/desc-slug-for-url/</link>
      <pubDate>Mon, 30 Jan 2023 15:15:29 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/desc-slug-for-url/</guid>
      <description>An interesting post turned up in my RSS feed.</description>
      <content:encoded><![CDATA[<p>This post appeared in my feed: <a href="https://mxb.dev/blog/seven-reasons-why-i-dont-write/"># 7 Reasons why I don&rsquo;t write</a></p>
<blockquote>
<h2 id="nobodys-going-to-read-it-anyway">Nobody’s going to read it anyway</h2>
<p>Let’s be honest: nobody likes to shout into the void. Everyone wants their content to be seen, and social validation is the sweet sweet dopamine reward we all crave.
&hellip;</p>
<p>Don’t underestimate how many people actively read personal blogs though! The web dev community is especially fond of RSS, and with the Fediverse gaining more and more popularity, original content on your own domain has a much better reach now than before.</p>
<blockquote>
<p>Who’s gonna read your personal blog because it has an RSS feed? I’m gonna read your personal blog because it has an RSS feed. <a href="https://t.co/mtcyKhEVet">pic.twitter.com/mtcyKhEVet</a></p>
<p>— Chris Coyier (@chriscoyier) <a href="https://twitter.com/chriscoyier/status/1214606808125341696?ref_src=twsrc%5Etfw">January 7, 2020</a></p>
</blockquote>
</blockquote>
<p>I can relate to this post completely, and I find it amusingly ironic that the post appeared in my RSS Feed this morning.</p>
<p>Read the original post linked at the top, it is interesting or at least I found it so.</p>
<p>I am now pretty much free of traditional social media platforms, having left the last, Linkedin, yesterday. The slow wind down of social media site addiction began with Facebook and ended, as I said, with Linkedin.</p>
<p>Although I still have Instagram, I don&rsquo;t consider that a social media platform, I know some do, but for me it is just a place to post renders and 3d work, a one-way place that gets a little traction, and helps with my need for a little external validation from fellow humans.</p>
<p>I once ran a pretty large user group on Facebook (<em>Substance Tools</em>) for a couple of years, well over 20K users, but I still became jaded and walked away. I haven&rsquo;t regretted leaving FB once, honestly it was on of the best things I could have done for my own personal well being.</p>
<p>Twitter was one of the few places I felt comfortable for a long time, but over the last 2 years it had become less and less appealing, then Musk gave me the impetus I need to leave that one too.<br>
Mastodon, never really worked out for me, enough said.</p>
<p>The points raised in OP are pretty much my experience and feelings about the addictive nature of social media and the concerns raised in the post reflect my feelings too.</p>
<p>I had already decided that it doesn&rsquo;t really matter how many people see this, one reader would be a nice, but rather I write and post, now, for my own pleasure.<br>
I like writing and love making 3d art, if others enjoy or find my posts interesting, then that is a nice bonus, but not the reason for doing them.</p>
<p>This site has RSS feed, although by default it is a little hidden, so here&rsquo;s a link <a href="https://markbtomlinson.com/index.xml">RSS</a> until I add it to the sites menu.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Cloud Storage Reduction</title>
      <link>https://markbtomlinson.com/post/2023/cloud-storage-reduction/</link>
      <pubDate>Fri, 20 Jan 2023 16:24:12 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/cloud-storage-reduction/</guid>
      <description>Cloud storage addiction, time for a change.</description>
      <content:encoded><![CDATA[<p>Cloud storage, for me at least, is becoming too vulnerable and time consuming to manage. It is also a huge pit for data hording, take Photos for example, so many old and irrelevant images going back years just sitting there on the cloud gathering pixel dust.</p>
<p>With that in mind I have decided, that this year I am moving back to local storage and away from the likes of Google and One Drive.
I have repurposed my old Mac Mini as a local storage server. The 2012 machine has a very low power foot print using around 10W in idle, better than many dedicated NAS devices I have used.</p>
<p>I have also added Syncthing to the mix, this is also a low resource tool and pretty easy for anyone to setup, and yea FOSS.
The only cloud system I will keep for now is iCloud. This is mostly to do with iOS device syncing, and MacOS app setting syncing. I may look at another way later but for now the cost and overhead of iCloud is low and it works. I don&rsquo;t intend to store more than the absolute minimum needed on there.</p>
<p>I have cleared around 23 Gb of data from Goggle Drive, most of which was old and redundant, the Photos alone where ridiculous, one kept the images around for no good reason other than sentiment. I have everything I need and want to keep stored locally.</p>
<p>The current state of online security and the proliferation of hacking has pushed me to finally act on this, and I am happy I did.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Linux Mint Login Loop</title>
      <link>https://markbtomlinson.com/post/2023/linux-mint-loop/</link>
      <pubDate>Sun, 15 Jan 2023 19:55:18 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/linux-mint-loop/</guid>
      <description>Login to Linux Mint Looping</description>
      <content:encoded><![CDATA[<p>The default installation of Linux Mint on my iMac went very well right up until the moment it didn&rsquo;t.</p>
<p>I don&rsquo;t know the cause, but I did find a few posts online about the problem I had, namely a login loop: whereby the login screen appeared to accept the login details only to show a blank screen momentarily, and then return to the login prompt.</p>
<p>There were comments online proffering a solution in the form of <code>ALT-CTRL-F1</code> etc. Which is supposed to open a terminal window to allow fixes to be applied. The problem for me was that none of the function keys worked F1, F2 etc.</p>
<p>The big issue for me though was the lack of access via SSH, this isn&rsquo;t installed by default yet alone enabled. This, to me is a major oversight in the Distro&rsquo;s design, I am come from a time when Linux was distributed in the mail using Floppy Discs. So GUI interfaces, or <em>X Windows</em> were secondary to the text terminal default, X is, after all, built on top of everything else and is in effect a front end to the real workhorse that is the kernel and associated tools.</p>
<p>In the end I had to reinstall the whole system, which to be fair was no big deal as I am still in the process of playing and setting up, nothing in terms of data was lost or in danger of becoming so.</p>
<p>The take away from my experience was to ensure that the very first thing that got installed on the device was the SSH Server:
<code>sudo apt install openssh-server</code>.
That way should the weird and still not explained login loop reappear I should be able to log in remotely, I hope.</p>
]]></content:encoded>
    </item>
    <item>
      <title>iMac 2012 Recovery</title>
      <link>https://markbtomlinson.com/post/2023/imac-recovery/</link>
      <pubDate>Wed, 04 Jan 2023 14:15:30 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/imac-recovery/</guid>
      <description>New year and a new project on and old machine.</description>
      <content:encoded><![CDATA[<p>I am currently in the process of resetting an old 2012 iMac after deciding trying to set up the Fusion Drive in there was too much hassle. I think it can be done but as it is a proprietary RAID setup I decided to reinstall MacOS and then use an external drive as a dual boot Linux/Mac setup. I had this before and it worked well enough, the only requirement was to hit the boot drive selector shortcut.</p>
<p>After a few false starts with the boot install set up and recovery to Mountain Lion, the drive was locked and not available for the install. I had to use the Terminal in the shell to reformat and mount the 1TB drive for install, easy enough once you know how, like most things.</p>
<p>I now need to update Mountain Lion to a version that can accept updates and browse the Web with HTTPS, so many things get broken if the system is 10 years old. At one point that it complained that the El Capitan DMG downloaded from Mac Store wasn&rsquo;t valid, their advice download from the App Store, a infinite loop there I think.</p>
<p>My fault for not just dual booting the system in beginning instead of wiping the drive/s for a clean Linux install. All good though as I love breaking/dismantling things, this is how I learn when I get them fixed again, yea sometime they don&rsquo;t get fixed, but that&rsquo;s life.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Bring Back Blogging</title>
      <link>https://markbtomlinson.com/post/2023/bring-back-blogging/</link>
      <pubDate>Sun, 01 Jan 2023 09:08:26 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2023/bring-back-blogging/</guid>
      <description>Twitter is creaking. Social media seems less fun than ever</description>
      <content:encoded><![CDATA[<h2 id="bring-back-personal-blogging">Bring back personal blogging</h2>
<p>This post from the <a href="https://www.theverge.com/23513418/bring-back-personal-blogging">Verge</a> appeared on my feed this morning:</p>
<blockquote>
<p>Twitter is creaking. Social media seems less fun than ever. Maybe it’s time to get a little more personal.<br>
In the beginning, there were <a href="https://www.theverge.com/2022/9/13/23349876/the-verge-website-redesign-new-newsfeed-blogs-logo">blogs</a>, and they were the original social web. We built community. We found our people. We wrote personally. We wrote frequently. We self-policed, and we linked to each other so that newbies could discover new and good blogs.<br>
I want to go back there.<br>
The <a href="https://www.techopedia.com/definition/27960/web-10">Web 1.0</a> landscape looked a lot different than the <a href="https://www.techopedia.com/definition/4922/web-20">Web 2.0</a> experience we are used to these days, and personal weblogs or “blogs” were a big part of the evolution of Web 2.0.<br>
In those days, it was really simple. You could sign up for a free site on <a href="https://www.howtogeek.com/692445/remembering-geocities-the-1990s-precursor-to-social-media/">GeoCities</a>, Yahoo, <a href="https://www.blogger.com/about/">Blogger</a>, <a href="http://diaryland.com/">Diaryland</a>, or any of a number of free hosting sites that allowed you to set up your blog, get going with a <a href="https://blog.hubspot.com/website/best-wysiwyg-html-editor">WYSIWYG</a> editor, and send your thoughts out into the world&hellip;</p>
</blockquote>
<p>The post mirrors my thoughts recently and it is nice to see the idea of personal blogs, and websites in general, returning being promoted on some of the larger sites out there.</p>
<p>The original article is over here <a href="https://www.theverge.com/23513418/bring-back-personal-blogging">Bring Back Personal Blogging</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>End of the year and...</title>
      <link>https://markbtomlinson.com/post/2022/end-of-2022/</link>
      <pubDate>Sat, 31 Dec 2022 14:58:32 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2022/end-of-2022/</guid>
      <description>2022 has been a year and a half now it ends</description>
      <content:encoded><![CDATA[<p>In my last post, <a href="/post/social-media-drain">The end of social media</a>, I lamented the decline of social media, and my feelings of weariness regarding the interaction and general lack of sociability on social media in the last couple of years.</p>
<p>In an attempt to lower my stress level and concentrate on more productive things I am stepping further back from this charade and moving into a quieter corner of art and code. These are the two things I love and have been doing for a very long time. This step back, has come after a strong reluctance to close off avenues of marketing, but I also realise that the returns don&rsquo;t warrant the effort/time.</p>
<p>I have long since stopped taking on third party work, commissions. They were the highest stress trigger for me. I have been producing things I want, and perhaps then offering them on <a href="https://gumroad.com/MarkBTomlinson">Gumroad</a> or on <a href="https://blendermarket.com/creators/markbtomlinson">Blender Market</a>, neither of which is likely to make more than a few coffees worth of sales per month, but they are made and uploaded and don&rsquo;t require much maintenance, if this changes I will likely pull my online stuff too.</p>
<p>Blender, in particular, is a difficult sell as the applications itself is free, and the mindset seems to expect everything associated with be the same, with Modo it worked better, but I no longer use Modo so nothing coming for that tool from me anymore.</p>
<p>I am a big fan, addict even, of RSS feeds from online sources, aggregated by Feedly and fed into my Reeder app on my MackBook. It is one way I can bypass the noise, and find diverse and interesting articles on the topics I am interested in. I rarely visit the originating site especially the commercial ones that throw more adverts in you face per line inch than I can both filter or handle. Adblock or not the number of popups and distracting boxes are just horrendous, marketing on steroids, more about returns than sharing information in my opinion. Don&rsquo;t get me started on the bullshit YouTube promoters, pretending to do unbiased reviews, unbiased my arse.</p>
<p>I intended to post more often on here, and there is an xml <a href="/index.xml">RSS feed</a> on here too, if you are interested,. If not I would still recommend using RSS and a decent reader as a way to lower the noise online.</p>
<p>Okay with that, I wish you all a happy new year!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Minting an iMac</title>
      <link>https://markbtomlinson.com/post/2022/install-linux-on-imac/</link>
      <pubDate>Sat, 10 Dec 2022 19:33:16 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2022/install-linux-on-imac/</guid>
      <description>Turning an old iMac into a Linux machine</description>
      <content:encoded><![CDATA[<p>Sadly, Apple has retired my 2012 iMac, after 10 years. The iMac is still working, has a decent CPU and memory and a nice display, albeit not retina, so the retirement does feel somewhat premature to me. Apple puts things out to pasture far too quickly in my opinion, Microsoft is a lot better in this regard, and Linux is top.</p>
<p>Due to concerns about the aging MacOS version on the machine, it limits my application upgrade path, how long will developers keep compiling for older systems 2 or 3 versions, maybe, often they want the latest and greatest version immediately, who can blame them. Add that to the fact that Apple/Nvidia haven&rsquo;t provided GPU/CUDA drivers for years, I have decided to retire Apple from my old iMac and switch it over to Linux Mint.</p>
<p>It fits with my general direction, vis-à-vis software and my dislike of subscriptions, renting software, and my preference for FOSS.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> I have started to take Open Source tools more seriously as a replacement to commercial, this has been spurred on by future accessibility and reliability. Plus companies selling out to the man.</p>
<p>I have the first part done, the machine is running Linux Mint and it looks really nice. I have got some tweaking to do, the old mac had a piggybacked drive set up which I doubt I can replicate, so will have to use the SSD part as the boot and Mechanical part as the storage for everything else. How hard can it be&hellip;</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Free and Open Source Software.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Affinity - What Next</title>
      <link>https://markbtomlinson.com/post/2022/affinity-what-next/</link>
      <pubDate>Tue, 15 Nov 2022 22:58:09 +0000</pubDate>
      <guid>https://markbtomlinson.com/post/2022/affinity-what-next/</guid>
      <description>&lt;p&gt;At the beginning of this month, November, Affinity Serif announced the imminent release of version 2 of its graphic software suit. I, like many, was excited by prospect and the hype that hinted at possibility of finally seeing some long awaited features.&lt;/p&gt;
&lt;p&gt;Unfortunately, for me at least, the release didn&amp;rsquo;t live up to the hype and frankly didn&amp;rsquo;t have features I had expected. Promised features going back years, but I am not here to talk about that, though.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>At the beginning of this month, November, Affinity Serif announced the imminent release of version 2 of its graphic software suit. I, like many, was excited by prospect and the hype that hinted at possibility of finally seeing some long awaited features.</p>
<p>Unfortunately, for me at least, the release didn&rsquo;t live up to the hype and frankly didn&rsquo;t have features I had expected. Promised features going back years, but I am not here to talk about that, though.</p>
<p>I understand that Serif is a relatively small company and has had to contend with all the effects of Covid in the last few years, however: I was still not impressed and frankly a little disappointed, underwhelmed, as they say.</p>
<p>The big problem for me is compatibility, Version 2 files cannot be opened in Version 1. This was not made clear in the program, no warning when opening or saving in the new release. Apparently they mentioned it in an FAQ, which is next to useless as a place for warnings, as you will only reach for that if you encounter a problem, by then it is probably too late.</p>
<p>The other big issue is the huge price hike, and then the massive 40% launch discount this seems dodgy to me, add that to no upgrade path for existing users and it isn&rsquo;t a good feeling, add the lack of warning on the trial, it feels like pushing you even harder to upgrade.</p>
<p>As some have mentioned, you can alleviate the compatibility problem by exporting to PSD. This in itself is bizarre, you have to use a third party format to access their format, across versions. Sounds like some dark twisted joke is in there, I think.</p>
<p>The last thing that concerned me was the bold statement they made, about no future updates, this sounded like it was done and the code was sealed. I have since read that operating system compatibility issues will be addressed, so hopefully it will still work when Window 12 or MacOS 14 is released.</p>
<p>So now I wait and see, I won&rsquo;t be upgrading, the price to feature ratio is too low for me. I am not a 2D graphic artist and I am reasonably happy with the current features for my work. At the same time, going forward I will look at Open Source software alternatives; like <a href="https://krita.org">Krita</a> and <a href="https://inkscape.org/">Inkscape</a>. The thing with the later is the odd, at least to me, UI.</p>
<p>I still love Affinity apps and I am grateful to Serif for making them available and affordable, at least initially.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Blender Class Naming Convention</title>
      <link>https://markbtomlinson.com/post/2022/blender-class-naming-convention/</link>
      <pubDate>Wed, 19 Oct 2022 13:04:58 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2022/blender-class-naming-convention/</guid>
      <description>Naming convention for the BLender Python Class API</description>
      <content:encoded><![CDATA[<h2 id="blender-class-naming-conventions---python-api">Blender Class naming conventions - Python API</h2>
<p>As of Blender 2.8 the API naming requirement is for the <em>class name</em> to match the following convention:</p>
<pre tabindex="0"><code>UPPER_CASE_{TYPE}_mixed_case
</code></pre><p>Where {TYPE} is two letters denoting the class <em>type</em> inherited:</p>
<ul>
<li><strong>HT</strong> – Header</li>
<li><strong>MT</strong> – Menu</li>
<li><strong>OT</strong> – Operator</li>
<li><strong>PT</strong> – Panel</li>
<li><strong>UL</strong> – UI list</li>
</ul>
<p>The class identifier “bl_idname” mast match the class name.</p>
<h3 id="valid-class-name-and-identifier-examples">Valid <em>class name</em> and <em>identifier</em> examples:</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-Python" data-lang="Python"><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">ADDONNAME_OT_my_operator</span>(bpy<span style="color:#f92672">.</span>types<span style="color:#f92672">.</span>Operator):
</span></span><span style="display:flex;"><span>  bl_idname <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;ADDONNAME_OT_my_operator&#39;</span>  <span style="color:#f92672">...</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">ADDONNAME_MT_my_menu</span>(bpy<span style="color:#f92672">.</span>types<span style="color:#f92672">.</span>Menu):
</span></span><span style="display:flex;"><span>  bl_idname <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;ADDONNAME_MT_my_menu&#39;</span>  <span style="color:#f92672">...</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">ADDONNAME_HT_my_header</span>(bpy<span style="color:#f92672">.</span>types<span style="color:#f92672">.</span>Header):
</span></span><span style="display:flex;"><span>  bl_idname <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;ADDONNAME_HT_my_header&#39;</span>  <span style="color:#f92672">...</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">ADDONNAME_PT_my_panel</span>(bpy<span style="color:#f92672">.</span>types<span style="color:#f92672">.</span>Panel):
</span></span><span style="display:flex;"><span>  bl_idname <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;ADDONNAME_PT_my_panel&#39;</span>  <span style="color:#f92672">...</span>
</span></span></code></pre></div><p>If class name or identifier doesn’t meet the conventions, Blender will raise an <strong>Error</strong> warning but still run:</p>
<p>E.g.</p>
<p><code>‘Oscurart Files Tools’ doesn’t contain ‘_PT_’ with prefix &amp; suffix</code></p>
<p>NB: In the future this may cause the Addon to fail and not run at all.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Backface Culling in Blender</title>
      <link>https://markbtomlinson.com/post/2022/backface-blender/</link>
      <pubDate>Mon, 03 Oct 2022 11:44:29 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2022/backface-blender/</guid>
      <description>How to set up backface culling</description>
      <content:encoded><![CDATA[<p>Backface culling in Blender is set in two places, for <strong>solid</strong> view and for <strong>material</strong> view:</p>
<h3 id="solid-view">Solid View</h3>
<p>In Solid view, i.e. Matcap, Studio etc. it is set from the topbar dropdown as shown below:</p>
<p><img alt="back_face_culling_solid_view" loading="lazy" src="/assets/b3d/back_face_culling_solid_view-4790998.webp"></p>
<h3 id="material-view">Material View</h3>
<p>In Material view, i.e. EEVEE is it set in the shader panel on the right, as shown below:</p>
<p><img alt="backface_culling_material_view" loading="lazy" src="/assets/b3d/backface_culling_material_view-4791091.webp"></p>
<h3 id="advantages">Advantages</h3>
<p>Using backface culling allows the user to see through the backside of geometry. This is handy for looking at the bottom of objects, through a ground plane for example. It is also handy for spotting <em>flipped normals</em> in meshes, as the will appear transparent in the viewport.</p>
<h3 id="cycles">Cycles</h3>
<p>Culling in <em>Cycles</em> is more complicated and beyond this post.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Typora Symbolic Links Mac</title>
      <link>https://markbtomlinson.com/post/2022/typora-symbolic-links/</link>
      <pubDate>Sat, 01 Oct 2022 13:25:43 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2022/typora-symbolic-links/</guid>
      <description>How to use unsupported symbolic links in Typora (MacOS)</description>
      <content:encoded><![CDATA[<p>Unfortunately <em>Symbolic Links</em> and shortcuts don&rsquo;t work within Typora&rsquo;s file listing.</p>
<p>I found a work around though:</p>
<p>Create a symbolic link to the folder you wish to add in the default Typora markdown directory, this will then show up in the the file listing, it won&rsquo;t do anything though if you click on it, as it isn&rsquo;t implemented or supported in Typora yet.</p>
<p>But, if you right click on the icon link in the file list and choose <strong>Open in New Window</strong> it will load the linked directories contents.</p>
<p><strong>NB</strong>. This trick only seems to work, after you first open Typora. So if it fails; close the app and retry.</p>
<p>This is a nice workaround for me as I have a main notes folder and want occasionally to edit <em>HUGO</em> markdown files in my local <em>HUGO</em> web server directory.</p>
<p><img alt="typora open in new window" loading="lazy" src="/assets/22/typora-open-new-window.webp"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Long Time No Post</title>
      <link>https://markbtomlinson.com/post/2022/slow-year-for-posting/</link>
      <pubDate>Wed, 21 Sep 2022 13:42:34 +0000</pubDate>
      <guid>https://markbtomlinson.com/post/2022/slow-year-for-posting/</guid>
      <description>A little update to keep my posts going</description>
      <content:encoded><![CDATA[<p>I seem to have let this site go unloved for a long time.</p>
<p>The main reason I suppose is a lack of motivation in posting and a bigger lack of interesting things to post.
I have been quite busy though, both with Blender and in the last month, or so, with Moi3d.
I hadn&rsquo;t used Moi3d in a long time and was starting to miss the little tool, so took a few weeks to refresh my muscle memory and get some practice in.
<a href="https://www.artstation.com/artist/markbtomlinson">Artstation</a> now has a number of new posts and I am happy with the results. Nothing major on there, but steady output.</p>
<p><strong>Update:</strong>
I have finally got around to <em>automating</em> the posting for this website. So the number of excuses for not writing here has diminished.</p>
<p><img alt="Spanny" loading="lazy" src="/assets/22/spanny-02.webp"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Multiple Symbolic Links Windows</title>
      <link>https://markbtomlinson.com/post/2021/2021-11-02-multiple-symbolic-link-creation-windows/</link>
      <pubDate>Tue, 02 Nov 2021 16:23:52 +0000</pubDate>
      <guid>https://markbtomlinson.com/post/2021/2021-11-02-multiple-symbolic-link-creation-windows/</guid>
      <description>&lt;p&gt;Create a batch file, for example: &lt;code&gt;symlink.bat&lt;/code&gt; with the following content and edit the &lt;strong&gt;source&lt;/strong&gt; and &lt;strong&gt;target&lt;/strong&gt; locations to suit.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@&lt;span style=&#34;color:#66d9ef&#34;&gt;echo&lt;/span&gt; off
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;source=c:\source\directory&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;target=c:\target\directory&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;exclude=&lt;/span&gt;%temp%&lt;span style=&#34;color:#e6db74&#34;&gt;\exclude.txt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;rem exclude files/dires with these strings into full path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;echo&lt;/span&gt; .txt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;echo&lt;/span&gt; pipe.cmd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;rem escaped backslash and initial and final quotes to avoid partial matches&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c:\\source\\directory\\something.txt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;rem exclude thisNot file/directory from source directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;%source:\=\\%&lt;span style=&#34;color:#e6db74&#34;&gt;\\thisNot&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;%exclude%&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;forfiles /P &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;%source%&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; /C &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cmd /c (echo @path|findstr /i /v /g:&amp;#34;&lt;/span&gt;%exclude%&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;gt;nul) &amp;amp;&amp;amp; if @isdir==TRUE (mklink /d \&amp;#34;&lt;/span&gt;%target%\\\&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;@file @path) else (mklink \&amp;#34;&lt;/span&gt;%target%\\\&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;@file @path)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;del&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;%exclude%&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; nul
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Original answer posted on&lt;/em&gt;: &lt;a href=&#34;https://stackoverflow.com/questions/19803617/batch-create-symlinks-of-all-files-folders-in-a-directory&#34;&gt;stackoverflow&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Create a batch file, for example: <code>symlink.bat</code> with the following content and edit the <strong>source</strong> and <strong>target</strong> locations to suit.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-cmd" data-lang="cmd"><span style="display:flex;"><span>@<span style="color:#66d9ef">echo</span> off
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">set</span> <span style="color:#e6db74">&#34;source=c:\source\directory&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">set</span> <span style="color:#e6db74">&#34;target=c:\target\directory&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">set</span> <span style="color:#e6db74">&#34;exclude=</span>%temp%<span style="color:#e6db74">\exclude.txt&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">rem exclude files/dires with these strings into full path</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">echo</span> .txt
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">echo</span> pipe.cmd
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">rem escaped backslash and initial and final quotes to avoid partial matches</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">echo</span> <span style="color:#e6db74">&#34;c:\\source\\directory\\something.txt&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">rem exclude thisNot file/directory from source directory</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">echo</span> <span style="color:#e6db74">&#34;</span>%source:\=\\%<span style="color:#e6db74">\\thisNot&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>)&gt; <span style="color:#e6db74">&#34;</span>%exclude%<span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>forfiles /P <span style="color:#e6db74">&#34;</span>%source%<span style="color:#e6db74">&#34;</span> /C <span style="color:#e6db74">&#34;cmd /c (echo @path|findstr /i /v /g:&#34;</span>%exclude%<span style="color:#e6db74">&#34; &gt;nul) &amp;&amp; if @isdir==TRUE (mklink /d \&#34;</span>%target%\\\<span style="color:#e6db74">&#34;@file @path) else (mklink \&#34;</span>%target%\\\<span style="color:#e6db74">&#34;@file @path)&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">del</span> <span style="color:#e6db74">&#34;</span>%exclude%<span style="color:#e6db74">&#34;</span> &gt; nul
</span></span></code></pre></div><p><em>Original answer posted on</em>: <a href="https://stackoverflow.com/questions/19803617/batch-create-symlinks-of-all-files-folders-in-a-directory">stackoverflow</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>FrontMatter for VSC</title>
      <link>https://markbtomlinson.com/post/2021/frontmatter-visual-studio-code/</link>
      <pubDate>Mon, 01 Nov 2021 19:07:36 +0000</pubDate>
      <guid>https://markbtomlinson.com/post/2021/frontmatter-visual-studio-code/</guid>
      <description>Front matter addon for Visual Studio Code</description>
      <content:encoded><![CDATA[<p>I recently set up a addon for Visual Studio Code, for editing Markdown files in HUGO. The addon was from <a href="https://twitter.com/eliostruyf">Elio Struyf</a> called <a href="https://frontmatter.codes/">FrontMatter</a>.</p>
<p>I got it working quickly enough. Although I had problems with the media paths not showing correctly in the media browser. The reason for this was, I&rsquo;d used the default setting (as mentioned in the documentation) which assumes media will be in the root static folder, where as I had media in an assets folder under the content folder.</p>
<p>This caused the links to be shown as <code>/content/assets/image.png</code> and not simply <code>/assets/image.png</code> as expected.</p>
<p>In any case the solution was to edit the <em>Front Matter</em> settings and set the key:
<code>frontMatter/content.publicFolder</code> to <code>&quot;content&quot;</code></p>
<p>This then presented the correct path in the media viewer section of the addon, button for copy and pasting into the post.</p>
<p>More information is available on Elio&rsquo;s documentation page: <a href="https://frontmatter.codes/docs/settings#frontmatter.content.publicfolder">puplicFolder</a>, I really recommend taking sometime to read it through, as it is very helpful, at least is was for me.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Git Version Control Setup</title>
      <link>https://markbtomlinson.com/post/2021/git-version-control-setup/</link>
      <pubDate>Mon, 25 Oct 2021 13:37:56 +0000</pubDate>
      <guid>https://markbtomlinson.com/post/2021/git-version-control-setup/</guid>
      <description>Added Git to my workflow for pushing to Web-Server</description>
      <content:encoded><![CDATA[<p>After a few false starts I have finally got my <strong>Hugo</strong> site setup to use <strong>git</strong> <em>submodule</em> to push the HTML output to the remote webserver.</p>
<p>It was a little involved at first, but once I got my head around the idea of a <em>git repo</em> within a
<em>git repo</em>, not being a <em>git repo</em> but rather just a folder marked as a <em>submodule</em> of some parent module&hellip; you get the idea. A confusing concept that is simple and sounds simple, but isn&rsquo;t explained particularly well in any article I found.</p>
<p>Basically I have Git setup on my local <strong>Hugo</strong> folder and then I set up a <em>submodule</em> on the <code>/public/</code> folder in the Hugo folder. Then I can just push the <code>/public/</code> directory to my webserver host.
Works well on first testing, time will tell though in the long ter. Another push and all seems to be working now.</p>
<p>The command to <em>push</em> to the remote server is this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>git subtree push --prefix<span style="color:#f92672">=</span>&lt;submodule name&gt; ssh://&lt;user&gt;@c&lt;domain&gt;/&lt;remote git folder&gt; &lt;branch&gt;
</span></span></code></pre></div><p>This is using SSH and I have a script in the *<em>hooks</em> folder, set up to copy the pushed files over to live directory on the web-server.</p>
<p>I might write a post on that later, as helps me remember how it is done.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Change Mac Machine Name via Terminal</title>
      <link>https://markbtomlinson.com/post/2021/change-mac-machine-name-via-terminal/</link>
      <pubDate>Fri, 22 Oct 2021 17:36:57 +0000</pubDate>
      <guid>https://markbtomlinson.com/post/2021/change-mac-machine-name-via-terminal/</guid>
      <description>&lt;p&gt;I needed to change the name of one of my Macs remotely and this is the command to do it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo scutil --set HostName &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;NewHostNameHere&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content:encoded><![CDATA[<p>I needed to change the name of one of my Macs remotely and this is the command to do it:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>sudo scutil --set HostName <span style="color:#f92672">[</span>NewHostNameHere<span style="color:#f92672">]</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>SSH copy keys from Windows</title>
      <link>https://markbtomlinson.com/post/2021/ssh-copy-keys-from-windows/</link>
      <pubDate>Fri, 22 Oct 2021 16:42:24 +0000</pubDate>
      <guid>https://markbtomlinson.com/post/2021/ssh-copy-keys-from-windows/</guid>
      <description>ssh-copy-id equivalent in Windows Shell</description>
      <content:encoded><![CDATA[<p>I have recently been setting up an old Mac Mini as Webserver and NAS server. One of the things I wanted to do was enable ssh key pair login and wondered how one used ssh-copy-id on a Windows machine to get the public key from a local machine to the server. It turns out you can&rsquo;t but the <code>cat</code> command can do it just fine.</p>
<p>Here is the template:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>type C:<span style="color:#ae81ff">\U</span>sers<span style="color:#ae81ff">\&lt;</span>user&gt;<span style="color:#ae81ff">\.</span>ssh<span style="color:#ae81ff">\i</span>d_rsa.pub | ssh &lt;user&gt;@&lt;remoteserver&gt; <span style="color:#e6db74">&#39;cat &gt;&gt; .ssh/authorized_keys&#39;</span>
</span></span></code></pre></div><p>This assumes your public key is in the default location, your home directory under the .ssh directory, if not modify the first part of the command to reflect its location</p>
<p>Another way is to use the <em>git terminal</em> for windows as that has ssh-copy-id installed.</p>
<p>On Mac or Linux or the Git Shell you would just use:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>ssh-copy-id &lt;user&gt;@&lt;remoteserver&gt;
</span></span></code></pre></div><p>This will copy from local default to remote default locations. As usual Windows is a little more involved but it works fine and it isn&rsquo;t too hard to understand what is happening.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Empty Pie Menu Blender</title>
      <link>https://markbtomlinson.com/post/2021/2021-06-12-empty-pie-menu-blender/</link>
      <pubDate>Sat, 12 Jun 2021 14:20:08 +0000</pubDate>
      <guid>https://markbtomlinson.com/post/2021/2021-06-12-empty-pie-menu-blender/</guid>
      <description>&lt;p&gt;This is the basic structure of a &lt;em&gt;Pie Menu&lt;/em&gt; in Blender using Python&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; bpy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; bpy.types &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Menu, Operator
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bl_info &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;author&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;: (&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;blender&amp;#34;&lt;/span&gt;: (&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;category&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3D view&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;VIEW3D_MT_PIE_template&lt;/span&gt;(Menu):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#75715e&#34;&gt;# label is displayed at the center of the pie menu.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       bl_label &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Operations&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       bl_idname&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mesh.mypie&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;draw&lt;/span&gt;(self, context):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        layout &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;layout
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        pie &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; layout&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;menu_pie()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        pie&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;operator(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;auto.smooth&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;​&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;register&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;​&lt;/span&gt;       bpy&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;utils&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;register_class(VIEW3D_MT_PIE_template)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;​&lt;/span&gt;       bpy&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;utils&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;register_class(AutoSmooth)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;​&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;unregister&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       bpy&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;utils&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;unregister_class(VIEW3D_MT_PIE_template)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       bpy&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;utils&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;unregister_class(AutoSmooth)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    register()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    bpy&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ops&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;wm&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;call_menu_pie(name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;VIEW3D_MT_PIE_template&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;AutoSmooth&lt;/span&gt;(Operator):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       bl_idname &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;auto.smooth&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       bl_label &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;AutoSmooth&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;execute&lt;/span&gt;(self, context):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           bpy&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ops&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;object&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;shade_smooth()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           bpy&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;context&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;object&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;data&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;use_auto_smooth &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;FINISHED&amp;#39;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content:encoded><![CDATA[<p>This is the basic structure of a <em>Pie Menu</em> in Blender using Python</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> bpy
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> bpy.types <span style="color:#f92672">import</span> Menu, Operator
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>bl_info <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;name&#34;</span>: <span style="color:#e6db74">&#34;&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;author&#34;</span>: <span style="color:#e6db74">&#34;&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;version&#34;</span>: (<span style="color:#ae81ff">0</span>, <span style="color:#ae81ff">0</span>, <span style="color:#ae81ff">0</span>, <span style="color:#ae81ff">1</span>),
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;description&#34;</span>: <span style="color:#e6db74">&#34;&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;blender&#34;</span>: (<span style="color:#ae81ff">2</span>, <span style="color:#ae81ff">80</span>, <span style="color:#ae81ff">0</span>),
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;category&#34;</span>: <span style="color:#e6db74">&#34;3D view&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">VIEW3D_MT_PIE_template</span>(Menu):
</span></span><span style="display:flex;"><span>       <span style="color:#75715e"># label is displayed at the center of the pie menu.</span>
</span></span><span style="display:flex;"><span>       bl_label <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;Operations&#34;</span>
</span></span><span style="display:flex;"><span>       bl_idname<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;mesh.mypie&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">def</span> <span style="color:#a6e22e">draw</span>(self, context):
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        layout <span style="color:#f92672">=</span> self<span style="color:#f92672">.</span>layout
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        pie <span style="color:#f92672">=</span> layout<span style="color:#f92672">.</span>menu_pie()
</span></span><span style="display:flex;"><span>        pie<span style="color:#f92672">.</span>operator(<span style="color:#e6db74">&#34;auto.smooth&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">​</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">register</span>():
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">​</span>       bpy<span style="color:#f92672">.</span>utils<span style="color:#f92672">.</span>register_class(VIEW3D_MT_PIE_template)
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">​</span>       bpy<span style="color:#f92672">.</span>utils<span style="color:#f92672">.</span>register_class(AutoSmooth)
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">​</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">unregister</span>():
</span></span><span style="display:flex;"><span>       bpy<span style="color:#f92672">.</span>utils<span style="color:#f92672">.</span>unregister_class(VIEW3D_MT_PIE_template)
</span></span><span style="display:flex;"><span>       bpy<span style="color:#f92672">.</span>utils<span style="color:#f92672">.</span>unregister_class(AutoSmooth)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> __name__ <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;__main__&#34;</span>:
</span></span><span style="display:flex;"><span>    register()
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    bpy<span style="color:#f92672">.</span>ops<span style="color:#f92672">.</span>wm<span style="color:#f92672">.</span>call_menu_pie(name<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;VIEW3D_MT_PIE_template&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">AutoSmooth</span>(Operator):
</span></span><span style="display:flex;"><span>       bl_idname <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;auto.smooth&#34;</span>
</span></span><span style="display:flex;"><span>       bl_label <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;AutoSmooth&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">def</span> <span style="color:#a6e22e">execute</span>(self, context):
</span></span><span style="display:flex;"><span>           bpy<span style="color:#f92672">.</span>ops<span style="color:#f92672">.</span>object<span style="color:#f92672">.</span>shade_smooth()
</span></span><span style="display:flex;"><span>           bpy<span style="color:#f92672">.</span>context<span style="color:#f92672">.</span>object<span style="color:#f92672">.</span>data<span style="color:#f92672">.</span>use_auto_smooth <span style="color:#f92672">=</span> <span style="color:#66d9ef">True</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> {<span style="color:#e6db74">&#39;FINISHED&#39;</span>}
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>SMB Mac 11.3.1</title>
      <link>https://markbtomlinson.com/post/2021/2021-05-08-smb-mac-11-3-1/</link>
      <pubDate>Sat, 08 May 2021 12:39:03 +0200</pubDate>
      <guid>https://markbtomlinson.com/post/2021/2021-05-08-smb-mac-11-3-1/</guid>
      <description>SAMBA Mac NAS access problem fix</description>
      <content:encoded><![CDATA[<p>Apple in its infinite wisdom changed the settings for Samba &lsquo;SMB&rsquo; protocol and killed access to my NAS server, thanks Apple not like I wasn&rsquo;t using it all the time.</p>
<p>I found a fix online, don&rsquo;t trust me check if there are any risks in this fix:</p>
<p>Create or edit this following file and add the 2 lines to the file.</p>
<p><code>~/Library/Preferences/nsmb.conf</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#f92672">[</span>default<span style="color:#f92672">]</span>
</span></span><span style="display:flex;"><span>protocol_vers_map<span style="color:#f92672">=</span><span style="color:#ae81ff">2</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Busy with kits</title>
      <link>https://markbtomlinson.com/post/2021/2021-02-20-busy_with_kits/</link>
      <pubDate>Sat, 20 Feb 2021 11:46:56 +0100</pubDate>
      <guid>https://markbtomlinson.com/post/2021/2021-02-20-busy_with_kits/</guid>
      <description>Busy making some decal kits for Blender</description>
      <content:encoded><![CDATA[<p>Over the last few weeks I have been busy in Blender using the <a href="https://machin3.io/DECALmachine/">Decalmachine</a> add-on to create some decal textures from Blender.</p>
<p>You can find all my assets over at <a href="https://gumroad.com/markbtomlinson">Gumroad</a>.</p>
<p>For more information on the assets for Blender and Modo just visit the link above.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
