<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
	<channel>
		<title>Lee Kelleher</title>
		<link>https://leekelleher.com/</link>
		<description>Latest blog posts by Lee Kelleher</description>
		<language>en-GB</language>
		<lastBuildDate>Wed, 05 Aug 2026 22:16:51 PDT</lastBuildDate>
		<image>
			<url>https://leekelleher.com/assets/img/nxnw_300x300.jpg</url>
			<title>Lee Kelleher</title>
			<link>https://leekelleher.com/</link>
		</image>
		<atom:link rel="self" href="https://leekelleher.com/feed/" />
			<item>
				<guid isPermaLink="true">https://leekelleher.com/blog/2026/doctype-mag/</guid>
				<link>https://leekelleher.com/blog/2026/doctype-mag/</link>
				<title>DOCTYPE magazine</title>
				<description>
					<![CDATA[<p>Last November, I heard about the launch of <a href="https://vole.wtf/doctype/">DOCTYPE magazine</a>, a HTML homage to those 80's coding magazines which you'd type-in-by-hand the printed source-code to play some mini game. That's how I learnt to code in BASIC back then. I felt the nostalgia, sounded fun, I promptly ordered a copy.</p>
<p>A week or so later, it arrived, I flicked through the magazine, there were 10 standalone webpages, lots of HTML, CSS and JavaScript (some minified) code, some spread over pages. I was keen to get started, <em>(but I was also super busy with the <a href="https://umbraco.com/blog/umbraco-17-lts-release/">Umbraco 17 release</a>).</em> Definitely something to do on a lazy day. The magazine sat on my shelf.</p>
<p>Eventually, one free afternoon mid-January, I dusted off the magazine and got coding, well, copying, but since I've been making webpages since '96, the HTML document boilerplate is total muscle memory. The first game was <strong>Meteors</strong>, (by <a href="https://nanochess.org">Óscar Toledo G.</a>). Initially, I started using VSCode to write the markup, but the modern tooling got in the way. The auto-complete and linting felt like cheating, I quickly switched to my trusty Notepad++. As expected, I made a bunch of typos, probably trying to type too fast, but nothing a mix of browser console errors and manual eye-strain couldn't figure out. I soon had a working game, great fun, impressive result!</p>
<p>I worked my way through all the programs over the next couple of months. I tried to get my kids to have a go, but they were only interested in playing the end result. The <strong>Internet Eye Test</strong> (by <a href="https://www.monkeon.co.uk">Rico Monkeon</a>) turned into a family competition... I've no idea how my eldest actually got the 1px letter, best I could do was 3px!</p>
<p>I thoroughly enjoyed coding and playing the webpages. Whether you grew up in the 80's learning to code from magazines, or are new to HTML and want to figure out how to make some cool games, get yourself a copy of DOCTYPE magazine, highly recommended. <a href="https://vole.wtf/doctype/">https://vole.wtf/doctype/</a></p>
<p>Kudos to <a href="https://mattround.com/">Matt Round</a> for curating an excellent magazine.</p>]]>
				</description>
				<pubDate>Wed, 05 Aug 2026 22:16:51 PDT</pubDate>
			</item>
			<item>
				<guid isPermaLink="true">https://leekelleher.com/blog/2024/umbraco-bellissima-wip-articles/</guid>
				<link>https://leekelleher.com/blog/2024/umbraco-bellissima-wip-articles/</link>
				<title>Umbraco Bellissima WIP articles</title>
				<description>
					<![CDATA[<p>With the release of Umbraco's new backoffice (codenamed Bellissima) drawing closer, (May 2024), I wanted to keep a list of work-in-progress (WIP) links to articles and resources for anyone future extension developers.</p>
<p>As a first port of call for the most up-to-date list of links and resources, please check out the <strong>Umbraco Packages Community Team page <a href="https://github.com/umbraco/Umbraco.Packages/tree/main/bellissima">Umbraco v14 "Bellissima" Resources</a></strong>, much of this is based on <strong>Markus Johansson's (@markusjoha) <a href="https://www.enkelmedia.se/blogg/2023/11/18/resources-for-umbraco-14-belissima-new-backoffice">Resources for Umbraco 14 Bellissima (new Backoffice)</a></strong> page, thank you to Markus! 🙏</p>
<p>The rest of this post is intended to compliment, not compete with, Markus's page.</p>
<h5>Matt Brailsford (@mattbrailsford)</h5>
<p>In the earliest stages of Bellissima, Matt put together a series of articles that explore each aspect of the frontend tech stack. </p>
<ul>
<li><a href="https://dev.to/mattbrailsford/series/20031">Back to the Front-end: Exploring the Future of the Umbraco UI</a></li>
</ul>
<h5>Kevin Jump (@kevinjump)</h5>
<p>Kevin is actively documenting his developer journey as an early adopter of Bellissima.</p>
<ul>
<li><a href="https://dev.to/kevinjump/series/26221">EarlyAdopter's Guide Umbraco v14</a></li>
<li><a href="https://dev.to/kevinjump/series/26289">EarlyAdopter's Umbraco v14 - Gotchas</a></li>
<li><a href="https://dev.to/kevinjump/series/26248">EarlyAdopter's Guide Umbraco v14 - Communication</a></li>
<li><a href="https://dev.to/kevinjump/series/26366">EarlyAdopter's Guide Umbraco v14 - Property Editors</a></li>
</ul>
<h5>Me, Lee Kelleher (@leekelleher)</h5>
<p>I started writing a series of articles about how I am migrating my Contentment package over to Bellissima.</p>
<ul>
<li><a href="https://dev.to/leekelleher/series/25453">Contentment for Bellissima</a></li>
</ul>]]>
				</description>
				<pubDate>Sun, 11 Feb 2024 16:24:18 PST</pubDate>
			</item>
			<item>
				<guid isPermaLink="true">https://leekelleher.com/blog/2024/lee-joined-umbraco-hq/</guid>
				<link>https://leekelleher.com/blog/2024/lee-joined-umbraco-hq/</link>
				<title>Lee joined Umbraco HQ</title>
				<description>
					<![CDATA[<blockquote>
<p>TL;DR, I joined Umbraco HQ, to work on the Bellissima team. Yes, I'm being paid to work on an open-source project. No, Umbraco did not acquire my Contentment package.</p>
</blockquote>
<p><em>Now, the longer story, with plenty of nuance...</em></p>
<p>At the start of 2022, after 10 years, I left my agency, Umbrella. I'd gotten weary with the grind of agency-land, a lack of fulfilment with the quality of work. I wanted to explore a path down a product development route. I'd been developing Umbraco packages for a long time, I enjoyed that type of work and people valued using those packages.</p>
<p>My initial thought was to follow the path that my peers had paved, and go down a commercial Umbraco package route; <a href="https://vendr.net/">Matt with Vendr</a>, <a href="https://jumoo.co.uk/uSync/">Kevin with uSync</a>, <a href="https://soetemansoftware.nl/">Richard Soeteman</a>, et al.</p>
<p>Initially, I explored what I could do with my Contentment package. There didn't feel like much I could explore, it was already open-source after all. Some advised that I could close-source it and charge a nominal fee, (e.g. under $50), but looking at the stats (from my own telemetry data), this wouldn't be sustainable for me - especially when compared to a freelance Umbraco developer's day rate.</p>
<p>I gave myself 6 months to come up with an alternative idea (whether it'd be Umbraco related or not). I'd already planned for this when leaving Umbrella, so made sure I was financially stable during this time.</p>
<p>During the 6 months, I'd had many conversations with people within the community, lots of ideas, all with potential, but all suffered from a similar concern - was the Umbraco ecosystem large enough to sustain these ideas? Most of the ideas would require heavy marketing to gain any momentum... and let's face it, I wasn't looking to be a "sales guy".</p>
<p>I had lots of "what ifs", envisaging what a successful commercial Umbraco package look like, and what would be the end goal. I kept come to one of two outcomes, either a decent lifestyle business or being acquired by Umbraco HQ. <em>(Spoiler alert, Vendr was acquired by Umbraco in April 2023.)</em></p>
<p>Towards the end of my 6 month idea exploration, I'd been chatting a lot with <a href="https://gibe.digital/">Steve at Gibe</a> about helping them to productise their sports portal solution. I joined Gibe on a freelance contract to build <a href="https://www.useplaymaker.com/">Playmaker</a>. If you attended the Umbraco Spark conference 2023, we did a talk about it; <a href="https://umbracospark.com/media/vu5laxcb/spark-iii_2023_playmaker_danceswithwolvespptx-1.pdf">Playmaker: Dances with Wolves</a>.</p>
<p>I felt happier building a product that had a long term vision.</p>
<p>After finishing up with Gibe, around end of the summer 2023, I went back to the drawing board, had a few ideas, but nothing I wanted to pursue. The lure of the freelancer day rate was more appealing than bootstrapping a new venture. I slowly resigned myself to going back to agency-land, it wasn't exciting, but gotta feed the kids, hey ho!</p>
<p>I tried to put the feelers out on LinkedIn, got a bombarded with recruitment agents, urgh, it didn't feel like the right move.</p>
<p>Mid-December 2023, I was chatting with a close friend (outside the tech world), who asked me what the heck I was up to and when was I going to sort my shit out. Some days you need to a mate to give you a swift kick up the arse.</p>
<p>Next day, I was chatting with Matt, and the topic of "would I consider working for Umbraco?" came up. <strong>Okay, subplot...</strong></p>
<blockquote>
<p>I had thought about working for Umbraco HQ a couple of years ago. <a href="https://www.andybutland.dev/">Andy Butland</a> had recently joined and was looking for an Integrations Developer to join the new DXP team and build all those integration/connector packages. I'd chatted with Andy about it, it was all exciting, but then something strange happened at the same time.</p>
<p>This little fella popped his head over the wall...</p>
<p><img src="/umbraco/contentment/assets/foo.png" alt="&quot;Lee was here&quot;" /></p>
<p>I got a message from Ilham at Umbraco HQ, asking me about the little character in my Contentment package. Turns out that they'd had a complaint from an Umbraco Cloud customer who thought that my Contentment package had hacked their CMS backoffice. Obviously, this wasn't the case, but Ilham wasn't sure so wanted to check with me first. I'd explained it was along the same lines as Umbraco's manifesto 6.13% crazy, "Happy Caturday" and all that nonsense.</p>
<p>All was fine. Except, I couldn't shake the thought that if I took a job with Umbraco, then I may have felt guilty about this and/or been encouraged to remove such tomfoolery from my package.</p>
<p>At the time, I felt I needed my own autonomy to do what I wanted to do, without repercussion, so I let Andy know that I wouldn't be pursuing the position. I felt a bit rubbish about that, as it would have been cool working with Andy on those packages.</p>
</blockquote>
<p>Back to chatting with Matt. I said that I'd drop Filip an email, just to put the feelers out there. In my mind, I was thinking I'd hear back in a few weeks, maybe chat in a few months or maybe at CodeGarden, just see where it goes.</p>
<p><strong>Nope!</strong> 4 minutes later, Filip replied, saying he'll check internally. Next day Filip emailed back saying there wasn't any open positions for me, but we should have a call the following day. On the Friday, I have a call with Filip and he offers me a job on the Bellissima team... and can I start immediately, and oh, can I fly out to Denmark the following week to meet the team.</p>
<p>Wow, this was quite the whirlwind. I'd never had a job enquiry turnaround so quickly, it was all very exciting.</p>
<p>After a couple of days back and forth of contract discussions, we were all happy. For those interested, there was zero mention of Contentment being acquired or absorbed into the core CMS. The focus of my work is to help the team deliver the new backoffice for Umbraco 14. I'm sure we'll talk about Contentment (or its features) once v14 has launched.</p>
<p>You may be wondering what changed for me. Am I still concerned about giving up autonomy on my own work? I'm less concerned these days. What became apparent to me since leaving Umbrella is that I was looking for a way to get paid to be an open-source developer, and now that's a reality.</p>]]>
				</description>
				<pubDate>Sun, 11 Feb 2024 14:57:18 PST</pubDate>
			</item>
			<item>
				<guid isPermaLink="true">https://leekelleher.com/blog/2023/lees-opinions-on-umbraco-naming-things/</guid>
				<link>https://leekelleher.com/blog/2023/lees-opinions-on-umbraco-naming-things/</link>
				<title>Lee&#039;s opinions on Umbraco + naming things</title>
				<description>
					<![CDATA[<h2>Naming things is hard (maybe?)</h2>
<h3>Text casing styles</h3>
<blockquote>
<p><em>Note: I'll be mentioning different text casing styles in this article. In case you aren't aware of these, here's a quick primer...</em></p>
</blockquote>
<p>{% details Lexicon the different text casing styles %}</p>
<p>These are the different text casing styles for naming things like folders, files, URLs, variables, etc. Along with the typical <code>UPPERCASE</code>, <code>lowercase</code>, <code>Title Case</code> and <code>Sentence case</code>, there are also...</p>
<ul>
<li><code>PascalCase</code> - spaces removed, each word is capitalised, <em>(popularized by the [Pascal language](<a href="https://en.wikipedia.org/wiki/Pascal">https://en.wikipedia.org/wiki/Pascal</a></em>(programming<em>language)))</em>.</li>
<li><code>camelCase</code> - same as PascalCase, but starts with lowercase, <em>(because the capitals look like camel humps)</em>.</li>
<li><code>kebab-case</code> - spaces replaced with hyphens/dashes, generally lowercase, <em>(named on a late Saturday night after the pub closed)</em>.</li>
<li><code>snake_case</code> - spaces replaced with underscores, generally lowercase, <em>(named after some slippery character)</em>.</li>
</ul>
<blockquote>
<p>For further explanation on these text casings, take a read of <a href="https://www.freecodecamp.org/news/snake-case-vs-camel-case-vs-pascal-case-vs-kebab-case-whats-the-difference/">freeCodeCamp's article on <strong>What's the Difference Between Casings?</strong></a>.</p>
</blockquote>
<p>{% enddetails %}</p>
<h2>General naming of things</h2>
<p>For anything that is going to be a public-facing web-asset, e.g. folders, filenames, anything that'll become a URL, then I go with <strong>kebab-case</strong> (lowercase) all the way.</p>
<blockquote>
<p><em>In the early 2000s, the GOV.UK team (Alphagov back then, now GDS), released a bunch of guidelines on file naming, the kebab-case one stuck in my mind. Unfortunately, I can't find a link to the original document.</em></p>
</blockquote>
<p>For Visual Studio projects, the folder structure would <em>generally</em> correspond C# namespaces and types, so they'd be in <strong>PascalCase</strong>.</p>
<p>For C# variables names; <strong>camelCase</strong>, but I still underscore prefix <code>_</code> for private backing fields, <em>(old habits die hard)</em>.</p>
<h2>Namespaces</h2>
<p>From my early .NET and XML days I learnt about the importance of clear and decisive namespaces. To be treated like a classification system, (scoped however you need, e.g. per project, per organisation, for global usage). I'd spend a silly amount of time deliberating on the namespace taxonomy for my code libraries.
It's like creating your own mini <a href="https://en.m.wikipedia.org/wiki/Dewey_Decimal_Classification">Dewey Decimal system</a>.</p>
<p>For Visual Studio/.NET projects and libraries, I follow the <a href="https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-namespaces">general .NET convention</a> of dot-delimited, capitalised/PascalCase namespaces.</p>
<p>Nowadays, especially for any Umbraco extensions I develop, I try to follow Umbraco's own namespaces as closely as possible. e.g. I'd put my custom <a href="https://github.com/umbraco/Umbraco-CMS/blob/release-10.0.0/src/Umbraco.Core/Routing/IContentFinder.cs"><code>IContentFinder</code></a> classes under a <code>[Brand].Web.Routing</code> namespace. Mostly so that it feels logical for any other developers who may be familiar with Umbraco core code.</p>
<h3>.NET libraries</h3>
<p>As I start planning out an ASP.NET website, I try to judge how much application code it will need. For basic brochureware websites, there may be an odd API controller, so I'll end up placing that code within the website itself, _(for legacy ASP.NET, I'd put it in <code>App_Code</code>; for .NET Core, it'd be in the main project, pre-compiled)._</p>
<p>When there is more application code required, I'd separate out code into additional library dependencies, which needs to be named - <strong>what do I call them?</strong></p>
<p>Historically, I'd go with initially adding a <code>[Brand].Core</code> library, and whack everything in there. Then if needed, separate out larger features to their own libraries. But <strong>what do I call them?</strong></p>
<p>As mentioned in the previous section, with my Umbraco work, I'd been following a similar namespace pattern to Umbraco CMS itself.
I'd typically start off with naming my main project as <strong><code>[Brand].Web</code></strong>, this would house the Umbraco CMS instance, the Razor views, wwwroot, and not much else.</p>
<p>For the public-facing, website specific code, (including Surface/API controllers, ViewComponents, extension methods, etc). I'd name that <strong><code>[Brand].Cms.Web.Website</code></strong> library (as Umbraco has a corresponding named library).</p>
<p>For any CMS backoffice specific code, e.g. property-editors, dashboards, notification handlers, (maybe even a <a href="https://github.com/leekelleher/umbraco-contentment/blob/develop/docs/editors/data-list.md#extending-with-your-own-custom-data-source">custom Contentment Data List source</a>), etc. I'd name this <strong><code>[Brand].Cms.Web.BackOffice</code></strong>.</p>
<blockquote>
<p>If there is application code that needs to be shared between the <code>Website</code> and the <code>BackOffice</code> libraries, e.g. generated ModelsBuilder classes, Configuration classes; I'd go with having a shared library called <strong><code>[Brand].Cms.Web.Common</code></strong>.</p>
</blockquote>
<p>For any additional features, say a 3rd-party integration, then I'd follow similar to how Umbraco have done with their <a href="https://www.nuget.org/packages?q=Umbraco.Cms.Integrations"><code>Umbraco.Cms.Integrations.*</code> packages</a>, so for a MailChimp integration, I'd go with <strong><code>[Brand].Cms.Integrations.MailChimp</code></strong>; or a YouTube integration, <strong><code>[Brand].Cms.Integrations.YouTube</code></strong>.</p>
<p>For something that is more short-lived, such as a pre-launch content migration using <a href="https://github.com/Jumoo/uSyncMigrations">uSync Migrations</a>, that may require custom code, I'd have a standalone <strong><code>[Brand].Cms.ContentMigration</code></strong> library, so that it can easily be removed prior to launch/production.</p>
<h3>NuGet packages</h3>
<p>Most often when naming a NuGet package, you'd go with whatever the name of your Visual Studio project library is, they fall hand-in-hand. However, if you named your library something simple, say after a generic English word, or something that has no context outside of your scope/project, then it can look messy.</p>
<p>I try to take a worldview; think globally. ??</p>
<p>Many developers prefix their package ID with their organisation's name; this is quite common, good advertising and totally acceptable.</p>
<p>With open-source Umbraco community-related NuGet packages, I've seen several misnamed packages, but not to pick faults with others, I'll keep focus on my own mistakes. Let's take <a href="https://our.umbraco.com/packages/backoffice-extensions/ucomponents/"><strong>uComponents</strong></a> (circa 2010), as the name may imply, it's a bunch of components for Umbraco, (hence the u-prefix, part of a trend of packages around that time; uCommerce, uBlogsy, uCssClassNameDropdown, uSync, etc), it made sense, it was a good brand name. The Visual Studio project was named <code>uComponents</code>, so when we made the NuGet package, the obvious choice was, <em>you guessed it</em>, <a href="https://www.nuget.org/packages/uComponents"><code>uComponents</code></a>! ??</p>
<p><strong>Why is this a problem?</strong> At face value, it isn't a problem. Taking a step back at a more global level, what does "uComponents" mean to the rest of the world? Many of the .NET developers who heavily use NuGet may have not even heard of Umbraco CMS, let alone a 3rd party plugin for it. What if people from the <a href="https://platform.uno/">Uno Platform</a> community are browsing NuGet for some kind of components extension library? You can see, this could get confusing outside the scope of the Umbraco community/ecosystem.
On top of this, uComponents was developed against Umbraco v4, with its last release in 2016, now it's there to be lingering on the NuGet repository until the end of time, set in stone.</p>
<p>After that I started to prefix my package names under something more scoped to the context of the Umbraco ecosystem, a la <code>Our.Umbraco.*</code>.</p>
<blockquote>
<p>You can read an old post of mine about the <a href="https://dev.to/leekelleher/history-of-our-umbraco-package-names-34f2">History of "Our.Umbraco.*" package names</a>.</p>
</blockquote>
<p>More recently, Umbraco HQ allowed use of the <code>Umbraco.Community.*</code> prefix, which I've use for my <a href="https://www.nuget.org/packages/Umbraco.Community.Contentment">Contentment package</a> and I actively advocate other package developers to do the same.</p>
<h3>GitHub repositories</h3>
<p>Given the name of a public GitHub repository is part of its URL, I'll use kebab-case. Additionally, I'll include a prefix to set the scope/context/namespace of the repository itself, this would typically be the primary technology used, e.g. <code>umbraco-contentment</code>.</p>
<p>My reasoning behind this, is for GitHub's approach to repository forking. Let's take for example <a href="https://github.com/umbraco/rfcs">Umbraco's RFCs repo, <code>umbraco/rfcs</code></a>; the name of the organisation is <code>umbraco</code> and the name of the repository is <code>rfcs</code>, <em>(all makes sense!).</em> If I were to fork this repo, (<a href="https://github.com/leekelleher/umbraco-rfcs">which I have</a>), then that would become <code>leekelleher/rfcs</code>, losing it's context of it being about Umbraco - so I'd personally rename my fork to <code>leekelleher/umbraco-rfcs</code>.</p>
<p><strong>Does it matter?</strong> In the greater schemes probably not, but I prefer the semantics of such naming.</p>
<p>The majority of my GitHub repositories are Umbraco-related, so mostly have an <code>umbraco-</code> prefix, but if I was developing a dependency-free library in a specific language/framework, I'd used whatever prefix deemed relevant, e.g. <code>dotnet-</code>, <code>php-</code>, <code>wordpress-</code>, etc.</p>
<h2>Umbraco CMS schema style guide</h2>
<p>I wanted to briefly touch on naming things in Umbraco CMS itself, e.g. the schema: Document Types, Property Types, Templates, etc.</p>
<p>For Document Types and Property Types, I try to keep the names as <strong>Sentence case</strong>, (not Title Case), I used to do this, but I tried out (Sentence case) and it felt more natural and friendly to read. With the aliases, these are camelCase by default, no arguments there. As for the descriptions, I try to write simple/plain English summaries, avoiding any technical jargon.</p>
<p><strong>Document Type icon colours.</strong> I try to have a consistency based on the content type, e.g. Compositions are <strong>Lime</strong>; Pages (nodes in the tree) are <strong>Indigo</strong>; Element Types/Blocks are <strong>Blue-Grey</strong>. <em>(I dunno, it makes me happy).</em></p>
<h2>Further reading</h2>
<p>If you're interested in how things are named in other web-tech, here are a few links for further reading...</p>
<ul>
<li><a href="https://html.spec.whatwg.org/multipage/semantics-other.html">HTML5 spec on <strong>Common idioms</strong></a></li>
<li><a href="https://codeguide.co/"><strong>Code Guide</strong> by Mark Otto</a>, Standards for developing consistent, flexible, and sustainable HTML and CSS.</li>
</ul>]]>
				</description>
				<pubDate>Wed, 06 Dec 2023 00:00:00 PST</pubDate>
			</item>
			<item>
				<guid isPermaLink="true">https://leekelleher.com/blog/2023/lees-opinions-on-umbraco-coding-standards/</guid>
				<link>https://leekelleher.com/blog/2023/lees-opinions-on-umbraco-coding-standards/</link>
				<title>Lee&#039;s opinions on Umbraco + coding standards</title>
				<description>
					<![CDATA[<p>When you learn a programming language, your initial coding style is dictated by the lessons; your teacher; the books you study. My first programming language was Sinclair BASIC on the ZX Spectrum 48K. I had a book on how to code simple games, that would influence how I'd name variables, etc. <em>(mostly as single letters, which was a terrible idea).</em></p>
<p>Several years later, I'd got into developing with Visual Basic, <a href="https://en.wikipedia.org/wiki/Hungarian_notation">Hungarian notation</a> was all the rage; (TL;DR, prefixing variable names to indicate its type, e.g. <code>iCount</code> for an integer variable to count something with).</p>
<p>Even later, when I was learning C#, Hungarian notation had fallen out of favour, mostly due to Visual Studio compile-time type-checking; and that it was deemed healthier and maintainable to have semantic variable names. You adapt with the times (and your development teams) and evolve your coding style.</p>
<h2>Tabs vs spaces</h2>
<p>My long time personal preference for indentation is <strong>tabs</strong>. It made sense to me. A single character of variable width (configurable in your code editor/IDE). However most development teams that I've worked on have had a stronger preference for the use of spaces, so we'd end up have tiresome debates on which was better. <em>(When I became the Lead Developer on my team, there were less debates, tabs would win out).</em></p>
<p>This all changed when I started working on open-source projects. The evilest type of indentation is mixed tabs &amp; spaces - it's the kind of thing that'd turn my stomach! You have to pick a style and stick with it; consistency. Of course, I would pick tabs, but when I receive a pull request contribution, I'd often find there'd be either a mix of tabs &amp; spaces, or worse, entire files re-indented from tabs to spaces... <a href="https://en.wikipedia.org/wiki/Law_of_triviality">things would get tribal</a>.</p>
<p>I soon came to the conclusion that I was swimming against the tide arguing for tabs, when the majority of developers would use spaces. I wanted to play nicely with others, <em>I cared less for the bike-shed,</em> so I adapted to use spaces and evolved my coding style. <em>(It took me a few years to get used to this!)</em></p>
<blockquote>
<p>Note: With the widespread adoption of <a href="https://editorconfig.org/">the <strong><code>.editorconfig</code></strong> specification</a>, <em>(circa. 2017)</em>, it became simpler to enforce a consistent coding style for an entire project.</p>
</blockquote>
<h2>Brace! Brace!</h2>
<p>Code readability is something that I'd become more aware of since contributing to open-source projects. Reviewing code changes on pull requests in a web browser can get a little tricky to mentally process.</p>
<p>For example, take a single line conditional, I'd be tempted to write...</p>
<pre><code class="language-csharp">if (input == null) throw new ArgumentNullException(nameof(input));</code></pre>
<p>This is fine and acceptable. However if we were to modify this line, say with an extra condition or change the exception logic, the line gets longer; the diff looks messy; it can take a little more mental processing to understand the exact change.</p>
<p>I opted to take the more verbose approach of having newline-braces for all code blocks, including single line conditionals.</p>
<pre><code class="language-csharp">if (input == null)
{
    throw new ArgumentNullException(nameof(input));
}</code></pre>
<p>The C# compiler doesn't care, and it's more readable to me.</p>
<h3>Ternary conditional operator</h3>
<p>I do like the ternary conditional operator, <em>(<code>?:</code> uh huh huh),</em> it can make simple single-line if/else statement more succinct. In a similar vein to the code blocks, I end up placing the resulting expressions on indented newlines.</p>
<pre><code class="language-csharp">public string GetResult(bool flag)
{
    return flag == true
        ? "Success"
        : "Failure";
}</code></pre>
<p>Again, more verbose, but more readable in my mind and gives a structure for any future amends; understanding diff changed, etc.</p>
<h2>Cognitive load</h2>
<p>On the topic of code readability, you may have noticed in my previous code snippet I added <code>== true</code> to the condition. Many developers see this as ugly and redundant code, as the condition is implied to be <code>true</code>. Sure, once you understand that's happening, that's fine, you're an experienced developer, totally acceptable.</p>
<p>Let's take this condition...</p>
<pre><code class="language-csharp">if (!string.IsNullOrWhiteSpace(input))</code></pre>
<p>When we read this condition, we think, <em>"okay, if the string is not null or empty or whitespace then proceed".</em> But optically, scanning the text from left to right, you have to mentally take note of the unary logical negation operator <em>(<code>!</code> bang),</em> then understand what the <code>string.IsNullOrWhiteSpace</code> method means; in both terms of resultant object-type (hopefully a Boolean) and the argument parameter. Your brain is keeping track of a couple of things here, the negation and the method result, then cognitively swapping them around to make a natural English sentence (in my mind).</p>
<p>Taking the same example, but now with the explicit Boolean operator... </p>
<pre><code class="language-csharp">if (string.IsNullOrWhiteSpace(input) == false)</code></pre>
<p>For me, optically, the text scans the way I comprehend the logic, <em>"is the string null or empty or whitespace? no? then proceed".</em></p>
<p>The C# compiler doesn't care whether you use the <code>!</code> bang or <code>== false</code>, it all compiles down to the exact same bytecode, <em>(trust me, try it out in <a href="https://www.linqpad.net/">LINQPad</a>, view the generated IL code).</em></p>
<blockquote>
<p><em>If you strongly disagree with me on this one, that's cool,</em> <a href="https://www.reddit.com/r/csharp/comments/vdkx68/boolean_false_or_boolean/"><em>there's a special reddit thread for experienced developers</em></a>.</p>
</blockquote>
<h2>C# language evolutions</h2>
<p>Much of my C# syntax keeps changing as the language itself evolved. It didn't take me too long to switch over to using <code>var</code> declarations and <code>$"Hello {name}"</code> string interpolation. But some other new language features have taken me longer, like the file-scoped namespace declaration <em>(as opposed to have surrounding braces for the namespace),</em> or <code>Span&lt;char&gt;</code> pattern matching <em>(way too much cognitive load, it hurts my head).</em></p>
<p>I try to evaluate the latest C# language features, to get a feel for if they appear comprehensible to a newcomer. If so, then I'd most likely adopt it.</p>]]>
				</description>
				<pubDate>Mon, 04 Dec 2023 00:00:00 PST</pubDate>
			</item>
			<item>
				<guid isPermaLink="true">https://leekelleher.com/blog/2023/lees-opinions-on-umbraco-topic/</guid>
				<link>https://leekelleher.com/blog/2023/lees-opinions-on-umbraco-topic/</link>
				<title>Lee&#039;s opinions on Umbraco + [topic]</title>
				<description>
					<![CDATA[<h2>Strong Opinions, Weakly Held</h2>
<p>To open with <a href="https://youtu.be/yoEezZD71sc?t=376">a quote by Tim Minchin</a>...</p>
<blockquote>
<p><em>A famous bon mot asserts that <a href="https://en.wikipedia.org/wiki/Wikipedia:Opinions_are_like_arseholes">opinions are like assholes</a>, in that everyone has one.  There is great wisdom in this, but I would add that opinions differ significantly from assholes, in that yours should be constantly and thoroughly examined.</em></p>
</blockquote>
<p>Many years ago, I read a post on Jeff Atwood's Coding Horror blog, <a href="https://blog.codinghorror.com/strong-opinions-weakly-held/">Strong Opinions, Weakly Held</a>, this resonated with me; over my years with Umbraco, I'd racked up numerous MVPs, to the point where some may have perceived me as an authority on all things Umbraco; I'm not, I'm always learning - and whilst I can have strong opinions from time to time, I do try to keep an open mind about them, to be challenged and evolve accordingly.</p>
<p>Offering an unsolicited opinion on a particular topic can be a terrible idea. <em>I mean, who cares about Silicon Valley boardroom power struggles, right?</em> But then sometimes people do care, and want you to share your thoughts and insights - so at the request of my good friend @lottepitcher...</p>
<blockquote>
<p><em>@leekelleher I have always thoroughly enjoyed, and benefitted from, hearing all the opinions that you have in and around the #umbraco ecosystem. So maybe a post per opinion that you have the desire and energy to share?! Off the top of my head: naming things (classes/projects/repos/nuget); coding styles for readability; why one should work in public (I mean you share <em>a lot</em>, why is that?!). That's my two cents at least ??</em>
<a href="https://umbracocommunity.social/@lotte/111448500067158203">https://umbracocommunity.social/@lotte/111448500067158203</a></p>
</blockquote>
<p>This series of articles will offer my opinions on various aspects of working with Umbraco CMS, .NET development and the community package ecosystem.</p>
<ul>
<li><a href="/blog/2023/lees-opinions-on-umbraco-coding-standards/">Lee's opinions on Umbraco + coding standards</a></li>
<li><a href="/blog/2023/lees-opinions-on-umbraco-naming-things/">Lee's opinions on Umbraco + naming things</a></li>
</ul>]]>
				</description>
				<pubDate>Mon, 04 Dec 2023 00:00:00 PST</pubDate>
			</item>
			<item>
				<guid isPermaLink="true">https://leekelleher.com/blog/2023/contentment-for-bellissima/</guid>
				<link>https://leekelleher.com/blog/2023/contentment-for-bellissima/</link>
				<title>Contentment for Bellissima</title>
				<description>
					<![CDATA[<h2>Preamble</h2>
<p>This series is about the migration of my Umbraco package, Contentment, to the new Umbraco backoffice, codenamed Bellissima.</p>
<details>
<summary>If you don't know what any of that means, expand this section for background reading and lexicon for this series.</summary>
<ul>
<li><a href="https://marketplace.umbraco.com/package/umbraco.community.contentment">Contentment</a> is the name of my Umbraco package, it contains a bunch of useful property-editors.</li>
</ul>
<blockquote>
<p>If you want to see Contentment in action, I did a 30 minute presentation at CodeGarden 2023, <a href="https://www.youtube.com/watch?v=fYPcFOxeN4c">Finding Contentment</a>, exploring each of the editor components.</p>
</blockquote>
<ul>
<li>
<p><a href="https://umbraco.com/blog/bellissima-preview-releases-of-the-new-backoffice/">Bellissima</a> is the project codename of the new backoffice for Umbraco CMS, (circa v14).</p>
</li>
<li>
<p>Bellissima web tech... e.g. Web Components, TypeScript, Lit, Vite, see @mattbrailsford's series of articles <a href="https://dev.to/mattbrailsford/series/20031">Back to the Front-end: Exploring the Future of the Umbraco UI</a>.</p>
</li>
</ul>
</details>
<blockquote>
<p><em>Disclaimer: I am part of the <a href="https://community.umbraco.com/learn-about-the-community/community-teams/the-backoffice-community-team/">Umbraco Backoffice Community Team</a> - my opinions in these articles are my own and do not reflect the opinions of the community team nor Umbraco HQ.</em></p>
<p><em>The detail in these articles tries to be as accurate as possible (at the time of writing), if reading this a year or two from now, I'd expect there to be many changes with how Umbraco extension development is approached.</em></p>
</blockquote>
<hr />
<h2>Where to begin?</h2>
<p>At CodeGarden (June 2023), a preview of v14 was released, but wasn't quite ready for package development. By August 2023, <a href="https://umbraco.com/blog/bellissima-preview-releases-of-the-new-backoffice/"><code>14.0.0--preview002</code> was released</a>, including the Extension API, so package developers could register their extension points, e.g. dashboards, property-editors, etc. Meaning it was ready to explore.</p>
<p>My initial dilemma was should I attempt to make the existing Contentment codebase work with Bellissima, or start from scratch?</p>
<blockquote>
<p><em>Note: I had a similar dilemma with <a href="https://github.com/leekelleher/umbraco-contentment/discussions/105">the Umbraco v9 / .NET Core migration work</a>. Ultimately, I started off from scratch, then did a complete U-turn and ended up with the .NET multi-targeting solution, supporting multiple versions of Umbraco in a single package. (Which has turned out quite well for Contentment.)</em></p>
</blockquote>
<p>My gut feeling was to keep the existing codebase as-is, making sure that the .NET assembly library has binary compatibility (e.g. the C# server-side bits), before thinking about the backoffice-frontend/web-component bits.</p>
<p>Umbraco v13 and v14 would be compiled against .NET 8.0, so I got the latest .NET 8 preview installed and configured Contentment's <code>.csproj</code> file to target <code>net8.0</code> and reference Umbraco's <code>14.0.0--preview002</code> NuGet packages.  As expected, this gave me a bunch of compiler errors from <a href="https://our.umbraco.com/download/releases/1300">breaking-changes in v13</a>/v14 codebase.</p>
<p>Fixing up the breaking-changes was straight forward, nothing complicated, given my .NET multi-targeting approach, I could make use pre-processor directives for specific fixes, e.g. <code>#if NET8_0_OR_GREATER</code>. All time consuming, but no headaches.</p>
<h2>Versioning dilemmas</h2>
<p>Once the compiler errors were resolved, I was able to run Contentment against an Umbraco instance of <code>14.0.0--preview002</code>. Of course, I wasn't able to do anything with it, there were no property-editors registered, but the initial hurdle was overcome.</p>
<p>Before I got going with the backoffice-frontend/web-components prototyping, I wondered about whether Contentment should take the RCL (Razor Class Library) approach. _Meaning that the <code>App_Plugins</code> folder would be served from the NuGet package itself, rather than copied over at build-time. (It's what all the cool kids are doing these days!)_</p>
<p>This presented another dilemma, RCL is a .NET Core technology, so this wouldn't work for legacy .NET Framework, meaning that I'd need to drop support for Umbraco v8. And whilst I was considering dropping support for old versions, I could drop Umbraco v9 too. I gave it all some thought and updated <a href="https://github.com/leekelleher/umbraco-contentment/blob/master/.github/ROADMAP.md">Contentment's ROADMAP</a>.</p>
<p>In terms of Contentment's version numbers, and expecting to add support for Umbraco v13/.NET 8, I could do a Contentment v5 to drop support for v8/v9, add v13 (LTS) and do the RCL. This would be paving the way for a Contentment v6 to add support for Bellissima, (although because of the .NET multi-targeting, it'd need to be the next .NET major, so .NET 9, which would be Umbraco v15). <em>(There's probably a lot to unpack in this paragraph, it'll make sense in a future article).</em></p>
<p>I still haven't fully decided whether to continue with the .NET multi-targeting approach after Bellissima, I may change my mind, but I do like the idea of having a single NuGet package (and codebase) that could support multiple versions of Umbraco. It'd be interesting to explore.</p>
<h2>Next time...</h2>
<p>Next time, I'll show my starting steps for the backoffice-frontend/web-components, installing TypeScript/Vite/Lit, et al.
In the meantime, if you want to skip ahead and see the code, here are links to areas of interest on Contentment's GitHub repository:</p>
<ul>
<li><a href="https://github.com/leekelleher/umbraco-contentment/discussions/357">Support for Umbraco Bellissima, (aka new backoffice) #357</a></li>
<li><a href="https://github.com/leekelleher/umbraco-contentment/tree/dev/wip/bellissima">The work-in-progress branch <code>dev/wip/bellissima</code></a></li>
</ul>]]>
				</description>
				<pubDate>Thu, 30 Nov 2023 00:00:00 PST</pubDate>
			</item>
			<item>
				<guid isPermaLink="true">https://leekelleher.com/blog/2022/a-polyfill-for-umbraco-packages/</guid>
				<link>https://leekelleher.com/blog/2022/a-polyfill-for-umbraco-packages/</link>
				<title>A polyfill for Umbraco packages</title>
				<description>
					<![CDATA[<blockquote>
<p>Update: 2023-05-23. Due to the lack of interest, the Umbraco Polyfill package has now been deprecated. The source code is available on GitHub: <a href="https://github.com/leekelleher/umbraco-polyfill">https://github.com/leekelleher/umbraco-polyfill</a></p>
</blockquote>
<hr />
<p>If you are unfamiliar with the term polyfill in web development, here is the definition from MDN...</p>
<blockquote>
<p>A polyfill is a piece of code (usually JavaScript on the Web) used to provide modern functionality on older browsers that do not natively support it.</p>
</blockquote>
<p><a href="https://developer.mozilla.org/en-US/docs/Glossary/Polyfill">https://developer.mozilla.org/en-US/docs/Glossary/Polyfill</a></p>
<p>Typically, polyfills are referenced in the context of front-end web development, but they could also be applied to server-side APIs.</p>
<hr />
<p>I hear you asking: <em>What does this have to do with Umbraco packages?</em></p>
<p>This time last year, <a href="https://github.com/leekelleher/umbraco-contentment/discussions/105">I'd started migrating my Umbraco package</a>, <a href="https://our.umbraco.com/packages/backoffice-extensions/contentment/">Contentment</a> to support <a href="https://umbraco.com/products/umbraco-cms/umbraco-9/">Umbraco 9</a> on ASP.NET Core 5. My initial approach was to drop support for <a href="https://umbraco.com/products/umbraco-cms/umbraco-8/">Umbraco 8</a> to focus exclusively on Umbraco 9. A decision that niggled me.</p>
<p>During the code migration, I'd discussed with fellow Umbraco package developers about <a href="https://github.com/leekelleher/umbraco-contentment/discussions/105#discussioncomment-1547429">multi-targeting .NET frameworks</a> within the same codebase, and indeed it was possible, meaning that Contentment could still support Umbraco 8. The downsize would be that there would be many <code>#if</code>/<code>#else</code> pre-processor directives littered throughout the codebase.</p>
<blockquote>
<p>For more details on this approach, take a read of 
the <a href="https://umbraco.com/blog/multi-targeted-package-migration/">Package Migration to V9 Using Multi-Targeting</a> post on the Umbraco blog.</p>
</blockquote>
<pre><code>#if NET
    private readonly ILogger&lt;MyClass&gt; _logger;

    public MyClass(ILogger&lt;MyClass&gt; logger) 
    {
        _logger = logger;
    }
#else
    private readonly ILogger _logger;

    public MyClass(ILogger logger) 
    {
        _logger = logger;
    }
#endif

    public void MyMethod() 
    {
        // Do some common logic and log a result
        var result = "Some value";
#if NET
        _logger.Debug(result);
#else
        _logger.Debug&lt;MyClass&gt;(result);
#endif
    }</code></pre>
<blockquote>
<p>Code snippet taken from @mattbrailsford's <a href="https://dev.to/mattbrailsford/adding-ilogger-t-support-to-umbraco-v8-5cg8">Adding <code>ILogger&lt;T&gt;</code> support to Umbraco v8</a> post.</p>
</blockquote>
<p>Whilst I really liked the idea of multi-targeting, the amount of pre-processor directives did start to get silly. I wondered why that was and what could be done about it.</p>
<p>Of course, the API between Umbraco 8 and 9 were different, some changes were subtle, others breaking. All for understandable reasons.</p>
<p>With Contentment, one of the more common bits was that the <code>IOHelper.ResolveUrl()</code> was no longer a static method, and a new <code>IIOHelper</code> instance would need to be injected, meaning adding an extra parameter to the class constructor.</p>
<p>Since <code>IIOHelper</code> wasn't available in Umbraco 8, I ended up using conditional pre-processor directives...</p>
<pre><code>#if NET472
    public DropdownListDataListEditor()
    {
    }
#else
    private readonly IIOHelper _ioHelper;
    public DropdownListDataListEditor(IIOHelper ioHelper)
    {
        _ioHelper = ioHelper;
    }
#endif</code></pre>
<p>...and this happened in a <strong>lot</strong> of places!</p>
<p>My thinking was that I could introduce a polyfill for <code>IIOHelper</code> in Umbraco 8 only. <em>(Given the v8 roadmap, I doubted that it would ever be added to v8.x patch release.)</em> So that's what I did, <a href="https://github.com/leekelleher/umbraco-contentment/blob/dev/v3.x/src/Umbraco.Community.Contentment/Polyfill/IIOHelper.cs">here's a link to the code for the <code>IIOHelper</code> polyfill</a> and <a href="https://github.com/leekelleher/umbraco-contentment/blob/dev/v3.x/src/Umbraco.Community.Contentment/Composing/ContentmentComposer.cs#L37">how it is registered using dependency injection in a Composer</a>.</p>
<p>Now my code would look like this...</p>
<pre><code>    private readonly IIOHelper _ioHelper;
    public DropdownListDataListEditor(IIOHelper ioHelper)
    {
        _ioHelper = ioHelper;
    }</code></pre>
<p>Removing the need for the conditional pre-processor directives, and maintaining the same functionality and logic.</p>
<p>Taking this approach to some of the other v9-only interfaces and services, I was able to reduce the verbosity of Contentment's codebase. <a href="https://github.com/leekelleher/umbraco-contentment/tree/dev/v3.x/src/Umbraco.Community.Contentment/Polyfill">You can see the other polyfill code on the GitHub repository</a>.</p>
<hr />
<p><strong>Okay, now what?</strong></p>
<p>This was all great for my Contentment package, happy days. Until when I started developing a new Umbraco package. I developed the code against Umbraco 9, but when I reviewed the code I could see the potential of adding support for Umbraco 8 with a few conditional pre-processor directives. So I copied the polyfill code over from Contentment... <strong>wait a minute, what am I doing?</strong></p>
<p>At this point I separated out the polyfill code to its own code library, so that it could be referenced in my other (future) Umbraco packages.</p>
<p><a href="https://github.com/leekelleher/umbraco-polyfill">https://github.com/leekelleher/umbraco-polyfill</a></p>
<p>...and released a NuGet package:
<a href="https://www.nuget.org/packages/Our.Umbraco.Community.Polyfill/">https://www.nuget.org/packages/Our.Umbraco.Community.Polyfill/</a></p>
<p>Just to note, in it's current release, this library should be considered a continued work-in-progress, and <strong>NOT</strong> feature complete. If you are a package developer and find there are missing features, <a href="https://github.com/leekelleher/umbraco-polyfill">I'm happy to collaborate with you on the GitHub repository</a>.</p>]]>
				</description>
				<pubDate>Wed, 27 Apr 2022 00:00:00 PDT</pubDate>
			</item>
			<item>
				<guid isPermaLink="true">https://leekelleher.com/blog/2021/umbraco-image-crop-picker-using-contentment-data-list/</guid>
				<link>https://leekelleher.com/blog/2021/umbraco-image-crop-picker-using-contentment-data-list/</link>
				<title>Umbraco Image Crop Picker using Contentment Data List</title>
				<description>
					<![CDATA[<p>A couple of weeks ago, <a href="https://dev.to/zajkowskimarcin">Marcin Zajkowski</a> and <a href="https://dev.to/aochmann">Adrian Ochmann</a> announced the release of their new Umbraco package, <a href="https://our.umbraco.com/packages/backoffice-extensions/image-crop-picker/">Image Crop Picker</a>.</p>
<p>{% twitter 1354821151541710850 %}</p>
<p>The <strong>Image Crop Picker</strong> is a property-editor that enables a specific image crop to be selected from the configuration of a Image Cropper data-type. This can be useful for when a content-editor needs control over which crop is used for rendering an image.</p>
<p>The package has releases for both Umbraco v7 and v8, and has plans to extend the functionality in future releases. If it suits your needs, then please use it. 👍</p>
<p>Now what does this all have to do with my <a href="https://our.umbraco.com/packages/backoffice-extensions/contentment/">Contentment</a> package? Since developing the <a href="https://github.com/leekelleher/umbraco-contentment/blob/develop/docs/editors/data-list.md"><strong>Data List</strong></a> property-editor, whenever I see another package use a dropdown-list, checkbox-list or radiobutton-list, I can't shake the concept of separating the data-source from the list-editor.</p>
<p>So with the the <strong>Image Crop Picker</strong> package, I wondered - <em>Could that be achieved as a custom Data Source?</em> 🤔</p>
<p>It would need a way to select a pre-configured Image Cropper data-type, then get all the crop definitions from that data-type... <em>Yeah, why not!</em></p>
<p>🕙🕚🕛 <strong>TL;DR,</strong> If you want to skip the explanation and see the code, it is available this gist: <a href="https://gist.github.com/leekelleher/5c0abddb3246185ce0ba50a99975e310"><code>UmbracoImageCropDataListSource.cs</code></a></p>
<p>To do this, I needed to define the crops in my own <strong>Image Cropper</strong> data-type. <em>I opted to copy Marcin's examples.</em></p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/i/xy0bmwy48bk0p3atvh9w.png" alt="Image Cropper data-type configuration" /></p>
<p>Next, once I had the code (<a href="https://gist.github.com/leekelleher/5c0abddb3246185ce0ba50a99975e310">from the gist</a>) in place, I could create my custom <strong>Data List</strong> data-type.</p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/i/yj7ix994yfqjvyv8a6yk.png" alt="Data List data-type with Umbraco Image Crops as the data-source" /></p>
<p>The configuration for the data-source needs to select a pre-configured <strong>Image Cropper</strong> data-type.</p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/i/4d05iuo3869n9j62g60m.png" alt="Umbraco Image Crops data-source configuration" /></p>
<p>For this UI, I opted to use the Item Picker editor, I thought it would be a nicer UI, in case have numerous Image Cropper data-types. This could have easily been done with a dropdown-list.</p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/i/zqax96ah0yb1terk3mpe.png" alt="Umbraco Image Crops data-source, select an Image Cropper data-type" /></p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/i/tmukjbcws2cym5bfh5jq.png" alt="Umbraco Image Crops data-source, selected Image Cropper data-type" /></p>
<p>Once selected, you can configure the list-editor you would like to use. For this example, I chose a radiobutton-list.</p>
<p>You can then save the Data List data-type and add it to your document-type.</p>
<p>On your content page, it will be displayed like so...</p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/i/dbgpk2vr3zh1b5l3x64i.png" alt="image-crop-picker-editor" /></p>
<p>Of course, if you prefer a different list-editor - say a dropdown-list, or enable multiple selections with a checkbox-list or Item Picker, you can do that.</p>
<p>Here is the Umbraco Image Crops data-source code in full...</p>
<p>{% gist <a href="https://gist.github.com/leekelleher/5c0abddb3246185ce0ba50a99975e310">https://gist.github.com/leekelleher/5c0abddb3246185ce0ba50a99975e310</a> %}</p>
<p><em>If people think it would be interesting for me to break down and explain the code in more detail, please let me know. I'm happy to do so, just didn't want to do it unwarranted.</em></p>
<hr />
<p>🔌 <em>Plugs and begging...</em> 🙏
If you already use the Contentment package, please remember to give it a vote-up on the Our Umbraco project page: <a href="https://our.umbraco.com/packages/backoffice-extensions/contentment/">https://our.umbraco.com/packages/backoffice-extensions/contentment/</a></p>
<p>If you use my open-source Umbraco packages on commercial projects and want to say thanks - consider becoming a sponsor: <a href="https://github.com/sponsors/leekelleher">https://github.com/sponsors/leekelleher</a> ❤</p>]]>
				</description>
				<pubDate>Thu, 11 Feb 2021 00:00:00 PST</pubDate>
			</item>
			<item>
				<guid isPermaLink="true">https://leekelleher.com/blog/2020/01/album-club/</guid>
				<link>https://leekelleher.com/blog/2020/01/album-club/</link>
				<title>Album Club</title>
				<description>
					<![CDATA[<figure>
    <img src="/assets/media/album-club-rules.png" alt="The first rule of Album Club is...">
    <figcaption>The first rule of Album Club is...</figcaption>
</figure>
<p>A year or so ago, I was invited to a local "dad's from school" book club. Standard rules, once a month, read the selected book, meet up at a pub, discuss said book for a bit, then continue socialising... or as I commented on it, "<em>a drinking club with a reading problem</em>".</p>
<p>When my second book group meet up came around, I hadn't read the book, I'd actually forgotten which book was chosen. I felt slightly guilty.... for about half an hour, then the book was forgotten about and socialising continued.</p>
<p>This continued for the following months. I still haven't read a single book for the group yet!</p>
<p>Apart from the books, socialising and good conversations - another topic that many of us enjoyed was music. Many of the attendees would also go to the local Open Mic nights, so if wasn't books or politics, we'd be talking music, albums and bands.</p>
<p>This got me thinking, I listen to a lot of music whilst I work. I could listen to an album easier than reading a 500 page novel. Why not do an "Album Club" instead? (and I'd feel less guilty about not reading the books).</p>
<p>Chatting about this idea with a few of the other dads, many albums got suggested - some I knew, some I'd heard of, others very obscure.</p>
<p>In an effort to discover those ignored, obscure or overlooked albums, we'd make suggestions and take a book club-esque approach, listen to the album during the month and discuss it at the next meet up.</p>
<p>I searched online for any examples of other "Album Clubs", to get ideas for a set of ground rules, etc. There wasn't much. The best I could find was the journalistic <a href="https://ramalbumclub.com/">Ruth and Martin's Album Club</a>, which would invite a celebrity to pick an album they've never heard, listen to it 3 times over a month, then write a review for the website. There's more <a href="https://www.bbc.co.uk/news/uk-england-nottinghamshire-41559366">background about RAM Album Club on a BBC News article</a>.</p>
<p>Listening to album 3 times in a month felt like a good number to appreciate it, to soak it up, so that was our start.</p>
<p>With an impromptu pub chat, we came up with the rules... </p>
<ol>
<li>Chosen person picks an album.</li>
<li>You listen to 3 times during the month.</li>
<li>We all listen to it on the night, enjoy, discuss, reminisce.</li>
<li>Person to choose next album is decided on the night <em>(e.g. by game of spoof, dance off, or paper scissors stone</em>).</li>
<li>Rinse and repeat monthly.</li>
</ol>
<p><em>Notes:</em></p>
<ul>
<li>The chosen person could suggest their favourite album or something completely different that they'd like to explore.</li>
<li>The selected album should be of interest and have <em>(some)</em> depth or substance. <em>Essentially, we'd like to avoid cheesy manufactured bubblegum pop, or 'Best Of' compilations.</em></li>
<li>Encouraged to pick an album that works as a whole, <em>rather than 'a loose collection of songs'</em>.</li>
</ul>
<blockquote>
<p>At the time of writing, we haven't decided on a venue. It'll most likely be someone's house, unless if we can arrange with one of the local pubs to give us a space. <em>(There's niggles about music licensing - I'm sure there are specific rules around alcohol and playing recorded music.)</em></p>
</blockquote>
<p>After some discussions, keeping it local, <a href="https://thedysfunctions.uk">Greg</a> suggested our first album, <a href="https://open.spotify.com/album/7qlZpMib7D0riFPQ5JHDT8">Maxinquaye by Tricky</a>.</p>
<img src="data:image/jpeg;base64,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" alt="Maxinquaye by Tricky">
<iframe src="https://open.spotify.com/embed/album/7qlZpMib7D0riFPQ5JHDT8" width="300" height="300" frameborder="0" allowtransparency="true" allow="encrypted-media"></iframe>
<p>I'm very much looking forward to our first <em>Album Club</em> evening!</p>]]>
				</description>
				<pubDate>Thu, 23 Jan 2020 20:05:00 PST</pubDate>
			</item>
	</channel>
</rss>