<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:base="https://example.com/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>My Blog about Boats</title>
    <link>https://example.com/</link>
    <atom:link href="https://example.com/feed.xml" rel="self" type="application/rss+xml" />
    <description>I am writing about my experiences as a naval navel-gazer.</description>
    <language>en</language>
    <item>
      <title>Shifting mindset as a mid-level engineer</title>
      <link>https://example.com/shifting-mindset-as-a-mid-level-engineer/</link>
      <description>&lt;article&gt;
&lt;p&gt;In September of this year I will have been working as a full time software developer for 5 years. In this time I’ve progressed from apprentice to junior and now mid level software engineer. I’ve been considering what I’ve learnt and apart from the obvious things like syntax there have also been important lessons in code design and quality. I feel like I am making the shift from &lt;em&gt;Does this work?&lt;/em&gt; to &lt;em&gt;How could this fail and how will somebody work with it in 6 months time?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;These are some of the lessons I’ve learnt when trying to shift my mindset to that of a mid-level developer:&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1587654780291-39c9404d746b?q=80&amp;w=1740&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&quot; alt=&quot;A top-down, overhead view of a dense, chaotic pile of assorted plastic building bricks in various colors, shapes, and sizes&quot; /&gt;
&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@xavi_cabrera&quot;&gt;Xavi Cabrera&lt;/a&gt; on &lt;a href=&quot;https://example.com/shifting-mindset-as-a-mid-level-engineer/&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Readability over cleverness&lt;/h2&gt;
&lt;p&gt;When you start out learning to code you often hear a lot about conciseness. I used to try to make my code as short as possible using ternary operators and nested map/filter functions. While these things have their place I’ve learnt it’s often better to use a for loop or an explicit named function. I try to imagine the next developer reading my code and understanding the intention at a glance rather than have to dig through it.&lt;/p&gt;
&lt;h2&gt;Defensive programming and edge case handling&lt;/h2&gt;
&lt;p&gt;Initially like many junior developers I only wrote code for the ‘happy path’ i.e. when everything goes to plan. Over time I’ve learnt to add error handling, think about edge cases and graceful degradation where if a specific part of an application fails or is unsupported the rest can still function. I now assume the worst will happen and think about what the user will see when it does.
&lt;/p&gt;
&lt;h2&gt;Understanding time and space complexity&lt;/h2&gt;
&lt;p&gt;My understanding of big o notation is only basic (I don’t have a computer science degree) and I’d like to learn more. However just knowing why I might use a Set over an Array or why a searching algorithm might not scale is really useful. I’m moving away from using brute force methods when working with large data sets or expensive operations. 
&lt;/p&gt;
&lt;h2&gt;Balancing composition and inheritance&lt;/h2&gt;
&lt;p&gt;
I used to try to avoid writing duplicate code by creating one base class and having everything else inherit from it. Now I lean more towards composition - building complex functionality by combining smaller discrete pieces. My aim isn&#39;t to abandon inheritance entirely, but to recognize when it is becoming a liability.  
&lt;/p&gt;
&lt;h2&gt;Testability&lt;/h2&gt;
&lt;p&gt;
I was guilty of seeing testing as an afterthought and now I am learning to use it as a design tool. If a function is difficult to test then that is a red flag that it is trying to do too many things or it has too many hidden dependencies. Writing tests encourages me to use dependency injection rather than reaching out into the global scope making my code modular and more predictable.&lt;/p&gt;
&lt;p&gt;These lessons have helped me to shift my focus from the immediate satisfaction of getting something working to building something that will last.&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Fri, 03 Apr 2026 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/shifting-mindset-as-a-mid-level-engineer/</guid>
    </item>
    <item>
      <title>Migrating the Domestic Abuse Services Mapped database to PostgreSQL</title>
      <link>https://example.com/migrating-domestic-abuse-services-mapped-database-to-postgreSQL/</link>
      <description>&lt;article&gt;
&lt;h1&gt;Migrating the Domestic Abuse Services Mapped database to PostgreSQL&lt;/h1&gt;
&lt;p&gt;Recently, I migrated the database for Domestic Abuse Services Mapped from Airtable to a PostgreSQL database hosted on Render. The primary motivation for this was that I was consistently exceeding the API call limits of Airtable’s free plan. Switching to PostgreSQL also offered additional benefits, such as reducing reliance on external services—since I already use Render to host the application. As the site continues to grow and needs to handle higher traffic, PostgreSQL provides greater power, flexibility, and scalability for future development.&lt;/p&gt;
&lt;h2&gt;Setting Up a PostgreSQL Database&lt;/h2&gt;
&lt;p&gt;My first step was to set up a local PostgreSQL database. I installed PostgreSQL using Homebrew:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;brew install postgresql&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Next, I started the PostgreSQL service:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;brew services start postgresql&lt;/code&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;To access the service, I used:&lt;/p&gt;
&lt;code&gt;psql postgres&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;Inside the PostgreSQL shell, I created a new database called services with:&lt;/p&gt;
&lt;code&gt;CREATE DATABASE services;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;I then defined the table, columns, and data types to mirror the structure of my original Airtable database.&lt;/p&gt;
&lt;h2&gt;Hosting on Render&lt;/h2&gt;
&lt;p&gt;The next step was to &lt;a href=&quot;https://render.com/docs/postgresql-creating-connecting&quot;&gt; create a new PostgreSQL instance on Render&lt;/a&gt; and connect to it remotely in my Mac terminal using the provided connection string. I created the table, columns and data types to make a copy of my local database.&lt;/p&gt;
&lt;p&gt;After this I:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Exported the data from Airtable as a CSV file using their export feature&lt;/li&gt;
&lt;li&gt;Converted the CSV file into SQL INSERT statements&lt;/li&gt;
&lt;li&gt;Checked the data for duplicates and verified that all data types matched my new database schema&lt;/li&gt;
&lt;li&gt;Used PostgreSQL’s &#92;copy command to bulk import the data into both my local and remote databases.
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1544383835-bda2bc66a55d?q=80&amp;w=1672&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&quot; alt=&quot;a series of brown wooden drawers in a cabinet&quot; /&gt;
Photo by &lt;a href=&quot;https://unsplash.com/@jankolar?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Jan Antonin Kolar&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/brown-wooden-drawer-lRoX0shwjUQ?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;With the data now in PostgreSQL, I updated my API logic to use the &lt;a href=&quot;https://www.npmjs.com/package/pg&quot;&gt;node-postgres&lt;/a&gt; package and fetch data directly from the new database. For example, I created this utility function:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import { Client } from &#39;pg&#39;;

export async function getServicesFromDb() {
  const client = new Client({ connectionString: process.env.DATABASE_URL });
  await client.connect();

  try {
    const result = await client.query(
      &#39;SELECT * FROM services where approved = true&#39;
    );

    return result.rows.map((row) =&amp;gt; ({
      type: &#39;Feature&#39; as const,
      properties: {
        name: row.name || &#39;&#39;,
        description: row.description || &#39;&#39;,
        address: row.address || &#39;&#39;,
        postcode: row.postcode || &#39;&#39;,
        email: row.email || &#39;&#39;,
        website: row.website || &#39;&#39;,
        phone: row.phone || &#39;&#39;,
        donate: row.donate || &#39;&#39;,
        serviceType: row.service_type || [],
        serviceSpecialism: row.service_specialism || [],
        approved: row.approved,
        localAuthority: row.local_authority || &#39;&#39;,
      },
      geometry: {
        type: &#39;Point&#39; as const,
        coordinates: [parseFloat(row.lng || &#39;0&#39;), parseFloat(row.lat || &#39;0&#39;)],
      },
    }));
  } finally {
    await client.end();
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This allowed me to fetch and serve data from PostgreSQL, replacing the old Airtable logic. I connected my application code to the database using environment variables e.g.&lt;/p&gt;
&lt;code&gt;const client = new Client({ connectionString: process.env.DATABASE_URL });&lt;/code&gt;
&lt;h2&gt;Finishing Steps&lt;/h2&gt;
&lt;p&gt;As the API is public, I updated my &lt;a href=&quot;https://domesticabuseservices.uk/api-docs&quot;&gt;Swagger documentation&lt;/a&gt; to reflect the new PostgreSQL data source. This will help me keep track of the API structure and endpoints, and make it easier for future collaborators to understand and use the API. One of the major advantages of using Airtable was the user interface. To replicate this I set up connections in the GUI application DataGrip to both my local and remote databases.This makes it easier to inspect records and run queries. Since this was a significant refactor, I spun up a staging environment on Render to test the changes. Once I was confident that everything was working as expected I pushed the updates to the production environment.&lt;/p&gt;
&lt;p&gt;I’m satisfied that the site now benefits from a more robust, scalable, and maintainable backend powered by PostgreSQL.&lt;/p&gt;
&lt;/article&gt;</description>
      <pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/migrating-domestic-abuse-services-mapped-database-to-postgreSQL/</guid>
    </item>
    <item>
      <title>Attending the Local Government Homelessness/Rough Sleeping Hackathon in Birmingham</title>
      <link>https://example.com/local-gov-homelessness-rough-sleeping/</link>
      <description>&lt;article&gt;
&lt;p&gt;Last month I was fortunate to attend the Local Government Homelessness/Rough Sleeping Hackathon in Birmingham. This is my report from the day including my team’s project and my reflections on what I learned.&lt;/p&gt;
&lt;img src=&quot;https://annacunnane.co.uk/images/1764152275823.jpeg&quot; alt=&quot;A man and a woman standing at a lectern. The screen behind them reads Welcome to Local Government Innovation Hackathon on homelessness, rough sleeping and temp accommodation&quot; /&gt;
&lt;caption&gt;Introducing the hackathon&lt;/caption&gt;
&lt;h2&gt;Who was there?&lt;/h2&gt;
&lt;p&gt;The hackathon has speakers and attendees from local and central government, housing professionals and people from the third sector. It was run by the &lt;a href=&quot;https://www.gov.uk/government/organisations/government-digital-service&quot;&gt;Government Digital Service&lt;/a&gt; in partnership with Birmingham City Council.
&lt;/p&gt;
&lt;h2&gt;What was the hackathon about?&lt;/h2&gt;
&lt;p&gt;The hackathon was a two day event where people collaborated to build and prototype tech solutions to the problems of homelessness and rough sleeping. We started with understanding the challenges facing councils around homelessness and rough sleeping. What particularly struck me was the amount that councils were having to spend on temporary accommodation and the impact this was having on individuals and families. For more on this check out this brilliant book &lt;a href=&quot;https://www.agendapub.com/page/detail/debt-trap-nation/?k=9781788218641&quot;&gt;Debt Trap Nation: Family Homelessness in a Failing State by Katherine Brickell and Mel Nowicki&lt;/a&gt;
This helped us to ground our projects in the experiences and needs of real people.&lt;/p&gt;
&lt;h2&gt;The problem statements&lt;/h2&gt;
&lt;p&gt;Every hackathon has problem statements and these were ours:&lt;/p&gt;
&lt;p&gt;1. Using data and AI to predict and prevent homelessness&lt;/p&gt;
How might we ethically harness data and AI to identify individuals or households at risk of homelessness earlier, and enable effective, trusted early interventions?&lt;p&gt;&lt;/p&gt;
&lt;p&gt;2. AI driven outreach and system efficiency for homelessness and rough sleeping services&lt;/p&gt;
&lt;p&gt;How might we ethically leverage AI and digital tools to streamline case management, enhance outreach, and improve the usability of homelessness support systems?&lt;/p&gt;
&lt;p&gt;3. Optimising temporary accommodation allocation through data driven Insights&lt;/p&gt;
&lt;p&gt;How might we leverage data and analytics to optimise the allocation and management of temporary accommodation, ensuring resources are used efficiently, individual needs are met, and families spend the shortest possible time in temporary accommodation?&lt;/p&gt;
&lt;h2&gt;Solutions&lt;/h2&gt;
Some of the proposed solutions were using AI to:
&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;improve finding and matching for temporary accommodation&lt;/li&gt;
&lt;li&gt;predict future homelessness&lt;/li&gt;
&lt;li&gt;identify patterns in rough sleeping to assist outreach workers&lt;/li&gt;
&lt;li&gt;add chatbots to council service pages to either collect information or direct inquiries&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
In my opinion, the best applications of AI were practical e.g.:
&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;plan the best route around a city centre for an outreach worker based on known rough sleeping locations&lt;/li&gt;
&lt;li&gt;pre-populate an application form for temporary accommodation from user uploaded documents&lt;/li&gt;
&lt;li&gt;flag high risk applications for temporary accommodation for example has children, domestic abuse, care leaver etc&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;My project&lt;/h2&gt;
&lt;p&gt;My team’s project was for housing officers who are attempting to reach people at risk of homelessness before they present to the council needing accommodation. We fed a variety of risk indicators (rent and council tax arrears, benefits data) into an AI predictive model. Each data source was connected to the AI via an MCP server. We built a frontend dashboard in React that would give a user an instant view of their most high risk cases. In the future we would want to validate and train the model with anonymised pilot data.
&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A dashboard screen showing a ‘Welcome to your dashboard’ heading, a status panel indicating live MCP data with high, medium, and low risk counts, and a cases table below. The GIF highlights the risk filter and risk status dropdown updating within the table.&quot; src=&quot;https://annacunnane.co.uk/images/chrome-capture-2025-12-09.gif&quot; /&gt;&lt;/p&gt;
&lt;caption&gt;Our dashboard in action&lt;/caption&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Moggach/local-gov-innovation-hackathon&quot;&gt;Source code&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;img src=&quot;https://annacunnane.co.uk/images/1764287760028.jpeg&quot; alt=&quot;A large group of people assembled in front of a Christmas tree&quot; /&gt;
&lt;caption&gt;The whole hackathon assembled&lt;/caption&gt;
&lt;h2&gt;What did I learn?&lt;/h2&gt;
&lt;p&gt;I learned a lot from being around such committed and knowledgeable people for the two days of the hackathon. Technically I enjoyed getting to know more about  developments such as &lt;a href=&quot;https://www.anthropic.com/news/model-context-protocol&quot;&gt;MCP servers&lt;/a&gt; and tools like &lt;a href=&quot;https://notebooklm.google/&quot;&gt;Notebook LM&lt;/a&gt; that I’ll use in my own learning.&lt;/p&gt;
&lt;p&gt;My main takeaway is that the inclusion of AI in software that interacts with vulnerable people should be approached very cautiously. Listening to housing professionals it seemed that some issues  could be addressed by joined up data and systems. This is to say nothing of proper funding for councils and local services. We should be careful we don’t add AI onto a system without getting these more fundamental things right.&lt;/p&gt;
&lt;p&gt;For more information about this and other GDS Local activities check out their &lt;a href=&quot;https://cddo.blog.gov.uk/2025/12/04/innovation-in-action-highlights-from-the-local-government-innovation-hackathon/&quot;&gt;blog&lt;/a&gt; from the event&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/local-gov-homelessness-rough-sleeping/</guid>
    </item>
    <item>
      <title>Domestic abuse services mapped - recent updates</title>
      <link>https://example.com/domestic-abuse-services-mapped-updates/</link>
      <description>&lt;article&gt;
&lt;p&gt;October is Domestic Violence Awareness month so it seems like a good time to revisit &lt;a href=&quot;https://domesticabuseservices.uk/&quot;&gt;Domestic Abuse Services Mapped&lt;/a&gt; and see how I can improve it. This is a project mapping domestic abuse support services and other support relevant to survivors across the UK. It is based on my experience as an advisor on the National Domestic Abuse Helpline and my training as a software developer. This blog post is a changelog of the latest updates to the website covering new features and design improvements.&lt;/p&gt;
&lt;h2&gt;Added support for postcode and radius search in public API&lt;/h2&gt;
&lt;p&gt;I recently wrote a &lt;a href=&quot;https://annacunnane.co.uk/building-a-public-api-for-domestic-abuse-services-mapped/&quot;&gt; post&lt;/a&gt; about adding a public API to the website and I’ve now added two more parameters to the GET request. Postcode is a string that can be added to the end of the request (for example ?postcode=SW1A2AA) to fetch services close to that location. Radius is a numeric parameter (in miles) that when used alongside the postcode filters results to services within that distance of the given postcode (for example ?postcode=SW1A2AA&amp;radius=10).&lt;/p&gt;
&lt;br /&gt;
&lt;img src=&quot;https://annacunnane.co.uk/images/swagger-docs.gif&quot; alt=&quot;Screenshot of the API documentation showing a GET request endpoint /api/airtable for retrieving UK domestic abuse services in GeoJSON format. The parameters include postcode for UK postcode search and radius for the search radius in miles, with a default value of 10.&quot; /&gt;
&lt;caption&gt;Interactive API documentation for postcode and radius search with Swagger&lt;/caption&gt;
&lt;br /&gt;
&lt;h2&gt;Removed dark mode&lt;/h2&gt;
&lt;p&gt;I wasn’t happy with the code that I had written to implement a dark mode on the site and I took the decision to remove this for now instead of refactoring. This felt like a better option as I wasn’t sure how much value themes were adding to the user experience. I would rather focus my time on improving the design and usability as a whole and come back to light/dark modes at some point in the future.&lt;/p&gt;
&lt;h2&gt;Added linting&lt;/h2&gt;
&lt;p&gt;Although I am working alone on the site and the codebase isn’t large it’s still best practice to use linting to keep my code well formatted and catch bugs early. I’m using a Husky pre-commit hook to run es-lint and prettier across the staged files each time I make a commit. This also means that if others contribute to the project in future they’ll automatically follow the same conventions.&lt;/p&gt;
&lt;h2&gt;Smaller UX improvements&lt;/h2&gt;
&lt;p&gt;These are a few smaller changes intended to improve the user experience on the site.&lt;/p&gt;
&lt;h4&gt;Improved map interactions&lt;/h4&gt;
&lt;p&gt;I’ve updated the map to prevent zooming out or dragging the map beyond the UK. This is to help keep the focus on the area there are listings for and avoid user confusion.&lt;/p&gt;
&lt;h4&gt;Scrolling to top of search results&lt;/h4&gt;
&lt;p&gt;On mobile the user was previously being directed to the top of the page when clicking on the next and previous buttons in the search results. The site now scrolls to the top of the results meaning that the user doesn&#39;t lose their place.&lt;/p&gt;
&lt;h4&gt;Only show clear filters button when filters are applied&lt;/h4&gt;
&lt;p&gt;I felt that it was potentially confusing to have this button displayed all the time. Now its visibility is another indicator to users that they have filters applied.&lt;/p&gt;
&lt;p&gt;I’m hoping that these changes will help me to continue to grow the site and reach more people who need support. If you need help or advice about domestic abuse you can find your local service at &lt;a href=&quot;https://domesticabuseservices.uk/&quot;&gt;https://domesticabuseservices.uk&lt;/a&gt; You can also contact the National Domestic Abuse Helpline at &lt;a href=&quot;https://www.nationaldahelpline.org.uk/&quot;&gt;https://www.nationaldahelpline.org.uk&lt;/a&gt;&lt;/p&gt;
&lt;/article&gt;</description>
      <pubDate>Sat, 18 Oct 2025 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/domestic-abuse-services-mapped-updates/</guid>
    </item>
    <item>
      <title>Building a public api for Domestic Abuse Services Mapped</title>
      <link>https://example.com/building-a-public-api-for-domestic-abuse-services-mapped/</link>
      <description>&lt;article&gt;
&lt;p&gt;Over the past 18 months I’ve been building a &lt;a href=&quot;https://domesticabuseservices.uk/?page=1&quot;&gt;website&lt;/a&gt; to help victim/survivors of domestic abuse find their local support service. My main focus has been developing the frontend of the site with a user friendly interface that helps people quickly find support.&lt;/p&gt;
&lt;p&gt;But alongside that, I’ve been thinking about how to make the backend API public so that other developers and organisations can benefit from the same data.&lt;/p&gt;
&lt;p&gt;Some examples of this could be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A local authority could embed support services into their own site&lt;/li&gt;
&lt;li&gt;A researcher could analyse geographical coverage of services&lt;/li&gt;
&lt;li&gt;Other community projects could build apps on top of the data&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;p&gt;The data for the services is stored in an Airtable database and my Next.js backend acts as a middle layer between Airtable and the frontend. My backend ensures only approved services are shown and converts location data into GeoJson which is a common format used for mapping.&lt;/p&gt;
&lt;br /&gt;
&lt;img src=&quot;https://annacunnane.co.uk/images/da-services-api.png&quot; alt=&quot;Swagger UI page for the UK domestic abuse services API showing GET and POST endpoints for /api/airtable and a GeoJSON schema.&quot; /&gt;
&lt;caption&gt;Interactive API documentation with Swagger&lt;/caption&gt;
&lt;h2&gt;Making a public route&lt;/h2&gt;
&lt;p&gt;The first step was to expose a public GET route at &lt;a href=&quot;https://domesticabuseservices.uk/api/airtable&quot;&gt;https://domesticabuseservices.uk/api/airtable&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This endpoint returns all approved services in GeoJSON format. This is an example of the response:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
{
  &quot;type&quot;: &quot;Feature&quot;,
  &quot;properties&quot;: {
    &quot;name&quot;: &quot;Example Service&quot;,
    &quot;description&quot;: &quot;Support for women experiencing domestic abuse&quot;,
    &quot;address&quot;: &quot;123 Main St&quot;,
    &quot;postcode&quot;: &quot;AB12 3CD&quot;,
    &quot;email&quot;: &quot;info@example.com&quot;,
    &quot;website&quot;: &quot;https://example.com&quot;,
    &quot;phone&quot;: &quot;0123456789&quot;,
    &quot;donate&quot;: &quot;https://donate.example.com&quot;,
    &quot;serviceType&quot;: [&quot;Support&quot;],
    &quot;serviceSpecialism&quot;: [&quot;Women&quot;],
    &quot;approved&quot;: true,
    &quot;localAuthority&quot;: &quot;London Borough&quot;
  },
  &quot;geometry&quot;: {
    &quot;type&quot;: &quot;Point&quot;,
    &quot;coordinates&quot;: [-0.1276, 51.5072]
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Protecting the API with rate limiting&lt;/h2&gt;
&lt;p&gt;When you make a service public you need to think about the possibility of somebody abusing it. I added rate limiting with Upstash Redis to prevent people from overwhelming the API with too many requests.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
const ratelimit = new Ratelimit({
  redis,
  limiter: Ratelimit.slidingWindow(5, &#39;10 s&#39;),
  analytics: true,
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This means that a client can only make 5 requests every 10 seconds. If they exceed that they’ll get a 429 Too Many Requests response.&lt;/p&gt;
&lt;h2&gt;POST Requests with Authentication&lt;/h2&gt;
&lt;p&gt;The API also supports POST requests so that new services can be added. At the moment this is restricted so that only requests with a Bearer token will be authenticated. This is available on request from hello@domesticabuseservices.uk.&lt;/p&gt;
&lt;p&gt;New services that are created in Airtable are unapproved by default, so I can review them before publishing them on the site.&lt;/p&gt;
&lt;p&gt;Here’s an example of a request:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
curl -X POST https://domesticabuseservices.uk/api/airtable &#92;
  -H &quot;Authorization: Bearer &lt;your_token&gt;&quot; &#92;
  -H &quot;Content-Type: application/json&quot; &#92;
  -d &#39;{
    &quot;Service name&quot;: &quot;New Support Line&quot;,
    &quot;Service address&quot;: &quot;456 High St&quot;,
    &quot;Service postcode&quot;: &quot;XY99 1ZZ&quot;,
    &quot;Service description&quot;: &quot;Helpline for survivors&quot;,
    &quot;Service email address&quot;: &quot;support@helpline.org&quot;,
    &quot;Service website&quot;: &quot;https://helpline.org&quot;,
    &quot;Service phone number&quot;: &quot;0800123456&quot;,
    &quot;Service type&quot;: [&quot;Helpline&quot;],
    &quot;Specialist services for&quot;: [&quot;Young people&quot;],
    &quot;Local authority&quot;: &quot;Wandsworth&quot;
  }&#39;
&lt;/your_token&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Documentation&lt;/h2&gt;
&lt;p&gt;I’ve documented the API with &lt;a href=&quot;https://swagger.io/specification/&quot;&gt;Swagger/Open API&lt;/a&gt; to make it easier to use. That means anyone can visit &lt;a href=&quot;https://domesticabuseservices.uk/api-docs&quot;&gt;https://domesticabuseservices.uk/api-docs&lt;/a&gt; and see an interactive interface where they can try out making requests and read the schema.&lt;/p&gt;
&lt;p&gt;I hope that the API will allow more people and services to use and interact with my database of domestic abuse services across the UK. It’s also been a great learning opportunity for me to learn how to design and build a REST API.&lt;/p&gt;
&lt;/article&gt;</description>
      <pubDate>Sat, 23 Aug 2025 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/building-a-public-api-for-domestic-abuse-services-mapped/</guid>
    </item>
    <item>
      <title>My thoughts on Angular vs React</title>
      <link>https://example.com/my-thoughts-angular-vs-react/</link>
      <description>&lt;article&gt;
&lt;p&gt;Angular is a JavaScript based front end framework developed by Google for building dynamic single page web applications. I’ve been learning to use Angular as part of my role at &lt;a href=&quot;https://policyinpractice.co.uk/&quot;&gt;Policy in Practice&lt;/a&gt; working on the &lt;a href=&quot;https://betteroffcalculator.co.uk/&quot;&gt;Better Off Calculator&lt;/a&gt;. Up until this point all of my Javascript framework experience was in React so it’s really interesting to compare the differences between the two. These are my thoughts on the pros and cons of using Angular vs React...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;img src=&quot;https://annacunnane.co.uk/images/angular_react.png&quot; alt=&quot;An image showing the Angular and React logos side by side&quot; /&gt;
&lt;br /&gt;
&lt;h2&gt;Angular is much fuller featured&lt;/h2&gt;
&lt;p&gt;One of the main advantages of Angular is that it comes with many more features out of the box. Things like routing, state management and HTTP are handled within the core framework with no need to install extra dependencies. This can make it more robust and scalable and thus more suited to enterprise applications. Of course it also means there is a steeper learning curve as there is just more to learn.&lt;/p&gt;
&lt;h2&gt;Angular uses TypeScript by default&lt;/h2&gt;
&lt;p&gt;Of course you can (and most people do) use TypeScript with React but Angular is designed to be used with TypeScript. In fact it relies on features like decorators and metadata, which are only available in TypeScript. This means you get all the usual benefits of using TypeScript like better tooling; type safety and fewer bugs at runtime. For smaller projects however having the flexibility to use JavaScript with React is a benefit.&lt;/p&gt;
&lt;h2&gt;Angular uses HTML with Angular specific syntax&lt;/h2&gt;
&lt;p&gt;One of the major differences between Angular and React is that Angular uses HTML templates with  Angular-specific syntax (e.g., &lt;code&gt;*ngIf, [(ngModel)]&lt;/code&gt;) and React uses JSX which mixes HTML and Javascript in the same file. Angular’s approach is good for structured apps where separating logic from markup helps maintain clarity. On the other hand if you need highly dynamic rendering logic React’s JSX might feel more intuitive.&lt;/p&gt;
&lt;h2&gt;Dependency injections&lt;/h2&gt;
&lt;p&gt;One of the core architectural features of Angular is its built-in dependency injection system. This allows you to define services that can be injected into components or other services, making it easy to manage shared logic like API calls and state. In React, there’s no built-in dependency injection mechanism and shared logic is typically managed through context, hooks, or external libraries. While this offers more flexibility, it can also lead to inconsistent patterns across a codebase.&lt;/p&gt;
&lt;p&gt;Overall I’ve enjoyed learning Angular and can definitely see the benefits when building larger, more structured applications where having a clear architecture, built-in tooling, and strong typing from the start really helps.&lt;/p&gt;
&lt;h3&gt;Resources for learning Angular&lt;/h3&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href=&quot;https://angular.dev/overview&quot;&gt;Angular Official Docs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/angular&quot;&gt;Angular YouTube Channel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/angular-for-beginners-course/&quot;&gt;FreeCodeCamp: Angular For Beginners Course&lt;/a&gt;&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Sun, 29 Jun 2025 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/my-thoughts-angular-vs-react/</guid>
    </item>
    <item>
      <title>Attending the SheCanCode hack day in partnership with Refuge</title>
      <link>https://example.com/attending-she-can-code-hack-day/</link>
      <description>&lt;article&gt;
&lt;p&gt;Last month I attended the &lt;a href=&quot;https://shecancode.io/attend-events/international-womens-day-power-hack-improving-womens-safety-2025/&quot;&gt;International Women’s Day Power Hack run by SheCanCode&lt;/a&gt;. The theme of the day was improving women’s safety and the charity partner was &lt;a href=&quot;https://refuge.org.uk/&quot;&gt;Refuge&lt;/a&gt;. This is something that is very important to me as I work as an advisor on the &lt;a href=&quot;https://www.nationaldahelpline.org.uk/&quot;&gt;National Domestic Abuse Helpline&lt;/a&gt; and I built and maintain a &lt;a href=&quot;https://domesticabuseservices.uk/?page=1&quot;&gt;domestic abuse services mapping tool&lt;/a&gt; . I was excited to build solutions to the problem of domestic abuse and other forms of violence against women and girls. &lt;/p&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;img src=&quot;https://annacunnane.co.uk/images/shecancode.jpeg&quot; alt=&quot;&quot; /&gt;
&lt;br /&gt;
&lt;em&gt;Screenshots from our prototype including journal and safety checklist pages&lt;/em&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;After a quick intro to the day and the work that Refuge does (as well as the day’s other partners -  &lt;a href=&quot;https://shecancode.io/attend-events/international-womens-day-power-hack-improving-womens-safety-2025/&quot;&gt;more details here&lt;/a&gt;) we split into teams and started work. My team had the idea of  a diary application that would allow victims/survivors in abusive relationships to record instances of abuse. These diary entries could include text, as well as uploaded images and documents.  We decided to build a web application instead of an app so that it could be accessed on any device. &lt;/p&gt;
&lt;p&gt;One of the main challenges we faced was how to make using our application safe for (primarily) women in abusive relationships. We came up with various ideas for this including disguising the page as something else or accessing a secret hidden part of the journal. We also had to work within the time constraints of the hack day which meant that we focussed on making a minimum viable product. This allowed users to add, edit and view diary entries with metadata attached like the time and date posted.
&lt;/p&gt;
&lt;p&gt;For our tech stack we needed something full featured that we could set up quickly. We went for Next.js with a Supabase database for the backend. We used the component library shadcn to speed up the development of our frontend. We could only implement a minimal design in the time we had available. In the future I would like the design to be user friendly and meet high accessibility standards. It would be great to do some user testing to help achieve this. 
&lt;/p&gt;
&lt;p&gt;
The hack day ended with the teams presenting their work to all the other participants and the judging panel. Doing this meant that we could benefit from each other’s work and was an effective motivator in making sure that we had something to show! The discussion afterwards with the judging panel gave us feature ideas like generating statements to support applications for court orders and safety checklists. Sadly my team didn’t win the prize but we came a close runner up.
&lt;/p&gt;
&lt;p&gt;
I had a really enjoyable day at the hack with a supportive and welcoming atmosphere and a good mix of skills and experience. I would recommend checking out the &lt;a href=&quot;https://shecancode.io/&quot;&gt;SheCanCode network&lt;/a&gt;  and their events to all women in tech. 
&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Wed, 23 Apr 2025 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/attending-she-can-code-hack-day/</guid>
    </item>
    <item>
      <title>Challenges I&#39;ve faced while building Domestic Abuse Services Mapped</title>
      <link>https://example.com/challenges-building-da-services-mapped/</link>
      <description>&lt;article&gt;
&lt;p&gt;It’s been a hugely rewarding experience building &lt;a href=&quot;https://domesticabuseservices.uk/?page=1&quot;&gt;Domestic Abuse Services Mapped&lt;/a&gt;. I’ve learnt so much about full stack development and product design. The response from users has also been overwhelmingly positive with some really helpful feedback on how to make the tool better. There have been challenges along the way however and I’m sure I will continue to face new ones as I maintain and develop the site.&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1503551723145-6c040742065b-v2?q=80&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&quot; alt=&quot;&quot; /&gt;
Photo by &lt;a href=&quot;https://unsplash.com/@patrickperkins?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Patrick Perkins&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/assorted-notepads-ETRPjvb0KM0?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;
&lt;h2&gt; API calls and the costs associated with them &lt;/h2&gt;
&lt;p&gt;The project used to use two different APIs to deliver data to its front end - Mapbox and Airtable. Initially I was using the Mapbox API to calculate coordinates for each service every time the user loaded the page. Not only was this very slow but I rapidly ran up a bill with Mapbox that was over £100. Realising that this was not sustainable I started to calculate the coordinates once when I added a service to the database instead. This means a bit more up front work but results in a faster site that’s cheaper to run!
More recently, I have used up all of the API calls Airtable gives as part of its free tier. I’m pleased to have gotten to this milestone but I’ll have to think about whether I want to move my database off Airtable to save money.&lt;/p&gt;
&lt;h2&gt;Designing the website with safety in mind&lt;/h2&gt;
&lt;p&gt;One of my major concerns throughout building this site has been the safety of its users and of the services it lists. My intention was always to display the services on a map to help users visualise where their nearest source of help might be. However many services do not list their address publicly for safety reasons. As a result I had to come up with a different way of indicating their location whether that was the location of the local authority or the geographic center of the area they serve. This is also why I don’t have refuges listed on the site but only community outreach services. I signpost all users looking for a refuge space to the National Domestic Abuse Helpline.
Similarly, I’m aware that many people accessing the site may have their devices checked or monitored. I have a safe exit button that users can click to leave the site if they are disturbed whilst browsing. I have instructions on how to clear the site from your browser history on multiple browsers and devices.
&lt;/p&gt;
&lt;h2&gt;Modelling the relationships between my data&lt;/h2&gt;
&lt;p&gt;There are many different types of service that I want to list on the site and I needed to find a way to represent these. For example, a service may specialise in supporting South Asian women or LGBTQ survivors. The majority are domestic abuse services but there are also legal support services; pet fostering services and others. I have used filters to help users find the service that is right for them but it is difficult to balance this with making a user interface that is simple to use and understand. 
Another consideration has been displaying the relationship between a service and the local authority it is responsible for. One service can cover multiple local authorities so I’ve started to add that functionality to my local authority filter. 
&lt;/p&gt;
&lt;h2&gt;How to design an intuitive and accessible UI&lt;/h2&gt;
&lt;p&gt;As I’m a developer and not a UI/UX expert or a designer this was one of the biggest challenges for me. I used a component library called Daisy UI and its in-built themes to quickly build what I hope is an accessible and friendly user interface. I wanted the design of the site to be friendly and reassuring with a clean and modern look. I’m not sure if I have achieved this and I may consider hiring a designer to create a new visual language for the site.&lt;/p&gt;
&lt;p&gt;This whole process has been a learning experience for me so each challenge is an opportunity to build my knowledge and skills. I’m looking forward to reading this post again in 6 months or a year’s time to see how much I’ve grown and what new questions I’m pondering.
&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Sat, 15 Feb 2025 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/challenges-building-da-services-mapped/</guid>
    </item>
    <item>
      <title>2024 - year in review</title>
      <link>https://example.com/2024-year-in-review/</link>
      <description>&lt;article&gt;
&lt;p&gt;As we come to the end of 2024 I&#39;m looking back on my third year of working full time as a software developer. This year I’ve been working on a personal project which helps victims/survivors of domestic abuse across the UK find their local support service. At Common Knowledge I’ve been contributing to a new product called Mapped. I’ve also been concentrating on trying to improve my knowledge of TypeScript and Python. This post explores some of the things I’ve been working on and learning this year as well as what I’m hoping for in 2025.
&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1702291449620-29cdce17c405?q=80&amp;w=2680&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&quot; alt=&quot;2024 Year in Review&quot; /&gt;
&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@eyestetix?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Eyestetix Studio&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/a-blue-and-pink-background-with-the-numbers-2024-S7ZWCON3xbQ?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Domestic abuse services mapped&lt;/h2&gt;
&lt;p&gt;Alongside my job as a developer I am also an advisor on the &lt;a href=&quot;https://www.nationaldahelpline.org.uk/&quot;&gt;National Domestic Abuse Helpline&lt;/a&gt;. I wanted to combine what I’ve learnt as a developer with my work supporting victims/survivors and so I created a tool that shows all the domestic abuse support services across the UK &lt;a href=&quot;https://domesticabuseservices.uk/?page=1&quot;&gt;on a map&lt;/a&gt;. The user can filter the type of support they need and any specialisms that might apply for example, services for BAME women or LGBTQ survivors. There is also a postcode search so that victims/survivors and those supporting them can find the services nearest to them.&lt;/p&gt;
&lt;h2&gt;Learning TypeScript and Python with Execute Programme&lt;/h2&gt; 
&lt;p&gt;Although I’ve used TypeScript and Python in my work at Common Knowledge I knew that there was a gap in my understanding of the fundamentals of both languages. This year I went back to basics and started to learn both from the ground up. To do this I used &lt;a href=&quot;https://www.executeprogram.com/courses&quot;&gt;Execute Programme&lt;/a&gt; which is a learning platform built by developers for developers. I’ve been spending a few minutes per day on their Python and Typescript courses and seeing a big improvement in my skills.&lt;/p&gt;
&lt;h2&gt;Gutenberg plugin development&lt;/h2&gt; 
&lt;p&gt;For many of the organisations we work with at Common Knowledge WordPress is the best choice for their website. Over the last few years WordPress has been migrating to the React based Gutenberg editor. Because our sites often include custom layouts I’ve been learning how to make custom Gutenberg blocks and plugins. One example of this is the custom events calendar I made for the new &lt;a href=&quot;https://pelicanhouse.org/&quot;&gt;Pelican House website&lt;/a&gt;. It has been really fun to combine the powerful WordPress backend with all of the interactivity that React offers in the editor and on the page. 
&lt;/p&gt;
&lt;h2&gt;Mapped&lt;/h2&gt; 
&lt;p&gt;At Common Knowledge in 2024 we have been building &lt;a href=&quot;https://mapped.tools/&quot;&gt;Mapped&lt;/a&gt; - a tool that helps organisers and activists enhance their membership lists with geographic and political data. I’ve enjoyed getting to work on a codebase over a longer period of time and observing how user feedback makes its way into the product roadmap. I’ve learnt a lot from my colleagues whilst we’ve worked on Mapped during pair programming and in code reviews. Doing more of a deep dive into visualising geographic data in Mapped has also helped with my domestic abuse services map personal project.
&lt;/p&gt;
&lt;h2&gt;What I’m hoping for in 2025
&lt;/h2&gt; 
&lt;p&gt;I feel that 2024 was the year I moved past being a junior developer and I hope that in 2025 I can more confidently call myself mid-level. I would like to become as proficient in Python as I am in JavaScript and move on from TypeScript basics to more complex types. There are a few features that I would still like to add to my domestic abuse services map such as identifying a user&#39;s local authority based on their postcode. More generally I’d like to progress from just trying to get my code to work to making it more maintainable and extensible. I’m excited to see what the year will bring and thank you so much for reading!
&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Sun, 29 Dec 2024 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/2024-year-in-review/</guid>
    </item>
    <item>
      <title>Using LLMs as a tool when learning to code</title>
      <link>https://example.com/using-LLMs-learning-to-code/</link>
      <description>&lt;article&gt;
&lt;p&gt;A lot has been written about large language models and their potential for replacing many jobs - including developers! One thing that is often overlooked however is how LLMs like ChatGPT or Claude can be a powerful learning tool. I’ve been using ChatGPT for a year both in work and personal projects and I’ve found it’s accelerated my progress. These are my tips on how to get the best out of LLMs to help you learn to code. &lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1676573408178-a5f280c3a320?q=80&amp;w=3174&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&quot; alt=&quot;A computer screen with the ChatGPT website open on it&quot; /&gt;
Photo by &lt;a href=&quot;https://unsplash.com/@emilianovittoriosi?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Emiliano Vittoriosi&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/a-computer-screen-with-a-bunch-of-words-on-it-vEN1bsdSjxM?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;
&lt;h2&gt;Learning roadmaps&lt;/h2&gt;
&lt;p&gt;
Tools like ChatGPT can generate personalised learning paths. Instead of researching which topics to study and in what order use the model to generate a structured plan for you. You can also ask it to curate the best resources (books, videos, tutorials) to reach your goal.&lt;/p&gt;
&lt;h2&gt;Coding challenges
&lt;/h2&gt;
&lt;p&gt;LLMs can generate coding problems for you tailored to your abilities and interests. Use these to test your understanding of a topic and get personalised feedback on where you can improve.&lt;/p&gt;
&lt;h2&gt;Debugging help
&lt;/h2&gt;
&lt;p&gt;LLMs can act as virtual debugging assistants. Paste a code snippet or error message into ChatGPT and use the model to help resolve the issue. Even talking through your code step by step with it can help illuminate problems. &lt;/p&gt; 
&lt;h2&gt;Spaced repetition and active recall 
&lt;/h2&gt;
&lt;p&gt;One of the most effective ways to learn a subject is via active recall (something I’ve written about &lt;a href=&quot;https://example.com/advice-for-learning-how-to-code&quot;&gt;here&lt;/a&gt;). LLMs can generate study questions for you and implement a system of spaced repetition so that you can remember the answers easier.
&lt;/p&gt;
&lt;h2&gt;Conceptual explanations
&lt;/h2&gt;
&lt;p&gt;LLMs can provide detailed explanations of higher level programming topics like Big O Notation, Data Structures and Algorithms and Object Oriented Programming. If you’re struggling to understand a concept you can ask for examples, breakdowns or analogies. 
&lt;/p&gt;
&lt;h2&gt;Pair programming roleplay and mock technical interviews
&lt;/h2&gt;
&lt;p&gt;You can use ChatGPT to pair on an issue or problem with you and offer insight and suggestions. You can even ask it to take you through a timed mock technical interview with structured questions and ask it for feedback afterwards. 
&lt;/p&gt;
&lt;h2&gt;Notes of caution!
&lt;/h2&gt;
&lt;p&gt;There are a few reasons to be cautious about using LLMs for learning to code. 
&lt;/p&gt;
&lt;p&gt;Answers can be inaccurate or contain mistakes and still be prevented as fact. This is why it’s important to understand the code generated and be able to assess its merits yourself. LLMs often provide the most standard solution to a problem but not necessarily the best one.&lt;/p&gt;
&lt;p&gt;Using AI to write code for you will prevent you from understanding and remembering the basics of your language. Puzzling through code and getting to grips with syntax are essential parts of the learning process.&lt;/p&gt;
&lt;p&gt;LLMs can produce code that is based on biassed, incomplete or copyrighted material. Never use AI generated code in your projects without knowing what it is and what it does.&lt;/p&gt;
&lt;p&gt;Bearing this in mind I still think that AI is the most exciting new learning technology since the internet. For me its main advantages are to make learning personalised and adaptive without needing a tutor. I’m excited to use features like Chat GPT Voice mode and Memory over the next few months.&lt;/p&gt;
&lt;/article&gt;</description>
      <pubDate>Fri, 18 Oct 2024 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/using-LLMs-learning-to-code/</guid>
    </item>
    <item>
      <title>Notes from learning Typescript</title>
      <link>https://example.com/notes-from-learning-typescript/</link>
      <description>&lt;article&gt;
&lt;p&gt;Over the last few weeks I’ve been diving into learning TypeScript from the ground up. It’s been a steep learning curve and sometimes it feels as hard as learning JavaScript all over again. It&#39;s very satisfying though to start feeling confident when working with types. These are my notes from learning TypeScript.
&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1525547719571-a2d4ac8945e2?q=80&amp;w=2564&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&quot; alt=&quot;An image of a Macbook Pro&quot; /&gt;
Photo by &lt;a href=&quot;https://unsplash.com/@wasdrew?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Andras Vas&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/macbook-pro-turned-on-Bd7gNnWJBkU?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;
&lt;h2&gt;What is TypeScript?&lt;/h2&gt;
&lt;p&gt;TypeScript is a strongly typed language that builds on JavaScript. TypeScript allows developers to define types for variables, function parameters, and return values and it reports errors when these types don’t match, TypeScript code is compiled into JavaScript before it runs in the browser or with Node.&lt;/p&gt;
&lt;h2&gt;Why use it?&lt;/h2&gt;
&lt;p&gt;The main benefit of using TypeScript is its capacity for error reduction. TypeScript’s static type-checking helps catch errors during development rather than at runtime. This reduces the likelihood of bugs, especially in larger codebases. In fact, it eliminates a class of bug (such and such a variable is undefined) entirely. Enforcing types mean that you as the developer will not be allowed to do something that you previously told the compiler you didn’t want to be able to do. &lt;/p&gt;
&lt;h2&gt;How I’m learning it&lt;/h2&gt;
&lt;p&gt;I’m learning TypeScript through an online platform called &lt;a href=&quot;https://www.executeprogram.com/&quot;&gt;Execute Programme&lt;/a&gt;. This gives me short interactive lessons where I can test what I’m learning by writing and running real code. The thing I love most about Execute Programme though is that it prompts me to review previous lessons at increasing intervals. This really helps me to remember what I learn and is definitely helping me to solidify some of the concepts behind TypeScript.&lt;/p&gt; 
&lt;h2&gt;Challenges&lt;/h2&gt;
&lt;p&gt;I have struggled with TypeScript frequently since starting to study it. The topics listed below have been the most puzzling for me so far but I’m sure there’s more to come!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Type unions and intersections&lt;br /&gt;
I am only just starting to grasp how these work and the difference between them. I couldn’t understand why when a variable could be either a number or a string you couldn’t then assign it to a number. I found this &lt;a href=&quot;https://www.youtube.com/watch?v=EsoRUqFutYU&quot;&gt;video&lt;/a&gt; that explains unions and intersections using set theory to be really helpful for this&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Distinction between types and run time values&lt;br /&gt;
Part of why I struggled with unions and intersections was that it took me a while to understand that TypeScript doesn’t have access to run time values. This makes sense because types don’t exist at run time when TypeScript is compiled to regular JavaScript.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Index signatures&lt;br /&gt;
I’ve come across these recently and I’ve been caught out by type mismatches between an explicit property and an index signature. I’m learning that Index signatures can be thought of as an overall type for an object and individual fields need to conform to that.&lt;/li&gt;&lt;br /&gt;
&lt;p&gt;I’m looking forward to looking back on this post in a few months when hopefully these things will be easy for me.&lt;/p&gt;
&lt;h2&gt;Future plans with TypeScript&lt;/h2&gt;
&lt;p&gt;Now that I feel I’m comfortable with the TypeScript basics course I’m hoping to finish the Everyday TypeScript and Advanced TypeScript courses on &lt;a href=&quot;https://www.executeprogram.com/&quot;&gt;Execute Programme&lt;/a&gt;. I would like to convert my &lt;a href=&quot;https://domesticabuseservices.uk/&quot;&gt;domestic abuse services mapping tool&lt;/a&gt; from JavaScript to TypeScript as well. Finally, I’m going to put my skills into practice by writing and reading more TypeScript code in my work at &lt;a href=&quot;https://commonknowledge.coop/&quot;&gt;Common Knowledge&lt;/a&gt;.&lt;/p&gt;
&lt;/ol&gt;&lt;/article&gt;</description>
      <pubDate>Sun, 25 Aug 2024 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/notes-from-learning-typescript/</guid>
    </item>
    <item>
      <title>Building a tool to map domestic abuse services across the UK</title>
      <link>https://example.com/mapping-da-services-uk/</link>
      <description>&lt;article&gt;
&lt;p&gt;Over the last few months I’ve been working on a tool that will map the hundreds of domestic abuse support services across the UK. I know from my experience working as an advisor on the National Domestic Abuse Helpline that it can be challenging for survivors, or those supporting them, to find the right service local to them. By creating a comprehensive and up to date database of these services and displaying them on a map I’m hoping to make this process easier. I’m excited to combine what I know about the domestic abuse sector and my skills as a developer to make something that meets this need.&lt;/p&gt;
&lt;img src=&quot;https://annacunnane.co.uk/images/daservices.png&quot; alt=&quot;An image of the home page of a website showing a map of the UK with clustered service numbers on it.&quot; /&gt;
&lt;caption&gt;The site is live at &lt;a href=&quot;https://domesticabuseservices.uk/&quot;&gt;https://domesticabuseservices.uk/&lt;/a&gt;&lt;/caption&gt;
&lt;h2&gt;Background to the project&lt;/h2&gt;
&lt;p&gt;I have been working as an advisor on the National Domestic Abuse Helpline since 2019. In that time I have answered hundreds of calls from women experiencing abuse; their friends and family members and professionals. Almost every call involves making a referral to a local domestic abuse support service but the names and contact details for these services can be hard to find. This is especially the case for survivors who may be in a point of crisis or for those who have additional support needs. Having done some mapping projects already with Common Knowledge I decided that I would build the map that I wish I had access to when I’ve been speaking with women on the helpline.&lt;/p&gt;
&lt;h2&gt;How it works&lt;/h2&gt;
&lt;p&gt;The database of services is an Airtable base that is connected to a Next.js application using the Airtable API. I’m using Mapbox GL JS which is a client-side JavaScript library for building maps in web applications to display the map of the UK and the points that represent the locations of the services. Using Mapbox also has a clustering feature that I’ve used to indicate multiple services within a set geographical area (in this case 10 miles) when the user is zoomed out. 
The site started off as a single page application built in React but as it’s grown larger I’ve migrated it to Next.js to take advantage of server side rendering. For CSS I’m using Styled Components which has helped me to keep my CSS modular and allows dynamic styling based on user inputs. &lt;/p&gt;
&lt;h2&gt;Challenges&lt;/h2&gt;
&lt;p&gt;One of the main challenges I’ve faced with this project is how to efficiently use the Mapbox geocoding API to fetch geographical coordinates for the postcodes for each service. I found that this process was taking a lot of time and slowing down the performance of the site as well as burning through a lot of Mapbox’s free tier - meaning that this would start costing me money pretty quickly. As a solution to this I have decided to store the coordinates in the Airtable base which eliminates the need to call this API and simplifies the code. I also noticed that I was doing some processing of the Airtable data on the client that would be better handled on the server. As a result I made an API and server side routes in Next.js that mean the client is free to do what only it can - for example user interactions.&lt;/p&gt; 
&lt;h2&gt;Project roadmap&lt;/h2&gt;
&lt;p&gt;There are many things that I’d like to add to the site over the next few months. I’d like to convert the codebase to TypeScript to make it easier to debug and, as it’s open source, for others to maintain. I’m considering using a component library like shadcn to help me to iterate on the UI quickly as I’m not a designer. As most local domestic abuse services work within a specific local authority I’d like to add a visual layer to the map that shows local authority boundaries.  Ideally the site would have translations in multiple languages and I’m looking at using the next-i18next package for this. Finally I’m conscious that the site should meet the highest accessibility standards and I’m using the Web content accessibility guidelines (WCAG) 2.1 to achieve this.&lt;/p&gt;
&lt;p&gt;Thank you for reading and if there’s something you’d like to see on the site get in touch with me at &lt;a href=&quot;mailto:anna_cunnane@proton.me&quot;&gt;anna_cunnane@proton.me&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can submit a service to be listed &lt;a href=&quot;https://airtable.com/appksbQlVr07Kxadu/pagEkSrTVCs0yk2OS/form&quot;&gt; here&lt;/a&gt;&lt;/p&gt;
&lt;/article&gt;</description>
      <pubDate>Mon, 24 Jun 2024 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/mapping-da-services-uk/</guid>
    </item>
    <item>
      <title>What I&#39;ve learnt from working on a large software project</title>
      <link>https://example.com/what-i&#39;ve-learnt-from-working-on-a-large-software-project/</link>
      <description>&lt;article&gt;
&lt;p&gt;For the last couple of months at Common Knowledge we have been building an application called Mapped. Generously funded by the JRRT, it aims to empower activists and organizers with mapping and data enhancement tools. We’ve been writing and speaking about the process of building Mapped on our website and at our launch event at Pelican House. &lt;a href=&quot;https://prototype.mapped.commonknowledge.coop/&quot;&gt;Mapped&lt;/a&gt; is live in alpha and feedback is welcome. This post is about some of things I’ve learnt about from working on this project.&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1485856407642-7f9ba0268b51?q=80&amp;w=2670&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&quot; alt=&quot;turned on MacBook Pro near brown ceramic mug&quot; /&gt;
&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@sapegin?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Artem Sapegin&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/turned-on-macbook-pro-near-brown-ceramic-mug-ZMraoOybTLQ?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of the first things I had to understand was how we were going to build Mapped on top of an existing project &lt;a href=&quot;https://www.localintelligencehub.com/&quot;&gt;(My Society’s Local Intelligence Hub)&lt;/a&gt;. This was new for me as I had only previously created new projects from scratch. Forking Local Intelligence Hub gave us a ready made database schema; user authentication and relevant data that meant we could get up and running very quickly. Adding a NextJs app into a Python Django project and writing a GraphQl API to communicate between them helped me to better understand what people mean when they talk about distinct frontends and backends in an application.&lt;/p&gt;
&lt;p&gt;Mapped has also given me the chance to dive into &lt;a href=&quot;https://nextjs.org/blog/next-13-4&quot;&gt;Next.js 13.4&lt;/a&gt; and its app directory with nested routes and server components by default. This forced me to think about what makes using a client component necessary (like user interactions) and the sound architectural principles behind rendering as much as possible on the server. Nested routes helped me to grasp the page structure of Mapped at a glance even as it became bigger and more complex. 
One of the nice things about this project was that we could start the frontend from scratch which made it easier to use this version because we didn’t have to upgrade an existing codebase.&lt;/p&gt;
&lt;p&gt;Another major design choice was to use a GraphQL instead of a Rest API in Mapped. This seemed somewhat counter intuitive to me at first. We would need to install a package like Strawberry GraphQL and write custom resolvers to handle Django’s ORM models and that seemed like a lot of extra steps. But I liked the flexibility and efficiency of GraphQL and how well it works with Typescript in NextJs. Our aim, which was to represent organizations’ member lists on maps with enhanced political data, which is the kind of complex and interconnected data that GraphQL was designed for. GraphQL can also better support real time data which is an exciting future feature idea.&lt;/p&gt;
&lt;p&gt;It’s been really satisfying to work as part of the engineering team on a large software project. The complexity of the project and its scale has helped me to understand better the principles behind good software design. It’s also brought home to me the importance of having a good continuous integration/deployment pipeline and test coverage. I hope I get the chance to work further on Mapped or tools like it in the future.&lt;/p&gt;
&lt;/article&gt;</description>
      <pubDate>Sun, 14 Apr 2024 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/what-i&#39;ve-learnt-from-working-on-a-large-software-project/</guid>
    </item>
    <item>
      <title>What I&#39;ve learnt from mentoring at coding meetups</title>
      <link>https://example.com/what-ive-learnt-from-mentoring-at-coding-meetups/</link>
      <description>&lt;article&gt;
&lt;p&gt;I’ve recently been mentoring at two Founders and Coders meet ups and it made me think about what makes a good mentor - specifically when learning to code. I can remember how it felt to be mentored while I was on the Founders and Coders course so it was useful to see it from the other side two years into my career. I think my experiences as a mentor have helped me improve my communication skills; taught me patience and understanding and refreshed my memory and knowledge of some foundational topics.&lt;/p&gt;
&lt;p&gt;These are some general approaches and things I like to remember when I’m mentoring based on my experiences so far.&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1564865878688-9a244444042a?q=80&amp;w=2970&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3DD&quot; alt=&quot;black Android smartphone showing the words Eat Sleep Code Repeat&quot; /&gt;
&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@synkevych?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Roman Synkevych&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/black-android-smartphone-vXInUOv1n84?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Be a coach not a teacher &lt;/h2&gt;
It’s important that as a mentor you encourage people to find out the answers themselves rather than telling them what to do. This is because we want to empower people to solve problems as developers which involves looking at the documentation; trial and error and perseverance. I challenge myself not to touch somebody’s keyboard or mouse for the whole session! Part of the balance of being a mentor though is realizing when something might be too challenging and guiding people through a realistic learning path so that they don’t become discouraged. 
&lt;h2&gt;Have empathy for other people’s feelings and struggles &lt;/h2&gt; 
I know that learning to code can be really frustrating and that it’s difficult not to get emotionally involved in whether or not something is working. That’s why I try to be empathetic to what that person is feeling and allow them to express that and to make mistakes without judgment. I think this is particularly important when somebody has different struggles to you because it may be harder to imagine yourself in their place. I try to remember that nothing about learning something new or coding is easy and that I still frequently feel out of my depth.
&lt;h2&gt;It’s okay not to know the answer&lt;/h2&gt;
Initially when I was mentoring I was anxious that I wouldn’t have the answer to someone’s question or that they would be working on something that I’m not familiar with. I’ve realized that my job as a mentor is to provide guidance on how to go about debugging something rather than having direct experience of that particular framework or language. It’s also important to model how a developer reacts to things going wrong and show that this is part of the learning process and actually where we learn the most - even if it doesn’t feel like that at the time. 
&lt;h2&gt;Encourage peer to peer learning&lt;/h2&gt;
One of my main jobs as a mentor was to facilitate mentees learning from, and teaching, one another. Not only is teaching  a great way to solidify learning, it means that help can come from any member of the group and not just the mentors. Learning to code can be isolating and so having a supportive community at meetups gives people confidence in their ability and motivation to continue. At the same time I try to be attentive to group dynamics so that if anything seems unbalanced or someone needs a bit more support I can intervene.
&lt;br /&gt;&lt;br /&gt;
I’ve really enjoyed my time mentoring at Founders and Coders so far and I look forward to doing more of it in the future. If you are interested in applying for Founders and Coders &lt;a href=&quot;https://www.foundersandcoders.com/learn/&quot;&gt;you can find out more information here.&lt;/a&gt;
If you are a developer looking for opportunities to mentor check out &lt;a href=&quot;https://codebar.io/&quot;&gt;Codebar&lt;/a&gt;
&lt;/article&gt;</description>
      <pubDate>Mon, 12 Feb 2024 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/what-ive-learnt-from-mentoring-at-coding-meetups/</guid>
    </item>
    <item>
      <title>2023 - year in review</title>
      <link>https://example.com/2023-year-in-review/</link>
      <description>&lt;article&gt;
&lt;p&gt;I’ve enjoyed blogging about my progress as a developer this year so this is my end of year round up of the highlights of 2023. In this post I’m going to look at what I’ve learnt; the challenges I’ve faced this year as well as what I’m hoping for in 2024. This is my second year working full time as a software developer and it’s encouraging to see how far I’ve come particularly when building a new career feels hard. I hope it’s helpful for everyone learning to code or early career developers.&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1672405328102-05825b3cc8e7?q=80&amp;w=2970&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&quot; alt=&quot;2023 Year in Review&quot; /&gt;
&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@pawel_czerwinski?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Pawel Czerwinski&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/a-blue-and-white-background-with-the-word-sale-spelled-out-WbGRqQCIj9s?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;What I’ve been doing &lt;/h2&gt;
&lt;p&gt;I’m really proud that in April this year I passed my &lt;a href=&quot;https://www.instituteforapprenticeships.org/apprenticeship-standards/software-developer-v1-1&quot;&gt;BCS L4 Software Developer apprenticeship&lt;/a&gt; with a Merit. My final project was a rebuild of my employer &lt;a href=&quot;https://commonknowledge.coop/&quot;&gt;Common Knowledge’s website&lt;/a&gt; which I finished in February. The support both from Common Knowledge and &lt;a href=&quot;https://www.foundersandcoders.com/&quot;&gt;Founders and Coders&lt;/a&gt; where I did my initial 12 week training programme has been incredible and helped me get this result. I’m really happy that after the completion of my apprenticeship Common Knowledge offered me a job as a junior developer which is what I’m doing now. This year I’ve worked on a range of projects for them including migrating climate organization &lt;a href=&quot;https://350.org/&quot;&gt;350.org&lt;/a&gt; to WordPress Gutenberg and assisting with a new website for &lt;a href=&quot;https://architecture-lobby.org/&quot;&gt;The Architecture Lobby&lt;/a&gt;. A highlight was building a website for the &lt;a href=&quot;https://sknb.org/&quot;&gt;Solidarity Knows No Borders&lt;/a&gt; campaign in collaboration with Migrants Organize. In my own time I’ve also built a new portfolio site that I’ll be launching soon and I’ve started work on a project to map domestic abuse support services across the UK.&lt;/p&gt;
&lt;h2&gt;What I’ve learnt&lt;/h2&gt; 
&lt;p&gt;In 2023, as well as gaining confidence as a developer generally, I have focussed on these areas:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Understanding WordPress as a CMS or backend with an API that can be used with any frontend has been exciting for me this year&lt;/li&gt;
  &lt;li&gt;WordPress has transitioned to a React based UI called Gutenberg for its editor and I’ve enjoyed learning how to make my own blocks and plugins for this environment.&lt;/li&gt;
  &lt;li&gt;I’ve been learning to develop block based themes in WordPress which allow editors to customize almost all elements of a site.&lt;/li&gt;
  &lt;li&gt;I’ve started to use Alpine Js which is a lightweight JavaScript framework for adding bits of interactivity to web pages.&lt;/li&gt;
  &lt;li&gt;I’ve made my new portfolio site with static site generator Eleventy and I’ve appreciated its simplicity and the level of control it offers developers&lt;/li&gt;
  &lt;li&gt;I’ve been working with geographic data for Solidarity Knows No Borders and my domestic abuse services mapping project and Mapbox has been a great tool for this. I’m proud of the clustering feature I implemented on &lt;a href=&quot;https://sknb.org/community/&quot;&gt;this page&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Challenges&lt;/h2&gt; 
&lt;p&gt;Inevitably as part of the learning process I have had plenty of challenges and difficult moments in 2023. I have struggled a lot with feeling that I’m working very slowly particularly compared to more senior developers. I know that speed will come with time and experience but it’s very tough day to day to feel that I’m not contributing enough to the team. Another challenge has been keeping my CSS organized without using a framework. I’ve tried very hard to improve my understanding of PHP and WordPress from the ground up but I’ve still found modifying the query loop block difficult.&lt;/p&gt;
&lt;h2&gt;What I’m hoping for in 2024&lt;/h2&gt; 
&lt;p&gt;In the new year I’d like to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Make more personal projects to add to my portfolio&lt;/li&gt;
  &lt;li&gt;Build on what I’ve learnt this year on creating custom user interfaces in WordPress Gutenberg and even make my own plugins&lt;/li&gt;
  &lt;li&gt;Get better at manipulating data in code and performing data migrations&lt;/li&gt;
  &lt;li&gt;Make more realistic time estimates at the beginning of projects&lt;/li&gt;
  &lt;li&gt;Learn more about project management and take on stewardship of more complex projects at Common Knowledge&lt;/li&gt;
  &lt;li&gt;Be part of exciting projects like &lt;a href=&quot;https://mapped.commonknowledge.coop/&quot;&gt;Mapped&lt;/a&gt; with Common Knowledge&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you for reading and good luck with your coding in 2024 and beyond!&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Thu, 28 Dec 2023 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/2023-year-in-review/</guid>
    </item>
    <item>
      <title>What I’ve learnt about WordPress development at Common Knowledge</title>
      <link>https://example.com/what-ive-learnt-about-wordpress-development/</link>
      <description>&lt;article&gt;
  &lt;p&gt;At Common Knowledge we work with organisers and grassroots groups to improve their websites and digital infrastructure to maximize the impact of their work. We think that WordPress is a good solution for many of our collaborators as it’s easy to use and has a powerful content management system. This post is about what I’ve learned about the modern WordPress ecosystem since joining Common Knowledge and how it has improved my work.&lt;/p&gt;
  &lt;img src=&quot;https://images.unsplash.com/photo-1566207462754-97c86c31db3d?auto=format&amp;fit=crop&amp;q=80&amp;w=2970&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&quot; alt=&quot;Turned on Monitor&quot; /&gt;
  &lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@tozakfikret?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Fikret tozak&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/turned-on-monitor-rfNLa1HL7eY?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
  &lt;h2&gt;Bedrock&lt;/h2&gt;
  &lt;p&gt;Bedrock is a WordPress boilerplate with an improved folder structure that separates the application code from core WordPress files and plugins. It uses Dotenv to manage environment-specific variables and keep sensitive data out of version control. It also means that I can manage dependencies like plugins and WordPress/PHP versions via Composer. Using the Bedrock set of standards helps me to get closer to a 12-Factor App methodology with WordPress.&lt;/p&gt;
  &lt;h2&gt;Block editor&lt;/h2&gt;
  &lt;p&gt;The block editor (also known as Gutenberg editor) is now the default content editor in WordPress. It uses a modular approach where content is organized into individual blocks to create complex layouts with a drag and drop interface. The real-time preview feature allows users to see what the content will look like on the page without previewing or saving. I do a lot of my development work in the block editor to create reusable patterns for our collaborators to customize as they wish.&lt;/p&gt;
  &lt;h2&gt;Full Site Editing&lt;/h2&gt;
  &lt;p&gt;Full Site Editing builds on the block editor to allow users to edit every element of a WordPress website including headers, footers, and content templates. I use the theme.json file to define settings such as colors, typography, and spacing to ensure design consistency. I try to write as little custom CSS as possible and allow all styling to be done within the editor. Setting up the site in this way means that when I hand it over, collaborators can easily generate new pages and content without needing any coding skills.&lt;/p&gt;
  &lt;h2&gt;Custom Gutenberg blocks&lt;/h2&gt;
  &lt;p&gt;Gutenberg is built in React which means it’s highly extensible for developers to create their own blocks. I’ve been learning how to use the @wordpress/create-block package to make reusable blocks with custom design and functionality. For example, a campaign site may want a custom sign-up block that integrates with a third-party mailing list service or a block that displays a real-time map of member activities. It also means that I have to rely less on third-party plugins.&lt;/p&gt;
  &lt;h2&gt;Renovate&lt;/h2&gt;
  &lt;p&gt;I use the Renovate package to help me automate dependency updates for Composer in my WordPress repositories. Renovate runs scheduled checks to extract the project dependencies from the composer.json file which it then checks against a directory like WP Packagist. If it identifies an update it creates a PR for the latest version and often includes a change log or release notes. A complaint about WordPress historically has been the security risks from out-of-date plugins so Renovate is really important in managing this risk.&lt;/p&gt;
  &lt;p&gt;All of the above techniques and tools have helped me to build bespoke WordPress projects faster and with a better developer experience. I’m hoping to start writing my own plugins for the Gutenberg editor and will be writing a blog about that experience.&lt;/p&gt;
  &lt;p&gt;Links and tutorials to check out:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/&quot; target=&quot;_blank&quot;&gt;Block Editor Tutorial&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://fullsiteediting.com/&quot; target=&quot;_blank&quot;&gt;Full Site Editing&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://roots.io/bedrock/&quot; target=&quot;_blank&quot;&gt;Bedrock&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://docs.renovatebot.com/&quot; target=&quot;_blank&quot;&gt;Renovate&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/article&gt;
</description>
      <pubDate>Sun, 05 Nov 2023 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/what-ive-learnt-about-wordpress-development/</guid>
    </item>
    <item>
      <title>Month notes September</title>
      <link>https://example.com/month-notes-september/</link>
      <description>&lt;article&gt;
  &lt;p&gt;Developing my new personal website with Eleventy.js 🤖 Preparing for Platform.org site launch 🏗️ Optimizing my WordPress workflow 💼 Starting development work on new Solidarity Knows No Borders website ✊&lt;/p&gt;
  &lt;br /&gt;
  &lt;img src=&quot;https://media.istockphoto.com/id/182353093/photo/september-pinned-on-noticeboard.jpg?s=612x612&amp;w=0&amp;k=20&amp;c=J7-LuRLG5MpgvOKBOctS7wpsR-qsfEZQstCO1Z0erGE=&quot; alt=&quot;September Pinned on Noticeboard&quot; /&gt;
  &lt;h2&gt;What I’ve been working on&lt;/h2&gt;
  &lt;p&gt;This month I’ve been helping to finish off the &lt;a href=&quot;https://platformlondon.org/&quot; target=&quot;_blank&quot;&gt;Platform.org&lt;/a&gt; website ahead of its launch. This included fixing some CSS bugs and adding JavaScript features like a &lt;a href=&quot;https://platformlondon.org/?s&quot; target=&quot;_blank&quot;&gt;counter on the number of search filters selected&lt;/a&gt;. I’ve been working on optimizing my WordPress workflow in general by making sure I’m using all of the possible styling options in theme.json and using the create block theme plugin. I also took part in some user testing sessions with the Figma prototype of the Solidarity Knows No Borders website. I set up the repository for this new project and started some initial development work like creating the header, footer, and a custom post type. On my personal site, I’ve been designing and developing the landing page which you can view in progress on the &lt;a href=&quot;https://fluffy-frangollo-4a6b3d.netlify.app/&quot; target=&quot;_blank&quot;&gt;staging site&lt;/a&gt;.&lt;/p&gt;
  &lt;h2&gt;What I’ve been learning&lt;/h2&gt;
  &lt;p&gt;This month I’ve been learning how to:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Use the &lt;a href=&quot;https://wordpress.org/plugins/create-block-theme/&quot; target=&quot;_blank&quot;&gt;create block theme plugin&lt;/a&gt; to quickly generate a block-based WordPress theme&lt;/li&gt;
    &lt;li&gt;Use &lt;a href=&quot;https://www.11ty.dev/docs/collections/&quot; target=&quot;_blank&quot;&gt;eleventy collections&lt;/a&gt; to organize the content on my new website&lt;/li&gt;
    &lt;li&gt;Integrate Google Sheets with &lt;a href=&quot;https://www.gravityforms.com/&quot; target=&quot;_blank&quot;&gt;gravity forms&lt;/a&gt; so that form entries are automatically added to a designated Google Sheet&lt;/li&gt;
    &lt;li&gt;Add &lt;a href=&quot;https://docs.renovatebot.com/&quot; target=&quot;_blank&quot;&gt;renovate&lt;/a&gt; to a repository to manage PHP composer dependencies&lt;/li&gt;
    &lt;li&gt;Use the &lt;a href=&quot;https://docs.mapbox.com/api/overview/&quot; target=&quot;_blank&quot;&gt;mapbox API&lt;/a&gt; and the &lt;a href=&quot;https://carbonfields.net/docs/&quot; target=&quot;_blank&quot;&gt;carbon fields&lt;/a&gt; library to create a custom map component on a WordPress site&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2&gt;What’s next&lt;/h2&gt;
  &lt;p&gt;Over the next month, I’m going to be the main developer building the Solidarity Knows No Borders website. The site will be a home for this community fighting for migrant justice &amp; dignity, and I’m very excited to be involved. I’m looking forward to building on my existing knowledge of WordPress Full Site Editor to build a beautiful and easy-to-use site within a limited timeframe and budget. There are some components in the design such as the map of member organizations and resources that need to be translated into multiple languages that will be technically challenging. It will be interesting to see how I can implement them and hopefully what I’ve learned into future projects. On my personal website, I’m aiming to build my projects portfolio page which should display the best of my work over the last two years.&lt;/p&gt;
  &lt;h2&gt;Interesting links&lt;/h2&gt;
  &lt;p&gt;These are some interesting links that I’ve come across this month:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;https://unicornclub.dev/&quot; target=&quot;_blank&quot;&gt;Unicorn Club&lt;/a&gt; is a 5-minute weekly newsletter for front-end developers and code-savvy designers&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://playground.wordpress.net/&quot; target=&quot;_blank&quot;&gt;WordPress playground&lt;/a&gt; runs a full sandboxed WordPress site in the browser&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://sizzy.co/&quot; target=&quot;_blank&quot;&gt;Sizzy&lt;/a&gt; is my favorite tool for testing websites on multiple devices and browsers&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://pawelgrzybek.com/working-with-git-worktrees/&quot; target=&quot;_blank&quot;&gt;Paweł Grzybek&lt;/a&gt; explains how Git worktrees mean the end of messy stashes and wip commits&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://frontendchecklist.io/&quot; target=&quot;_blank&quot;&gt;Frontendchecklist.io&lt;/a&gt; includes 88 points to keep in mind before you launch your website&lt;/li&gt;
  &lt;/ul&gt;
&lt;/article&gt;
</description>
      <pubDate>Sat, 07 Oct 2023 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/month-notes-september/</guid>
    </item>
    <item>
      <title>An update on my new website</title>
      <link>https://example.com/an-update-on-my-new-website/</link>
      <description>&lt;article&gt;
&lt;p&gt;Over the last couple of months I’ve been rebuilding my personal website with Eleventy. This post is an update on that work.&lt;/p&gt;
&lt;h2&gt; Why move from the original site? &lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;I wrote the original site with Gatsby but Eleventy is a more lightweight static site generator with faster builds and performance&lt;/li&gt;
  &lt;li&gt;I knew that I wanted to use another SSG because I’m not using a CMS (my current blog content is in Markdown) and I could continue to host with Netlify.&lt;/li&gt;
  &lt;li&gt;My current site was written over three years ago and I’ve learnt a lot since then. I wanted a site that reflects my current ability.&lt;/li&gt;
  &lt;li&gt;I was interested in learning how to use Eleventy and it gave me the opportunity to learn the templating language Nunjucks.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt; What is the MVP of the new site? &lt;/h2&gt;
&lt;p&gt;I set the target of getting an MVP (minimum viable project) completed by the end of this year. The MVP includes the following:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;A portfolio section to showcase my work&lt;/li&gt;
  &lt;li&gt;A dedicated space for my blog posts&lt;/li&gt;
  &lt;li&gt;A beautiful looking landing page that contains my portfolio; an about me section and a contact form using &lt;a href=&quot;https://demo-eleventy-edge.netlify.app/forms/&quot;&gt;Eleventy Edge Forms&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tags to organise my blog content (using Eleventy collections)&lt;/li&gt;
  &lt;li&gt;Frontmatter on my blog posts with summary, post date and tags&lt;/li&gt;
  &lt;li&gt;Google Analytics set up and meta tags generated by &lt;a href=&quot;https://www.npmjs.com/package/eleventy-plugin-seo&quot;&gt;eleventy-plugin-seo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;An RSS feed for the blog created by &lt;a href=&quot;https://www.npmjs.com/package/@11ty/eleventy-plugin-rss&quot;&gt;eleventy-plugin-rss&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A ‘good’ Lighthouse score and accessibility checks using the &lt;a href=&quot;https://wave.webaim.org/&quot;&gt;WAVE&lt;/a&gt; tool&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt; Site Design &lt;/h2&gt;
&lt;p&gt;There’s a lot of work still to do on the design of the site. I am looking for inspiration at sites like &lt;a href=&quot;https://dribbble.com/&quot;&gt;Dribble&lt;/a&gt; and &lt;a href=&quot;https://www.behance.net/&quot;&gt;Behance&lt;/a&gt;. I am using IBM Plex Mono as my heading font and Inter for body text to create a modern and minimalist look with an emphasis on readability. At the moment I’m using a blue and orange colour palette but even if these change I would like plenty of white space with one or two accent colours. I would also like to add some scroll animations on the landing page. As I’m not as confident with design as I am with development I will probably get a designer friend to look over the site and give their feedback&lt;/p&gt;
&lt;p&gt;The work in progress home and blog index page:&lt;/p&gt;
&lt;img src=&quot;https://example.com/images/sizzy-1.png&quot; alt=&quot;A screenshot of a homepage for a developer portfolio website&quot; /&gt;
&lt;img src=&quot;https://example.com/images/sizzy-2.png&quot; alt=&quot;A screenshot of a blog index page for a developer portfolio website&quot; /&gt;
&lt;h2&gt; Developer experience &lt;/h2&gt;
&lt;p&gt;So far the experience of switching to Eleventy has been smooth. As Eleventy supports Markdown out of the box I transferred my blog over and put it online with Netlify within an hour. The documentation is comprehensive and well structured and has helped me to implement features like pagination and tags on my blog. Eleventy allows me to write JavaScript functions to fetch post data whereas with Gatsby I used GraphQL which was probably too complex for my needs.&lt;/p&gt;
&lt;h2&gt; Future iterations &lt;/h2&gt;
&lt;p&gt;Next year I’ll be adding more functionality to the site as well as posting blog content. I&#39;m thinking that this will include:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;A light/dark mode toggle&lt;/li&gt;
  &lt;li&gt;More custom filters for displaying post metadata on the blog index page. I’m already using one for dates but it would be nice to have time to read or table of contents.&lt;/li&gt;
  &lt;li&gt;Support for embedding content from Twitter, TikTok, YouTube etc within Markdown&lt;/li&gt;
  &lt;li&gt;A more privacy conscious analytics provider like &lt;a href=&quot;https://posthog.com/&quot;&gt;PostHog&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;p&gt;For more information on Eleventy Js check out the &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;docs&lt;/a&gt; and &lt;a href=&quot;https://11ty.rocks/&quot;&gt;11ty.rocks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Look out for more updates and the site launch!&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Sun, 03 Sep 2023 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/an-update-on-my-new-website/</guid>
    </item>
    <item>
      <title>Month notes - July</title>
      <link>https://example.com/month-notes-july/</link>
      <description>&lt;article&gt;
&lt;h1&gt; Notes from July &lt;/h1&gt;
&lt;p&gt;Security scanning; block-based themes and building Gutenberg blocks in WordPress 🧱 Launching the Architecture Lobby website 🏢 Debugging a Django app using the Shopify Python API 🛒&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1593448844447-f5c63fe0d806?ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&amp;auto=format&amp;fit=crop&amp;w=1740&amp;q=80&quot; alt=&quot;Photo by Glen Carrie on Unsplash&quot; /&gt;
Photo by &lt;a href=&quot;https://unsplash.com/@glencarrie?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Glen Carrie&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/RanxGMHPsLI?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;h2&gt; What I’ve been working on&lt;/h2&gt;
&lt;p&gt;This month I’ve made a staging environment for my new personal website on Netlify and put the first (very basic) version of the site live. I’ve been impressed at how quickly I was able to transfer across much of the existing content from Gatsby and how nice Eleventy is to use. At Common Knowledge I’ve been improving the new Architecture Lobby site’s visual fidelity to its Figma design and removing redundant code ahead of its launch. I also pair programmed with a colleague to debug an issue with syncing products to a Django app using the Shopify Python API. This involved thinking about Python data types; checking that the API was returning valid JSON and running migrations to update the Postgres database.&lt;/p&gt;
&lt;h2&gt;What I’ve been learning&lt;/h2&gt;
&lt;p&gt;This month I’ve been learning how to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;audit a WordPress site for security issues using the WP-CLI Vulnerability Scanner package&lt;/li&gt;
  &lt;li&gt;understand and use the different parts of block-based WordPress themes such as templates, template-parts and patterns&lt;/li&gt;
  &lt;li&gt;use the Convert to Blocks plugin to convert classic WordPress editor content to Gutenberg blocks&lt;/li&gt;
  &lt;li&gt;create custom Gutenberg blocks with React with the @wordpress/create-block tool&lt;/li&gt;
  &lt;li&gt;configure Global settings and styles for the WordPress Full Site Editor in the theme.json file&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What’s next&lt;/h2&gt;
&lt;p&gt;In August I’m going to be creating a workflow for handling WordPress multisite installations with Bedrock. I’m also expecting to start work on a new website for a project called Solidarity Knows No Borders which is part of the Migrants Organise Campaign Group. I’ve already done some technical discovery for this project including research on how to implement a map that displays locations of local groups within the organisation. I’m planning to add some styling to the blog page on my new personal site. I would like to spend some time thinking about the structure behind my approach to the WordPress Full Site Editor and what is appropriate to put in templates versus page content or patterns.&lt;/p&gt;
&lt;h2&gt;Interesting links&lt;/h2&gt;
&lt;p&gt;These are some interesting links that I’ve come across this month:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://fullsiteediting.com/&quot;&gt;https://fullsiteediting.com/&lt;/a&gt; is a comprehensive tutorial for the WordPress Full Site Editor and writing block-based themes&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devdocs.io/&quot;&gt;https://devdocs.io/&lt;/a&gt; combines multiple API documentations in a fast, organised, and searchable interface&lt;/li&gt;
  &lt;li&gt;Kara Luton, engineer at CrowdStrike has a &lt;a href=&quot;https://dev.to/karaluton/a-guide-to-perfecting-pull-requests-2b66&quot;&gt;guide to perfecting pull requests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitexplorer.com/&quot;&gt;Git Command Explorer&lt;/a&gt; helps you find the commands you need without Googling&lt;/li&gt;
  &lt;li&gt;A detailed explanation of how to create a fluid type scale from the creator of Fluid Type Scale Calculator, Aleksandr Hovhannisyan &lt;a href=&quot;https://www.aleksandrhovhannisyan.com/blog/fluid-type-scale-with-css-clamp/&quot;&gt;(source)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/article&gt;
</description>
      <pubDate>Sat, 22 Jul 2023 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/month-notes-july/</guid>
    </item>
    <item>
      <title>Month notes - June</title>
      <link>https://example.com/month-notes%20-june/</link>
      <description>&lt;article&gt;
&lt;h1&gt; Notes from June &lt;/h1&gt;
&lt;p&gt;Google Analytics migration to GA4 🔍Design QA for SWARM website 💅 Diving into WordPress Full Site Editor for developers 🤿Tech discovery for Solidarity Knows No Borders 🧭&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1589726310756-0198bd0d0fb2?ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&amp;auto=format&amp;fit=crop&amp;w=1770&amp;q=80&quot; alt=&quot;Photo by Glen Carrie on Unsplash&quot; /&gt;
Photo by &lt;a href=&quot;https://unsplash.com/@glencarrie?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Glen Carrie&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/k06emqjiB7M?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;h2&gt; What I’ve been working on &lt;/h2&gt;
&lt;p&gt;This month I’ve been working on a Google Analytics integration with the Left Book Club website. This involved migrating to Google Analytics 4 and setting up custom events to measure ecommerce events such as purchases and subscriptions on the site. I’ve been completing design QA tickets on the SWARM website and finishing pages like search and category index pages as well as thinking about how to add an application form page that won’t be indexed by search engines. Finally, I’ve begun working on my personal portfolio site with static site generator Eleventy.&lt;/p&gt;
&lt;h2&gt; What I’ve been learning &lt;/h2&gt;
&lt;p&gt;This month I’ve been learning how to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Use the WordPress Full Site Editor to develop fully customizable block-based themes.&lt;/li&gt;
  &lt;li&gt;Use feComponentTransfer to create a duotone filter effect on images&lt;/li&gt;
  &lt;li&gt;Integrate existing layouts and styles into WordPress plugin AJAX Load More via a repeater template&lt;/li&gt;
  &lt;li&gt;Extend the inbuilt Query Loop Block in WordPress by registering a block variation&lt;/li&gt;
  &lt;li&gt;Display Mapbox data in a custom Gutenberg block with library CarbonFields and plugin Mapster WP Maps&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; What’s next &lt;/h2&gt;
&lt;p&gt;In July I want to get an MVP of my personal portfolio site online. I will also be moving this blog across to the new site so next month&#39;s notes will be posted there ⭐ I will be helping finish off the build for the Architecture Lobby website. I am expecting to start work on a website redesign and build for Solidarity Knows No Borders which is a campaign group and coalition run by Migrants Organise.&lt;/p&gt;
&lt;h2&gt; Interesting links &lt;/h2&gt;
&lt;p&gt;These are some interesting links that I’ve come across this month:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://egghead.io/q?access_state=free&quot;&gt;Egghead.io&lt;/a&gt; is my favourite resource for web development tutorials. These are their current free courses.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.phind.com/&quot;&gt;Phind&lt;/a&gt; is a developer-focused search engine that uses generative AI to search the web and answer technical questions&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.figma.com/blog/introducing-dev-mode/&quot;&gt;Dev Mode&lt;/a&gt; is a new workspace within Figma design specifically for developers&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/playground/&quot;&gt;WordPress Playground&lt;/a&gt; runs in the browser with instant set up. Great for testing and previewing pull requests.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://chriscoyier.net/2023/06/06/modern-css-in-real-life/&quot;&gt;Chris Coyier&lt;/a&gt; looks at 5 new CSS features that are in use now across the web&lt;/li&gt;
&lt;/ul&gt;
&lt;/article&gt;
</description>
      <pubDate>Tue, 27 Jun 2023 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/month-notes%20-june/</guid>
    </item>
    <item>
      <title>Month notes - May</title>
      <link>https://example.com/month-notes-may/</link>
      <description>&lt;article&gt;
&lt;h1&gt;Notes from May&lt;/h1&gt;
&lt;p&gt;The launch of the 2023 The World Transformed festival 🚀 Successful Bedrock deployment with 350org 🌎 Adapting an existing WordPress theme for the new SWARM website 🐝&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1588006173527-6168350e6079?ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&amp;auto=format&amp;fit=crop&amp;w=774&amp;q=80&quot; alt=&quot;Photo by Glen Carrie on Unsplash&quot; /&gt;
Photo by &lt;a href=&quot;https://unsplash.com/@glencarrie?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Glen Carrie&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/vavYIIv-Puo?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;h2&gt; What I’ve been working on&lt;/h2&gt;
&lt;p&gt;This month I’ve been helping get &lt;a href=&quot;https://theworldtransformed.org/&quot;&gt;The World Transformed&lt;/a&gt; website ready for the launch of their 2023 festival. This included some site enhancements like allowing editors to customise background and text colours of streamfield blocks and adding a video player to the full width header image. I have continued supporting &lt;a href=&quot;https://350.org/&quot;&gt;350.org&lt;/a&gt; with their transition over to the &lt;a href=&quot;https://roots.io/bedrock/&quot;&gt;Bedrock pattern&lt;/a&gt; for their WordPress sites. This month we successfully recreated and deployed a production 350 site with this new stack. Finally, I’ve been adapting the &lt;a href=&quot;https://schematictheme.com/&quot;&gt;Schematic WordPress theme&lt;/a&gt; so that it can be reused for the SWARM website redesign.&lt;/p&gt;
&lt;h2&gt; What I’ve been learning&lt;/h2&gt;
&lt;p&gt;This month I’ve been learning how to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Programmatically fetch raw Shopify data using the &lt;a href=&quot;https://wpshop.io/&quot;&gt;ShopWP&lt;/a&gt; plugin and display it in a custom WordPress Gutenberg block&lt;/li&gt;
  &lt;li&gt;Use the poster attribute in the &lt;code&gt;video&lt;/code&gt; element to display an image until the video content is ready to be played&lt;/li&gt;
  &lt;li&gt;Retrieve data from a WordPress post field based on the post ID with the &lt;code&gt;get_post_field()&lt;/code&gt; function&lt;/li&gt;
  &lt;li&gt;Create section layouts in JSON for a custom WordPress theme&lt;/li&gt;
  &lt;li&gt;Add a color picker to the admin interface in a Django Wagtail project with the &lt;a href=&quot;https://github.com/fabiocaccamo/django-colorfield&quot;&gt;django-colorfield&lt;/a&gt; package&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; What’s next&lt;/h2&gt;
&lt;p&gt;In June I’ll be finishing my work on SWARM and preparing the site for launch. I am expecting to start a new project building a new site for indigenous communications network Awasqa. I’m taking a break towards the end of the month to work on personal projects including a new portfolio site that I hope to be porting this blog to soon.&lt;/p&gt;
&lt;h2&gt;Interesting links&lt;/h2&gt;
&lt;p&gt;These are some interesting links that I’ve come across this month:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://nathanbenaich.substack.com/&quot;&gt;Guide to AI&lt;/a&gt; is a monthly newsletter that analyses the most important developments in AI&lt;/li&gt;
  &lt;li&gt;Get a &lt;a href=&quot;https://css-tip.com/&quot;&gt;one minute CSS tip every day&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A &lt;a href=&quot;https://github.com/marceloprates/prettymaps&quot;&gt;Python library&lt;/a&gt; to draw beautiful maps from OpenStreetMap data&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://11ty.rocks/&quot;&gt;Eleventy rocks&lt;/a&gt; is a collection of starters, plugins and resources for the static site generators&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://vanillajstoolkit.com/&quot;&gt;The Vanilla JS toolkit&lt;/a&gt; is a collection of tools and snippets for JavaScript without frameworks&lt;/li&gt;
&lt;/ul&gt;
&lt;/article&gt;
</description>
      <pubDate>Tue, 30 May 2023 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/month-notes-may/</guid>
    </item>
    <item>
      <title>Month notes - April</title>
      <link>https://example.com/month-notes-april/</link>
      <description>&lt;article&gt;
&lt;h1&gt;Notes from April&lt;/h1&gt;
&lt;p&gt;Receiving my apprenticeship result 👩‍🎓 Building a new website for campaign group Swarm 🐝 Adding new features to The World Transformed site 🏭 Support work for membership organization The Left Book Club 📕&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1521011745117-f4395db2564b?ixlib=rb-4.0.3&amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;auto=format&amp;fit=crop&amp;w=1769&amp;q=80&quot; alt=&quot;Photo by Joanna Kosinska on Unsplash&quot; /&gt;
Photo by &lt;a href=&quot;https://unsplash.com/@joannakosinska?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Joanna Kosinska&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/AftsBzZKK20?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;h2&gt; What I’ve been working on &lt;/h2&gt;
&lt;p&gt;I received my &lt;a href=&quot;https://findapprenticeshiptraining.apprenticeships.education.gov.uk/courses/2&quot;&gt;apprenticeship&lt;/a&gt; final grade in April and I’m very proud to say that I passed with a Merit. I’ve signed a further contract with my apprenticeship employer &lt;a href=&quot;https://commonknowledge.coop/&quot;&gt;Common Knowledge&lt;/a&gt; so I’m now a Junior Engineer and looking forward to learning more with them over the next year.
Aside from that, I’ve been adding features to &lt;a href=&quot;https://theworldtransformed.org/&quot;&gt;The World Transformed&lt;/a&gt; site in preparation for this year’s festival and doing some bug fixes for &lt;a href=&quot;https://leftbookclub.com/&quot;&gt;The Left Book Club&lt;/a&gt; - specifically to do with their Shopify integration.&lt;/p&gt;
&lt;h2&gt; What I’ve been learning &lt;/h2&gt;
&lt;p&gt;This month I’ve been learning how to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Add a &lt;code&gt;.nvmrc&lt;/code&gt; file to repositories to specify which Node version should be used with a project&lt;/li&gt;
  &lt;li&gt;Use the &lt;code&gt;linearGradient&lt;/code&gt; element to recreate a Photoshop gradient map with an SVG&lt;/li&gt;
  &lt;li&gt;Use the &lt;a href=&quot;https://wagtailmenus.readthedocs.io/en/stable/index.html&quot;&gt;Wagtail Menus&lt;/a&gt; package to create different editable menus and custom menu templates for a site&lt;/li&gt;
  &lt;li&gt;Set up an SSH connection to a WordPress installation hosted on Kinsta and use git to clone a repo into it&lt;/li&gt;
  &lt;li&gt;Set up a Cron Job to run the Django command &lt;code&gt;publish_scheduled_pages&lt;/code&gt; every half hour&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; What’s next &lt;/h2&gt;
&lt;p&gt;In May I’ll be finishing the SWARM website build. I will also be working on the new site for indigenous communications network Awasqa. I’m assisting a colleague with a WordPress site for The Architecture Lobby and I will likely be doing some additional devops support work for 350.org. I want to dedicate some personal time to creating a new personal site with a portfolio and migrating this blog. I haven’t decided yet which language or framework to use but I’m considering something like React and &lt;a href=&quot;https://www.sanity.io/&quot;&gt;Sanity.io&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt; Interesting links &lt;/h2&gt;
&lt;p&gt;These are some interesting links that I’ve come across this month:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Trigger GitHub Actions and view status and logs directly from the editor with this &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=github.vscode-github-actions&quot;&gt;VSCode extension&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A &lt;a href=&quot;https://github.com/sudheerj/javascript-interview-questions&quot;&gt;collection of JavaScript interview questions and answers&lt;/a&gt; that are helpful for preparing for job interviews&lt;/li&gt;
  &lt;li&gt;This &lt;a href=&quot;https://www.smashingmagazine.com/2023/01/level-up-css-skills-has-selector&quot;&gt;Smashing Magazine article&lt;/a&gt; explains how the &lt;code&gt;:has()&lt;/code&gt; selector could soon become a game-changer&lt;/li&gt;
  &lt;li&gt;A &lt;a href=&quot;https://www.webperf.tips/&quot;&gt;comprehensive collection of techniques developers can use to optimize their web apps&lt;/a&gt; from Stripe engineer Joe Liccini&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;https://open.spotify.com/show/5eXZwvvxt3K2dxha3BSaAe&quot;&gt;NerdOut@Spotify podcast&lt;/a&gt; produced by the Spotify engineering team gives an insider look into their work&lt;/li&gt;
&lt;/ul&gt;
&lt;/article&gt;
</description>
      <pubDate>Sun, 30 Apr 2023 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/month-notes-april/</guid>
    </item>
    <item>
      <title>Working on the new Common Knowledge website</title>
      <link>https://example.com/working-on-the-new-common-knowledge-website/</link>
      <description>&lt;article&gt;
&lt;p&gt;For the final part of my Software Development Apprenticeship I’ve been working on a new website for &lt;a href=&quot;https://commonknowledge.coop/&quot;&gt;Common Knowledge&lt;/a&gt;. Common Knowledge makes digital tools to help social movements build power. They needed a new website that could be updated with a CMS and could better display the range of work that the co-op does.&lt;/p&gt;
&lt;img src=&quot;https://practical-swanson-368627.netlify.app/static/aabb6cae4b95950fe113a900eef60600/aa440/CK-website.png&quot; alt=&quot;Common Knowledge Website Screenshot&quot; /&gt;
&lt;h1&gt; Website stack 🥞 &lt;/h1&gt;
&lt;h2&gt; Wagtail CMS 🦜 &lt;/h2&gt;
&lt;p&gt;I built the site with &lt;a href=&quot;https://wagtail.org/&quot;&gt;Wagtail&lt;/a&gt; which is an open-source content management system (CMS) built on the &lt;a href=&quot;https://www.djangoproject.com/&quot;&gt;Django web framework&lt;/a&gt;. I chose Wagtail for this project because it has a user-friendly admin interface that makes it easy to add and update content. It is also fully customizable and extensible with a range of packages and plugins available and an active developer community. Wagtail also inherits Django’s built-in protection from common security vulnerabilities in web applications.&lt;/p&gt;
&lt;h2&gt; Tailwind CSS 💅 &lt;/h2&gt;
&lt;p&gt;For CSS I used &lt;a href=&quot;https://tailwindcss.com/&quot;&gt;Tailwind&lt;/a&gt; which helped speed up the development process as it gave me access to thousands of in-built utility classes that I could add directly into my HTML. I set up a Tailwind configuration file where I declared values for colours, a type scale, fonts, and breakpoints. This helped me to quickly apply a consistent design and visual style to the site.&lt;/p&gt;
&lt;h2&gt; Stimulus JS ⚡ &lt;/h2&gt;
&lt;p&gt;I used &lt;a href=&quot;https://stimulus.hotwired.dev/&quot;&gt;Stimulus&lt;/a&gt; which is a lightweight JavaScript framework to add small reusable snippets of JavaScript into the HTML templates I already had with Django. I avoided using a framework like React because it would add an unnecessary amount of files for what would be a relatively simple functionality.&lt;/p&gt;
&lt;h2&gt; What went well ✅ &lt;/h2&gt;
&lt;p&gt;These are some of the highlights from the project:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Using Wagtail meant that I could get a site set up with a full content management system and user authentication within minutes.&lt;/li&gt;
  &lt;li&gt;Wagtail also allowed me to create custom mixed content blocks (known as Streamfields) that can be reused across the site.&lt;/li&gt;
  &lt;li&gt;Using Tailwind minimized the risk of conflicting styles in my CSS and made it easier to debug in the DevTools Inspector. I also didn’t have to switch between HTML and CSS files while I was developing or think about how to name my CSS classes.&lt;/li&gt;
  &lt;li&gt;With the &lt;a href=&quot;https://fly.io/&quot;&gt;Fly.io&lt;/a&gt; CLI I could create and launch an app on Fly from my terminal. This combined with a GitHub Action made deploying to the staging environment for the site really smooth.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; Biggest challenges 🚨 &lt;/h2&gt;
&lt;p&gt;There were, of course, bugs and challenges throughout the project:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;One of the things I struggled with the most was working with Django migration files. These files contain the SQL that Django needs to create, update or delete database tables. I occasionally found that the files conflicted with one another or that they had become out of sync with the state of my local database. To debug this I learnt a lot about SQL and how Django keeps track of migrations.&lt;/li&gt;
  &lt;li&gt;I used the &lt;a href=&quot;https://turbo.hotwired.dev/&quot;&gt;Turbo&lt;/a&gt; for page transitions within the site but this also prevented the browser from loading any JavaScript that was not within a Stimulus controller without a full refresh. To fix this I recreated the JavaScript behaviour I wanted for the navbar from within a Stimulus controller ensuring it would work in conjunction with Turbo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; Future improvements 🔮 &lt;/h2&gt;
&lt;p&gt;Although my full-time work on this project has come to an end there are some improvements I would like to make in the future. One of these is to theme the CMS admin interface with the Common Knowledge brand colours. I would also like to add an option for the visitor to select a colour scheme that provides a higher contrast than the default. Lastly, there are definitely performance improvements I can make by replacing jpeg images with WebP formats and caching static content.&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Sat, 25 Mar 2023 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/working-on-the-new-common-knowledge-website/</guid>
    </item>
    <item>
      <title>Month notes - February</title>
      <link>https://example.com/month-notes-february/</link>
      <description>&lt;article&gt;
&lt;h1&gt; Notes from February &lt;/h1&gt;
&lt;p&gt;Wrapping up the Common Knowledge website project 🎁 Working on building a CI/CD pipeline with WordPress and Bedock 🔧 Learning more about Python 🐍&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1643446757604-c2b7c45c45dc?ixlib=rb-4.0.3&amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;auto=format&amp;fit=crop&amp;w=928&amp;q=80&quot; alt=&quot;Behnam Norouzi Photo&quot; /&gt;
&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@behy_studio?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Behnam Norouzi&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/hDuNk0ubnAw?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt; What I’ve been working on &lt;/h2&gt;
&lt;p&gt;I’ve been wrapping up my work on the new &lt;a href=&quot;https://commonknowledge.coop/&quot;&gt;Common Knowledge website&lt;/a&gt; with tasks like integrating &lt;a href=&quot;https://posthog.com/&quot;&gt;PostHog&lt;/a&gt; for product analytics, switching the domain over from the staging site to production and fixing some bugs that came out of the QA process. I also set up a &lt;a href=&quot;https://roots.io/bedrock/&quot;&gt;Bedrock&lt;/a&gt; sandbox site to test integrating an existing multisite WordPress installation with a modern CI/CD process and version control.&lt;/p&gt;
&lt;h2&gt; What I’ve been learning &lt;/h2&gt;
&lt;p&gt;This month I’ve been learning how to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;add &lt;a href=&quot;https://kraftner.com/en/blog/handling-authentication-with-composer-and-private-github-repositories/&quot;&gt;private GitHub repositories&lt;/a&gt; as dependencies in Composer&lt;/li&gt;
  &lt;li&gt;use &lt;a href=&quot;https://github.com/tscanlin/tocbot&quot;&gt;Tocbot&lt;/a&gt; to build a table of contents from headings in an HTML document&lt;/li&gt;
  &lt;li&gt;create &lt;a href=&quot;https://docs.djangoproject.com/en/4.1/howto/custom-template-tags/&quot;&gt;custom template tags and filters&lt;/a&gt; in Django&lt;/li&gt;
  &lt;li&gt;use &lt;a href=&quot;https://stedolan.github.io/jq/&quot;&gt;jq&lt;/a&gt; to slice, filter, map and transform JSON data&lt;/li&gt;
  &lt;li&gt;use a &lt;a href=&quot;https://realpython.com/python-namedtuple/&quot;&gt;named tuple&lt;/a&gt; in Python to create tuple subclasses with named fields&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; What’s next &lt;/h2&gt;
&lt;p&gt;In March I’ll be continuing the migration of the 350.org WordPress digital estate over to Bedrock. I’ll be picking up support tickets on projects like &lt;a href=&quot;https://atlas.smartforests.net/en-gb/&quot;&gt;Smart Forests&lt;/a&gt;, the &lt;a href=&quot;https://leftbookclub.com/&quot;&gt;Left Book Club&lt;/a&gt; and the &lt;a href=&quot;https://in-deep-water.vercel.app/&quot;&gt;In Deep Water Report&lt;/a&gt;. I’ll also be doing a deep dive into Next.js, React and TypeScript to build on my knowledge from the Founders and Coders curriculum.&lt;/p&gt;
&lt;h2&gt; Interesting links &lt;/h2&gt;
&lt;p&gt;These are some interesting links that I’ve come across this month:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://css-weekly.com/&quot;&gt;CSS Weekly&lt;/a&gt; is a website that provides a weekly roundup of CSS related news, articles, tutorials, and resources.&lt;/li&gt;
  &lt;li&gt;Learn how to make &lt;a href=&quot;https://web.dev/one-line-layouts/&quot;&gt;ten modern layouts&lt;/a&gt; with just one of line of CSS each&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://12factor.net/&quot;&gt;12factor.net&lt;/a&gt; is a website that describes a methodology for building applications that are scalable, maintainable, and resilient&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://arc.net/&quot;&gt;The Arc Browser&lt;/a&gt; wants to change the way we view the web&lt;/li&gt;
  &lt;li&gt;Developer Stefan Judis shares &lt;a href=&quot;https://www.stefanjudis.com/blog/vs-code-extensions-to-ease-navigating-code/&quot;&gt;three VS code extensions&lt;/a&gt; that help with navigating code&lt;/li&gt;
&lt;/ul&gt;
&lt;/article&gt;
</description>
      <pubDate>Sun, 12 Mar 2023 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/month-notes-february/</guid>
    </item>
    <item>
      <title>Month notes - January</title>
      <link>https://example.com/month-notes%20-january/</link>
      <description>&lt;article&gt;
  &lt;h1&gt;Notes from January&lt;/h1&gt;
  &lt;p&gt;🚧 Building the new Common Knowledge website. ✍️ Writing a project report for my apprenticeship. 📝 Writing technical notes each week of the project.&lt;/p&gt;
  &lt;img src=&quot;https://images.unsplash.com/photo-1577863231392-b5de256c3310?ixlib=rb-4.0.3&amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;auto=format&amp;fit=crop&amp;w=1770&amp;q=80&quot; alt=&quot;Project Workspace&quot; /&gt;
  &lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@glencarrie?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Glen Carrie&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/TGeFx4x4NHU?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
  &lt;h2&gt;What I’ve been working on&lt;/h2&gt;
  &lt;p&gt;This month has been dedicated to my final project for my apprenticeship - a rebuild of the &lt;a href=&quot;https://alpha.commonknowledge.coop/&quot; target=&quot;_blank&quot;&gt;Common Knowledge website&lt;/a&gt;. Working from designs created in Figma (by our co-op designer Gemma) I have created a CMS in the Django based framework Wagtail. I have also built custom HTML templates and a CSS theme with Tailwind. I’ve written notes from each week of the project summarizing my main learnings which can be viewed &lt;a href=&quot;https://alpha.commonknowledge.coop/writing/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  &lt;h2&gt;What I’ve been learning&lt;/h2&gt;
  &lt;p&gt;This month I&#39;ve been learning how to:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;build custom Page models and StreamField blocks with Django and Wagtail&lt;/li&gt;
    &lt;li&gt;write database queries with the Django ORM&lt;/li&gt;
    &lt;li&gt;write end-to-end tests with Cypress and unit tests with Pytest&lt;/li&gt;
    &lt;li&gt;use the Stimulus JavaScript framework with Django&lt;/li&gt;
    &lt;li&gt;use the Flowbite library for UI components&lt;/li&gt;
    &lt;li&gt;set up a staging site on Fly.io&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2&gt;What’s next&lt;/h2&gt;
  &lt;p&gt;In February I’ll be moving onto other project work with Common Knowledge. I’ll also be attending two interviews with the apprenticeship assessors.&lt;/p&gt;
  &lt;h2&gt;Interesting links&lt;/h2&gt;
  &lt;p&gt;These are some interesting links that I’ve come across this month:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Quincy Larson, the Founder of Free Code Camp, has published a &lt;a href=&quot;https://www.freecodecamp.org/news/learn-to-code-book/&quot; target=&quot;_blank&quot;&gt;book-length guide to learning to code for free&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;The &lt;a href=&quot;https://2022.stateofjs.com/en-US/&quot; target=&quot;_blank&quot;&gt;2022 State of JS&lt;/a&gt; survey identifies upcoming trends in web development to help developers make technical choices&lt;/li&gt;
    &lt;li&gt;Generate fluid typography code snippets using the CSS clamp function with this &lt;a href=&quot;https://modern-fluid-typography.vercel.app/&quot; target=&quot;_blank&quot;&gt;app&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;The &lt;a href=&quot;https://wdrl.info/&quot; target=&quot;_blank&quot;&gt;Web Development Reading List&lt;/a&gt; curates the best and latest articles on HTML, CSS, JavaScript, and PHP&lt;/li&gt;
  &lt;/ul&gt;
&lt;/article&gt;
</description>
      <pubDate>Sun, 29 Jan 2023 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/month-notes%20-january/</guid>
    </item>
    <item>
      <title>2022 - year in review</title>
      <link>https://example.com/2022-year-in-review/</link>
      <description>&lt;article&gt;
&lt;p&gt;Since I’ve been writing monthly round ups recently I thought it made sense to review 2022 in December. This time last year I had just finished the Founders and Coders full time course and was about to start work full time at Common Knowledge. I’m really proud of what I’ve achieved in my first year working as a developer. Below are some of the highlights of my year and the challenges.&lt;/p&gt;
&lt;h1&gt; What I’ve been doing ⚙️ &lt;/h1&gt;
&lt;p&gt;Since January 2022 I’ve been an apprentice software engineer at &lt;a href=&quot;https://commonknowledge.coop/&quot;&gt;Common Knowledge&lt;/a&gt; which is a not for profit worker co-op that works with a range of progressive organizations.
I began by making small contributions to projects such as adding an email sign up form and progressed to making a one-page holding site for co-op client Future Natures. As the year has gone on I’ve taken on increasing responsibility from implementing features on the &lt;a href=&quot;https://futurenatures.org/&quot;&gt;Future Natures website&lt;/a&gt; redesign to coding parts of the new &lt;a href=&quot;https://theworldtransformed.org/&quot;&gt;The World Transformed site&lt;/a&gt;.
Right now I’m building the next version of the &lt;a href=&quot;https://alpha.commonknowledge.coop/&quot;&gt;Common Knowledge website&lt;/a&gt; and documenting my progress &lt;a href=&quot;https://alpha.commonknowledge.coop/writing/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1637769270420-e02b7419a721?ixlib=rb-4.0.3&amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;auto=format&amp;fit=crop&amp;w=1770&amp;q=80&quot; alt=&quot;2022 lightpainted with sparklers&quot; /&gt;
&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@mokngr?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Moritz Knöringer&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/LPj8vt3EoXE?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt; What I’ve learnt 🎓 &lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.foundersandcoders.com/&quot;&gt;Founders and Coders&lt;/a&gt; curriculum was JavaScript based but Common Knowledge also have a lot of projects in Wagtail and WordPress. As a result I’ve had the chance to learn the basics of Python and PHP. I understand more now about back end vs front end development and the different types of application architecture. I’ve gotten more familiar with CSS frameworks like Tailwind and Bootstrap and used JavaScript frameworks like &lt;a href=&quot;https://stimulus.hotwired.dev/&quot;&gt;Stimulus&lt;/a&gt;. I’ve practiced using Docker containers; writing unit and end-to-end tests and setting up (and deploying to) staging and production environments.&lt;/p&gt;
&lt;h2&gt; Challenges 🚨 &lt;/h2&gt;
&lt;p&gt;Learning to code is full of challenges as there are always unexpected errors or things you hadn’t considered. It was difficult, especially at the beginning of the year, to read and write code in Python and PHP. Trying to absorb so much information on the job this year has meant some great highs and some frustrating lows. I’m definitely more persistent when I’m debugging now and I have more confidence when I approach a problem. I’ve had to accept that software development is not a linear process and that time spent puzzling over things is not wasted.&lt;/p&gt;
&lt;h2&gt; What I’m hoping for in 2023 🗓 &lt;/h2&gt;
&lt;p&gt;In early 2023 I’m going to be submitting my final project report for my apprenticeship and going through two assessment interviews. I’ll hopefully receive my result for the &lt;a href=&quot;https://www.instituteforapprenticeships.org/apprenticeship-standards/software-developer-v1-1&quot;&gt;BCS L4 Software Developer qualification&lt;/a&gt; by the end of March. After that I’m hoping for the same rate of growth right up to 2024 💫&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Thu, 29 Dec 2022 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/2022-year-in-review/</guid>
    </item>
    <item>
      <title>Month notes - November</title>
      <link>https://example.com/month-notes-november/</link>
      <description>&lt;article&gt;
&lt;h1&gt; Notes from November &lt;/h1&gt;
&lt;p&gt;🌍 Working on &lt;a href=&quot;https://futurenatures.org/&quot;&gt;FutureNatures&lt;/a&gt;, &lt;a href=&quot;https://www.stop-watch.org/&quot;&gt;StopWatch&lt;/a&gt;, and &lt;a href=&quot;https://www.hotosm.org/&quot;&gt;Humanitarian OpenStreetMap&lt;/a&gt; for Common Knowledge ✏️ Redesigning my personal website in WordPress 🗣 Practicing mock assessments for my apprenticeship portfolio review.&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1586892477838-2b96e85e0f96?ixlib=rb-4.0.3&amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;auto=format&amp;fit=crop&amp;w=1718&amp;q=80&quot; alt=&quot;Kelly Sikkema Photo&quot; /&gt;
&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@kellysikkema?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Kelly Sikkema&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/s/photos/agile?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt; What I’ve been working on &lt;/h2&gt;
&lt;p&gt;This month has been full of a few different projects.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;I’ve started to build a new personal website in WordPress&lt;/li&gt;
  &lt;li&gt;I picked up some supporting work for the &lt;a href=&quot;https://futurenatures.org/&quot;&gt;FutureNatures&lt;/a&gt; website debugging some issues with a search and filter plugin&lt;/li&gt;
  &lt;li&gt;Added the option for embedding &lt;a href=&quot;https://www.shinyapps.io/&quot;&gt;Shiny apps&lt;/a&gt; into pages on the &lt;a href=&quot;https://www.stop-watch.org/&quot;&gt;StopWatch&lt;/a&gt; site&lt;/li&gt;
  &lt;li&gt;Common Knowledge is also working on a big redesign of the &lt;a href=&quot;https://www.hotosm.org/&quot;&gt;Humanitarian OpenStreetMap&lt;/a&gt; website, and I’ve been helping there with some UI components like a carousel slide and a newsletter sign up&lt;/li&gt;
  &lt;li&gt;With our Project Manager I’ve been planning and scoping the new Common Knowledge website - details below&lt;/li&gt;
  &lt;li&gt;I took part in mock interviews with Founders and Coders to prepare for my assessed portfolio review in the near future&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; What I’ve been learning &lt;/h2&gt;
&lt;p&gt;Over the past month I’ve learnt how to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;use &lt;a href=&quot;https://flowbite.com/&quot;&gt;Flowbite&lt;/a&gt; to build UI components with Tailwind CSS in Django templates&lt;/li&gt;
  &lt;li&gt;use &lt;code&gt;meta_query&lt;/code&gt; inside &lt;code&gt;WP_Query&lt;/code&gt; to order and filter by custom meta fields&lt;/li&gt;
  &lt;li&gt;use the &lt;a href=&quot;https://stimulus-carousel.stimulus-components.com/&quot;&gt;Stimulus Carousel&lt;/a&gt; package (built on top of Swiper.js) to create a responsive carousel component. One really cool thing about this is the customisable SwiperOptions. In this case, I used them to determine the number of slides displayed based on screen size&lt;/li&gt;
  &lt;li&gt;create a custom EmbedFinder class in a Django application&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; What’s next &lt;/h2&gt;
&lt;p&gt;In December I’ll be working exclusively on my final project which will be a redesign and rebuild of the Common Knowledge website. This project and its documentation will form the second half of my grade for my apprenticeship. I’ll be the primary developer on this project which involves migrating the current Gatsby site with content in Markdown to the Django Wagtail CMS.
I’ll be aiming to make a maintainable, performant and accessible website that will serve the business needs of Common Knowledge.&lt;/p&gt;
&lt;h2&gt; Interesting links &lt;/h2&gt;
&lt;p&gt;These are some interesting links that I’ve come across this month.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/785619431629077634&quot;&gt;Figma Tailwind CSS&lt;/a&gt; - this plugin converts a Figma design directly into a Tailwind theme.js file for use in your projects&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/storybook-django&quot;&gt;Storybook for Django&lt;/a&gt; - this is a UI development environment for Django components. Create and test UI components in isolation from your Django views.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://alistapart.com/&quot;&gt;A List Apart&lt;/a&gt; - a design magazine on all aspects of web design with a special focus on web standards and best practices&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hemingwayapp.com/&quot;&gt;Hemmingway App&lt;/a&gt; - this app identifies lengthy, complex sentences and other mistakes to make your writing clearer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/article&gt;
</description>
      <pubDate>Fri, 25 Nov 2022 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/month-notes-november/</guid>
    </item>
    <item>
      <title>Month notes - October</title>
      <link>https://example.com/month-notes-october/</link>
      <description>&lt;article&gt;
&lt;h1&gt; Notes from October &lt;/h1&gt;
&lt;p&gt;In this post, I’m experimenting with a different format for my blog. Month notes are a format where I can share what I’ve been working on over the month and some of the things I’m learning. I’m hoping it will be useful for me to look back on as a learning diary and also for anyone wondering what the day-to-day life of an apprentice developer is like.&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1631092863845-74abb29404b2?ixlib=rb-4.0.3&amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;auto=format&amp;fit=crop&amp;w=2671&amp;q=80&quot; alt=&quot;James Kemp Photo&quot; /&gt;
&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@jckemp?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;James Kemp&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/s/photos/october-software-development?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt; What I’ve been working on &lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;I’m finishing up my portfolio to submit for the apprenticeship assessment process. This will be a summary of all my work for my employer (Common Knowledge) so far. Read more about the software developer apprenticeship and how it’s delivered at Founders and Coders at &lt;a href=&quot;https://www.foundersandcoders.com/apprenticeship&quot;&gt;https://www.foundersandcoders.com/apprenticeship&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;I’ve started work on a redesigned WordPress website for Common Knowledge client The Architecture Lobby. We are still in the design phase of the project so I’ve been working on establishing the infrastructure like the GitHub repo, getting the site running smoothly locally, and setting up continuous integration&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; What I’ve been learning &lt;/h2&gt;
&lt;p&gt;Over the past month I’ve learnt how to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;install Bedrock (a modern WordPress boilerplate) and add seed content from an existing theme&lt;/li&gt;
  &lt;li&gt;use PhPMyAdmin and SQL to work with a WordPress database&lt;/li&gt;
  &lt;li&gt;create custom post types in WordPress&lt;/li&gt;
  &lt;li&gt;use the Carbon Fields plugin to create custom metadata fields on WordPress posts&lt;/li&gt;
  &lt;li&gt;display custom metadata in WordPress template files&lt;/li&gt;
  &lt;li&gt;use rsync to synchronize files between GitHub and a web host and how to automate this in a GitHub action for continuous integration&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; What’s next &lt;/h2&gt;
&lt;p&gt;Soon I’ll be:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Discussing my portfolio with my apprenticeship assessor&lt;/li&gt;
  &lt;li&gt;Building out The Architecture Lobby site based on Figma files from our co-op designer&lt;/li&gt;
  &lt;li&gt;Starting discovery work on a WordPress upgrade for a book publisher and whether we can use WooCommerce integrated with ONIX to replace their existing solution&lt;/li&gt;
  &lt;li&gt;Starting work on my final apprenticeship project - a redesign of the Common Knowledge website&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; Interesting links &lt;/h2&gt;
&lt;p&gt;These are some interesting links that I’ve come across this month:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Run your GitHub Actions locally with this utility &lt;a href=&quot;https://github.com/nektos/act&quot;&gt;https://github.com/nektos/act&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Find out how big that npm package really is &lt;a href=&quot;https://bundlephobia.com/&quot;&gt;https://bundlephobia.com/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Chris Coyier (from CSS Tricks) explains how the web is good now &lt;a href=&quot;https://youtu.be/F18oy48jkrk&quot;&gt;https://youtu.be/F18oy48jkrk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Documentation for shell scripts 🐚 &lt;a href=&quot;https://explainshell.com/&quot;&gt;https://explainshell.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;There’s a name for that illustration style you see everywhere! &lt;a href=&quot;https://t-artmagazine.com/what-is-corporate-memphis-and-why-is-it-everywhere/&quot;&gt;https://t-artmagazine.com/what-is-corporate-memphis-and-why-is-it-everywhere/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/article&gt;
</description>
      <pubDate>Mon, 31 Oct 2022 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/month-notes-october/</guid>
    </item>
    <item>
      <title>Tips for reading code (for new developers)</title>
      <link>https://example.com/tips-for-reading-code-for-new-developers/</link>
      <description>&lt;article&gt;
&lt;h1&gt; Tips for reading code (for new developers) &lt;/h1&gt;
&lt;p&gt;One of the most important transitions new developers need to make is from working on their own projects to existing codebases within larger teams. Most often working as a developer involves extending and maintaining code that’s already been written. This means that being able to read other people’s code is an important skill. Looking at code and trying to understand it can often be difficult and intimidating but there are ways to make the process easier.&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1474377207190-a7d8b3334068?ixlib=rb-1.2.1&amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;auto=format&amp;fit=crop&amp;w=2670&amp;q=80&quot; alt=&quot;Photo by Oli Dale on Unsplash&quot; /&gt;
&lt;h2&gt; Read the documentation 📖 &lt;/h2&gt;
&lt;p&gt;If there is documentation available for a project it’s important to read it. Established frameworks, libraries and APIs will usually have well maintained and extensive documentation to help the millions of developers who use them. Even on smaller projects READMEs often contain set up instructions and list the technologies and dependencies used.&lt;/p&gt;
&lt;h2&gt; Download the code and run it locally 🚂 &lt;/h2&gt;
&lt;p&gt;To understand how code works there’s nothing better than downloading and running it locally. It’s helpful to start with a small piece of the code that you understand and trace it carefully back through the application. Examine each unknown part in the context of what you already know and gradually the whole picture will start to appear.&lt;/p&gt;
&lt;h2&gt; Use debugging tools 🔍 &lt;/h2&gt;
&lt;p&gt;When you run into an error or something you don’t understand in the code you can use debugging tools like VS Code Debugger or Browser Dev Tools. Set breakpoints in the debugger to inspect variables as you run the programme. Viewing computed styles using the CSS panel in Dev Tools is a really helpful way of seeing which CSS properties are being applied and how by the browser.&lt;/p&gt;
&lt;h2&gt; Take a higher level approach ☁️ &lt;/h2&gt;
&lt;p&gt;Stepping through the code is important but you also need to get a sense of how the whole project fits together. Is there a database and if so what type? Does the project have a front end and back end? How is it deployed and hosted? Where is the business logic contained? Try talking through this out loud or drawing it out on a piece of paper.&lt;/p&gt;
&lt;h2&gt; Read comments, commit messages, GitHub discussions and code reviews 📜 &lt;/h2&gt;
&lt;p&gt;Comments can clarify what code is intended to do and why the developer(s) may have made certain choices over others. Commit messages record the evolution of the project and the scope and purpose of changes. Developers working on a project will often discuss their approaches in issues and when reviewing each other&#39;s PRs.&lt;/p&gt;
&lt;h2&gt; Look at the tests 🧪 &lt;/h2&gt;
&lt;p&gt;Tests are another indication of the purpose of a programme. Test suites often have statements that assert what a feature does for example the below in the popular testing library Cypress:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
describe(&quot;Testing the application&quot;, function() {
    it(&quot;should login with username and password&quot;, function() {

        // visit the test page
        cy.visit(&#39;https://demo.com/&#39;)

        cy.get(&#39;#username&#39;).type(&#39;test123&#39;)

        cy.get(&#39;#password&#39;).type(&#39;123&#39;)

        cy.get(&#39;#log-in&#39;).click();

        cy.url().should(&#39;include&#39;, &#39;/app&#39;)

    });
});
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Edge cases used in tests show the boundaries of what the code is expected to be able to deal with. Rarely is everything in a codebase tested so they can point you towards the most critical parts.&lt;/p&gt;
&lt;p&gt;The best way to get better at reading code is practice. Expose yourself to high quality code samples regularly whether at work or in open source projects. Reading code will help you write better and more maintainable code yourself.&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Fri, 16 Sep 2022 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/tips-for-reading-code-for-new-developers/</guid>
    </item>
    <item>
      <title>My experience as an apprentice at Common Knowledge</title>
      <link>https://example.com/my-experience-as-a-software-engineer-apprentice/</link>
      <description>&lt;article&gt;
&lt;p&gt;This blog was originally posted on the &lt;a href=&quot;https://commonknowledge.coop/writing/common-knowledge-apprenticeship&quot;&gt;Common Knowledge website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’m Anna and I’m a software engineering apprentice at Common Knowledge. I thought it might be interesting to write about my experiences as a software engineering apprentice since September 2021.&lt;/p&gt;
&lt;p&gt;I used to work in book publishing but about 3 years ago I started learning to code in my spare time. I started with just a few minutes a day and taught myself the basics of HTML, CSS, and JavaScript.&lt;/p&gt;
&lt;p&gt;I was attracted to coding as a way of solving real-life problems. It felt like an almost magical power to be able to think of something and then create it in code.&lt;/p&gt;
&lt;p&gt;Once I felt like this was something I wanted to do full-time I started looking at software development bootcamps in London.&lt;/p&gt;
&lt;p&gt;I decided on Founders and Coders because&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Tuition was free&lt;/li&gt;
  &lt;li&gt;The apprenticeship route was available&lt;/li&gt;
  &lt;li&gt;The entry requirements were rigorous&lt;/li&gt;
  &lt;li&gt;It had good reviews within the industry&lt;/li&gt;
  &lt;li&gt;I liked the emphasis on inclusion&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; What is a software development apprenticeship? &lt;/h2&gt;
&lt;p&gt;The software developer apprenticeship (Level 4), as delivered by Founders and Coders, is split into three parts. It starts with sessions delivered in the evenings focusing on web development skills and employability. This was the most challenging part of the program for me as I was still working full time in my publishing job.&lt;/p&gt;
&lt;p&gt;I then got the opportunity to meet the lovely people at Common Knowledge. I really identified with their mission and they were so friendly during the interview that I was thrilled when they offered me an apprenticeship.&lt;/p&gt;
&lt;p&gt;The next stage in the process was 12 weeks of full-time study of Javascript, Node.js, and React. This period taught me about working closely with other people (which was even more difficult over Zoom) and getting comfortable with not knowing the answer.&lt;/p&gt;
&lt;img src=&quot;https://practical-swanson-368627.netlify.app/static/09510c0dfe05e2955d569ddd1284077c/18872/cohort.png&quot; alt=&quot;A Zoom screen showing a number of people dressed in Halloween costumes&quot; /&gt;
&lt;p&gt;My cohort dressed up for Halloween&lt;/p&gt;
&lt;p&gt;Finally in January 2022 I joined Common Knowledge full time and started writing code for real client projects. I appreciated that I could get stuck in straight away and they gave me the space to try things myself and make mistakes.&lt;/p&gt;
&lt;p&gt;For me, the apprenticeship was a great opportunity. It allowed me to get a job before I started retraining and significantly reduced the financial risk. It has set me up with real-world experience as well as a recognized qualification.&lt;/p&gt;
&lt;h2&gt; What have been the highlights of the apprenticeship so far? &lt;/h2&gt;
&lt;p&gt;I’m proud of the work I’ve done on &lt;a href=&quot;http://futurenatures.org/&quot;&gt;FutureNatures.org&lt;/a&gt;. The site is built in WordPress with the Gutenberg FSE (Full Site Editor). We’ve used existing and custom blocks and post types for the different types of content that the site needs. We have written custom CSS for the theme that was developed by our brilliant designer Gemma.&lt;/p&gt;
&lt;img src=&quot;https://practical-swanson-368627.netlify.app/static/29fa19e3c3050bdf9e1646b3c922b36c/aa440/FutureNatures.png&quot; alt=&quot;An image displaying the homepage of FutureNatures.org&quot; /&gt;
&lt;p&gt;I’ve had a lot of exposure to new frameworks and software development approaches since I started at Common Knowledge. It’s expanded my horizons and made me excited about the possibilities for my future learning and career.&lt;/p&gt;
&lt;p&gt;I’ve also met some very cool people doing things I admire both within the co-op and within the larger movement that CK operates in. This is the kind of network I want to be embedded within for the rest of my career.&lt;/p&gt;
&lt;p&gt;I’ve enjoyed getting an insight into how the co-op is run. Working within a co-op there is a real feeling of solidarity and mutual care.&lt;/p&gt;
&lt;h2&gt; And the challenges… &lt;/h2&gt;
&lt;p&gt;There have also been challenges during the apprenticeship. In particular, it has been difficult to start again in a new industry. I had a few years of experience in publishing so I was used to having a certain degree of competence.&lt;/p&gt;
&lt;p&gt;Most of the time I don’t understand what I’m doing and I’m constantly pushing at the boundaries of my knowledge. This is the best way to learn but it doesn’t feel comfortable most of the time. My colleagues have told me that this is what being a developer is about and that you never stop learning. Common Knowledge has been great, however, at guiding me through this, and Founders and Coders have offered ongoing support.&lt;/p&gt;
&lt;p&gt;I really hope that this post has been useful for people curious about getting into software development via the apprenticeship route. I’m hoping to finish my assessments and graduate from the program by the end of 2022.&lt;/p&gt;
&lt;p&gt;You can follow my progress on &lt;a href=&quot;https://twitter.com/AnnaThereseCu&quot;&gt;Twitter&lt;/a&gt;. To find out more about Founders and Coders and apply go to &lt;a href=&quot;https://www.foundersandcoders.com/&quot;&gt;https://www.foundersandcoders.com/&lt;/a&gt;&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Wed, 17 Aug 2022 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/my-experience-as-a-software-engineer-apprentice/</guid>
    </item>
    <item>
      <title>What is a headless CMS?</title>
      <link>https://example.com/what-is-a-headless-cms/</link>
      <description>&lt;article&gt;
&lt;h1&gt; What is a CMS? &lt;/h1&gt;
&lt;p&gt;A CMS or content management system is an application that helps users create, manage and modify content on a website.
Most CMS are designed to be easy to use without knowing how to code. They typically have design templates to choose from and offer extensions and add-ons. A good CMS platform will allow you to easily import and export your content.
Some commonly used CMS are WordPress, Django, Drupal, Wix and Joomla.&lt;/p&gt;
&lt;img src=&quot;https://practical-swanson-368627.netlify.app/static/2393cfbc54008805e68c09e98930ba8f/77672/undraw_Content_team_re_6rlg.png&quot; alt=&quot;Illustration of a Content Team&quot; /&gt;
&lt;h2&gt; Headless CMS vs Traditional CMS &lt;/h2&gt;
&lt;p&gt;A traditional CMS has two layers:
A presentation layer which determines how your content is displayed in the browser
A database where the content is structured and stored.&lt;/p&gt;
&lt;p&gt;This type of tightly connected structure is called “coupled” and it makes structural changes almost impossible without knowing HTML and CSS. The presentation layer&lt;/p&gt;
&lt;p&gt;A Headless CMS separates the presentation layer (known as the “Head”) from the database with communication between the two happening via an API (application programming interface).&lt;/p&gt;
&lt;h2&gt; Headless API &lt;/h2&gt;
&lt;p&gt;Some traditional CMS platforms such as WordPress have developed their own API which allows users to apply a different language or framework on the frontend. This means that you get the best of this free and powerful CMS without being tied to its standard way of presenting content.
WordPress has also adopted the Gutenberg editor which is written in a popular frontend framework called React.&lt;/p&gt;
&lt;h2&gt; Content infrastructure &lt;/h2&gt;
&lt;p&gt;Content infrastructure is a type of headless CMS but instead of arranging content around website pages it creates a content model. This model will break down the content into its component parts such as a newsletter sign-up, a headline or article copy. It will be collected into a centralized hub that can have different outputs such as a website, an app or internal collaboration and communication tools.&lt;/p&gt;
&lt;h2&gt; Why use a Headless CMS? &lt;/h2&gt;
&lt;p&gt;There are many advantages to using a Headless CMS including flexibility, scalability and enhanced security as the presentation layer is not connected to the database. This approach can be seen as the best of both worlds: allowing you to make the most of mature platforms like WordPress and Django with flashier options on the frontend.&lt;/p&gt;
&lt;p&gt;There are even further benefits to content infrastructure which reduces content duplication and makes collaboration easier.&lt;/p&gt;
&lt;p&gt;Read Contentful&#39;s &lt;a href=&quot;https://www.contentful.com/r/knowledgebase/what-is-headless-cms/&quot;&gt;Headless CMS explained in 1 minute&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Get a list of open source (free-to-use) CMS from &lt;a href=&quot;https://geekflare.com/open-source-headless-cms/&quot;&gt;Geekflare&lt;/a&gt;&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Fri, 24 Jun 2022 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/what-is-a-headless-cms/</guid>
    </item>
    <item>
      <title>Advice for learning how to code</title>
      <link>https://example.com/advice-for-learning-how-to-code/</link>
      <description>&lt;article&gt;
&lt;h1&gt; Advice for learning how to code &lt;/h1&gt;
&lt;p&gt;When I was working in publishing I started learning to code by studying for 20 minutes each day. After about 18 months of doing this I did a bootcamp and got an apprenticeship in tech. This post gives some tips I have for anyone learning to code - especially alongside a full time job or other responsibilities.&lt;/p&gt;
&lt;img src=&quot;https://images.unsplash.com/photo-1494599948593-3dafe8338d71?ixlib=rb-1.2.1&amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;auto=format&amp;fit=crop&amp;w=2670&amp;q=80&quot; alt=&quot;Advice for learning how to code&quot; /&gt;
&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@hellokellybrito&quot;&gt;J. Kelly Brito&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/PeUJyoylfe4&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt; Which language should I learn? &lt;/h2&gt;
&lt;p&gt;Most people start with HTML, CSS and JavaScript and these are still essential for working in web development. Languages like PHP, Python and Ruby are user friendly and general purpose. If you want to be a mobile app developer you should look at Kotlin for Android and Swift for iOS. Rust and Go are newer languages that are loved by developers and could be a good bet for the future.&lt;/p&gt;
&lt;h2&gt; Practice spaced repetition and active recall &lt;/h2&gt;
&lt;p&gt;Research has shown that some of the best ways to learn any new skill are spaced repetition and active recall.&lt;/p&gt;
&lt;p&gt;Spaced repetition involves reviewing and recalling topics at optimally spaced intervals. This technique interrupts the brain’s natural forgetting curve allowing the information to be stored in long term memory. It’s difficult to work this out on your own so I use &lt;a href=&quot;https://www.executeprogram.com/&quot;&gt;Execute Programme&lt;/a&gt; which also has the added benefit of getting me to actively recall the information.&lt;/p&gt;
&lt;p&gt;Active recall means testing yourself to see how well you’ve understood something at every stage of your revision. It’s actually the process of retrieving information that helps your brain form memories faster. This method is much more effective than passively reading an article or watching a YouTube video.&lt;/p&gt;
&lt;h2&gt; Learn underlying concepts &lt;/h2&gt;
&lt;p&gt;It’s helpful to understand some fundamental concepts that underpin most languages and software projects. Variables, loops, objects and functions are ideas that you will come across time and time again. Understanding a bit about &lt;a href=&quot;https://www.freecodecamp.org/news/big-o-notation-why-it-matters-and-why-it-doesnt-1674cfa8a23c/&quot;&gt;Big O notation&lt;/a&gt; could help you impress at interview. There are broadly three types of programming: function, object oriented and procedural. Knowing their strengths and weaknesses helps you make the right choice.&lt;/p&gt;
&lt;h2&gt; Build projects &lt;/h2&gt;
&lt;p&gt;You should be getting stuck into code quickly as you will learn the most from tinkering with it. Download the starter files for a YouTube tutorial and take it further by implementing new features. You could also create a clone of a popular site like Netflix or Instagram. Consider building a portfolio site and use it to host a blog where you write about what you are learning (like this one!)&lt;/p&gt;
&lt;h2&gt; Learn Git &lt;/h2&gt;
&lt;p&gt;Git the most widely used distributed version control system for software development. Regardless of what programming language you use, being familiar with Git is essential. You don’t need to know all the Git features and commands (most developers will never come across all of them) but you can learn the basics &lt;a href=&quot;https://www.freecodecamp.org/&quot;&gt;here&lt;/a&gt;. Git is most often used in conjunction with a service like GitHub, BitBucket or GitLab for hosting. Create a GitHub account and use it to show off your work.&lt;/p&gt;
&lt;p&gt;Obviously there is way more advice about learning to code than I can cover here. These are just my views and the tips I wish I’d followed from the start. If you are interested in reading more about my journey to becoming a developer you can do so &lt;a href=&quot;https://www.annacunnane.co.uk/blog/My%20journey%20to%20become%20a%20developer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For information about my bootcamp go to &lt;a href=&quot;https://www.foundersandcoders.com/&quot;&gt;Founders and Coders&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For online resources check out &lt;a href=&quot;https://www.freecodecamp.org/&quot;&gt;FreeCodeCamp&lt;/a&gt; and &lt;a href=&quot;https://scrimba.com/&quot;&gt;Scrimba&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Happy coding!&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Wed, 04 May 2022 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/advice-for-learning-how-to-code/</guid>
    </item>
    <item>
      <title>What is the WordPress Gutenberg editor?</title>
      <link>https://example.com/what-is-the-wordpress-gutenberg-editor/</link>
      <description>&lt;article&gt;
&lt;h1&gt; What is the WordPress Gutenberg editor? &lt;/h1&gt;
&lt;p&gt;WordPress is the most popular CMS in the world, and the Gutenberg editor is its most significant change since 2003. It was introduced in WordPress version 5.0, which came out in 2018, and it replaces the previous Tiny MCE editor with a block-based drag and drop interface.&lt;/p&gt;
&lt;p&gt;The Tiny MCE editor was not well-suited to creating modern multimedia-heavy websites. To add media content or other HTML elements, you would need to paste code directly into the content box. It was difficult to see your changes without toggling back and forth between the editor and the live site.&lt;/p&gt;
&lt;img src=&quot;https://practical-swanson-368627.netlify.app/static/060a72804f5142c7830a88e147e45236/cbfa4/MCE-editor.jpg&quot; alt=&quot;Tiny MCE Editor&quot; /&gt;
&lt;p&gt;Page builders like Elementor and Beaver came onto the market to allow non-coders to create complex layouts in WordPress. Gutenberg is a version of this built into the core of WordPress itself. To use it, you need to install the open-source WordPress software on a web host and choose or create your theme.&lt;/p&gt;
&lt;p&gt;All pages and posts built with Gutenberg consist of blocks. These can be text, different types of media, shortcodes, and even layout elements like columns. For a complete list, check out &lt;a href=&quot;https://gogutenberg.com/blocks/&quot; target=&quot;_blank&quot;&gt;https://gogutenberg.com/blocks/&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/Moggach/my-blog-site/master/src/posts/Gutenberg.gif&quot; alt=&quot;Gutenberg Editor in action&quot; /&gt;
&lt;p&gt;The Gutenberg editor enables you to (amongst many other things):&lt;/p&gt;
&lt;h2&gt; Drag and drop blocks onto a page &lt;/h2&gt;
&lt;p&gt;Adding content blocks to your design is as easy as point and click. Because the blocks are discrete chunks of content, it is easy to rearrange and swap them out. You can also see at a glance how all the elements of the page will work together.&lt;/p&gt;
&lt;h2&gt; Embed rich media content &lt;/h2&gt;
&lt;p&gt;Embed blocks allow you to insert content like video, audio, images, and social media content without having to use an iFrame. There is a generic embed block and specific ones for popular sites like YouTube or Twitch.&lt;/p&gt;
&lt;h2&gt; Reuse blocks &lt;/h2&gt;
&lt;p&gt;There may be pieces of content that you want to use several times across your site. With Gutenberg, you can create a block that is available for use on all pages. This avoids duplicating code and helps your design stay consistent.&lt;/p&gt;
&lt;p&gt;Gutenberg brings WordPress up to date with current trends in web development, and the WordPress REST API and WP GraphQL project allow its powerful CMS to be used with any front end framework.&lt;/p&gt;
&lt;p&gt;To read more about Gutenberg and to try it out, go to &lt;a href=&quot;https://wordpress.org/gutenberg/&quot; target=&quot;_blank&quot;&gt;https://wordpress.org/gutenberg/&lt;/a&gt;&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Sat, 09 Apr 2022 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/what-is-the-wordpress-gutenberg-editor/</guid>
    </item>
    <item>
      <title>5 Things I&#39;ve Learnt as an Apprentice Software Developer</title>
      <link>https://example.com/5-things-i&#39;ve-learnt-as-an-apprentice-software-developer/</link>
      <description>&lt;article&gt;
&lt;h1&gt; 5 Things I&#39;ve Learnt as an Apprentice Software Developer&lt;/h1&gt;
&lt;p&gt;I’ve been working as an apprentice software developer for a couple of months now and there are some things that I’ve learnt that I wanted to share. I hope that the below is useful to you if you are thinking about becoming developers or graduating from a bootcamp and going into your first job.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1461749280684-dccba630e2f6?ixlib=rb-1.2.1&amp;amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;w=1769&amp;amp;q=80&quot; alt=&quot;computer monitor showing php code&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@ilyapavlov?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Ilya Pavlov&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/s/photos/developers?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt; 1. Remember the basics and keep it simple &lt;/h2&gt;
&lt;p&gt;Before you learn a framework you need to learn the basics of the language at its core. Before you reach for React, for example, ask yourself if you could solve this problem with vanilla JS? Otherwise you will most likely overuse frameworks and try to make them do things they were not designed for. It also makes debugging much harder if you don’t understand why the code works the way it does.&lt;/p&gt;
&lt;h2&gt; 2. You will read far more code than you write &lt;/h2&gt;
&lt;p&gt;Once you get into a job you will be working on existing codebases most of the time. This is why you should try to write code that is clean and maintainable to make life easier for your future self and your colleagues. There are many approaches to this but some common advice includes commenting your code, refactoring to improve understandability and writing small classes and functions.&lt;/p&gt;
&lt;h2&gt; 3. Don’t get hung up on language choice &lt;/h2&gt;
&lt;p&gt;There are endless debates about the merits of different languages and approaches to writing software but don’t get lost in the weeds. I think it’s good to be pragmatic and start with the most popular (and well established) languages in your area. You can always write your side project in Kotlin, Coffeescript or similar.&lt;/p&gt;
&lt;h2&gt; 4. It’s better to ask for help (after a certain point) &lt;/h2&gt;
&lt;p&gt;It’s good to try to solve problems on your own but if you’re blocked it’s fine (and encouraged) to ask for help. Pair programming can make squashing bugs quicker and more fun. Taking a break can also make a difference as well as talking through the code out loud to an inanimate object (known as rubber ducking).&lt;/p&gt;
&lt;h2&gt; 5. You need to be constantly learning throughout your career &lt;/h2&gt;
&lt;p&gt;Programming languages, frameworks and environments are always updating. Continuous learning not only helps you stay relevant in the job market but can help you understand more deeply some aspect of the languages you use every day. As programmers we should always be wanting to find better ways of doing things.&lt;/p&gt;
&lt;p&gt;I’m very lucky to be on an apprenticeship provided by Founders and Coders and Common Knowledge. For more information about the FAC programme and how to apply go to &lt;a href=&quot;https://www.foundersandcoders.com/apply/&quot;&gt;https://www.foundersandcoders.com/apply/&lt;/a&gt;&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Thu, 10 Mar 2022 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/5-things-i&#39;ve-learnt-as-an-apprentice-software-developer/</guid>
    </item>
    <item>
      <title>How I made my blog</title>
      <link>https://example.com/how-I-made-my-blog/</link>
      <description>&lt;article&gt;
&lt;h1&gt; How I made my blog &lt;/h1&gt;
&lt;p&gt;When I decided to start blogging, I knew that I wanted to build the site myself. I chose to use the Gatsby framework as I had been learning JavaScript for a while and I already had a project built in React. Gatsby is an open source framework that helps you create a static website easily and quickly. &lt;a href=&quot;https://www.gatsbyjs.com/docs&quot; target=&quot;_blank&quot;&gt;The Gatsby docs&lt;/a&gt; have a tutorial that can get you started with a blog site within minutes. &lt;a href=&quot;https://www.gatsbyjs.com/starters/&quot; target=&quot;_blank&quot;&gt;The Gatsby Starters Library&lt;/a&gt; has templates for e-commerce, portfolio, blog, and other sites.&lt;/p&gt;
&lt;img src=&quot;https://practical-swanson-368627.netlify.app/static/bdeeab0cf4c73a7c49f26bb8a9cf0e81/8de58/Gatsby_site.png&quot; alt=&quot;Gatsby Site&quot; /&gt;
&lt;p&gt;To make the site, I followed this &lt;a href=&quot;https://youtu.be/8t0vNu2fCCM&quot; target=&quot;_blank&quot;&gt;YouTube tutorial&lt;/a&gt; closely. The creator, Andrew Mead, has more courses on the JavaScript ecosystem on his &lt;a href=&quot;https://mead.io/&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt;. I also had a lot of fun with the whole open source ecosystem around Gatsby, including the many plugins.&lt;/p&gt;
&lt;h2&gt; Challenges ⛰️ &lt;/h2&gt;
&lt;p&gt;There were many things I found difficult about the project.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;I struggled with the conceptual difference between components and pages. This meant I had code on my pages that should have been in components.&lt;/li&gt;
  &lt;li&gt;I used CSS modules, but there were still too many styles in the global scope. Remembering to write classNames in the JSX way was another headache.&lt;/li&gt;
  &lt;li&gt;Basically anything that didn’t follow the tutorial exactly. This taught me a lesson about understanding the code (and not simply copying it) before I tried to build on or debug it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; Things I like ❤️ &lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;I’m still pleased with how the site looks and performs. I like the minimal design, and Gatsby’s speed makes browsing pleasingly snappy.&lt;/li&gt;
  &lt;li&gt;It’s easy to add posts, and markdown is a distraction-free and intuitive writing experience.&lt;/li&gt;
  &lt;li&gt;It works well with &lt;a href=&quot;https://www.netlify.com/&quot; target=&quot;_blank&quot;&gt;Netlify&lt;/a&gt;, which is a super-efficient and easy-to-use hosting platform.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt; Things I want to add 🚧 &lt;/h2&gt;
&lt;p&gt;There are, of course, things I want to add to or improve about the site.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Security vulnerabilities are the most urgent. One drawback of the framework is that it has a bunch of dependencies that have to be maintained and, in some cases, replaced.&lt;/li&gt;
  &lt;li&gt;I would like to create a reusable sidebar component to abstract some of the site’s duplicated code.&lt;/li&gt;
  &lt;li&gt;It would be great to have pagination on the blog index page and set a maximum number of listings per page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I enjoyed developing with Gatsby, and I would make another site with the framework. I hope that I’ll have enough time soon to make the improvements I listed above. If you have any questions about the process, let me know on Twitter at &lt;a href=&quot;https://twitter.com/AnnaTherseCu&quot; target=&quot;_blank&quot;&gt;@MollyBloom1989&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Good luck with your projects!&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Sat, 19 Feb 2022 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/how-I-made-my-blog/</guid>
    </item>
    <item>
      <title>Looking back at Founders and Coders</title>
      <link>https://example.com/looking-back-at-founders-and-coders/</link>
      <description>&lt;article&gt;
  &lt;p&gt;This blog is a follow-up to &lt;a href=&quot;https://www.annacunnane.co.uk/blog/My%20journey%20to%20become%20a%20developer&quot; target=&quot;_blank&quot;&gt;My Journey to Becoming a Developer&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;In that post, I described how I’d come to apply to the Founders and Coders boot camp and make the switch to a new career.&lt;/p&gt;
  &lt;img src=&quot;https://practical-swanson-368627.netlify.app/static/09510c0dfe05e2955d569ddd1284077c/18872/cohort.png&quot; alt=&quot;FAC22 Members&quot; /&gt;
  &lt;p&gt;Some of the FAC22 members (and mentors) dressed for Halloween 👻&lt;/p&gt;
  &lt;h2&gt;What did I learn in the past 12 weeks at FAC?&lt;/h2&gt;
  &lt;p&gt;Most obviously I learned a lot about web development. The FAC curriculum teaches HTML, CSS, JavaScript, Node.js, SQL, Next.js, and React. I learned how to build a web application from scratch, which culminated in our final &lt;a href=&quot;https://github.com/tech-for-better/solent-mind&quot; target=&quot;_blank&quot;&gt;Tech for Better&lt;/a&gt; projects with real-life stakeholders.&lt;/p&gt;
  &lt;p&gt;Beyond the technical skills, I feel like I got a crash course in learning to work as a team. The way the FAC course is structured means that you are constantly learning from and teaching each other - alongside guidance from mentors from previous cohorts. There is an emphasis at FAC on leaving nobody behind, which makes it a very supportive environment in which to learn.&lt;/p&gt;
  &lt;p&gt;I also improved my persistence and problem-solving, which I think are crucial skills for all developers. Learning how to learn - and Google things where you are unsure - is the only way to keep up with the ever-changing technologies and frameworks in the industry.&lt;/p&gt;
  &lt;h2&gt;What were the challenges?&lt;/h2&gt;
  &lt;p&gt;As it was a boot camp, it was very intense and in the first half of the course, we were learning a big new topic every week. I often felt like I was only grasping the fundamentals of the previous week by the middle of the next. I had, and still do have, a persistent feeling like I don’t know enough. I also struggled with the feeling of frustration that you get from tricky bugs (read &lt;a href=&quot;https://interestingengineering.com/the-origin-of-the-term-computer-bug&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; for why computer problems are called bugs 🦟).&lt;/p&gt;
  &lt;h2&gt;What’s next?&lt;/h2&gt;
  &lt;p&gt;I&#39;ve started an apprenticeship as a software developer at &lt;a href=&quot;https://commonknowledge.coop/&quot; target=&quot;_blank&quot;&gt;Common Knowledge&lt;/a&gt;, which I’m really excited about. I’ll also be back at FAC for a week in January to help mentor the next cohort. In the longer term, I’d like to play an active role in the FAC community by helping out beginners as well as learning from my peers.&lt;/p&gt;
  &lt;p&gt;If you are looking to change careers into software development I strongly recommend &lt;a href=&quot;https://www.foundersandcoders.com/apply/&quot; target=&quot;_blank&quot;&gt;Founders and Coders&lt;/a&gt;. If I can answer any questions about the process of applying for a software boot camp please feel free to email me at &lt;a href=&quot;mailto:anna_cunnane@proton.me&quot;&gt;anna_cunnane@proton.me&lt;/a&gt;&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Sat, 01 Jan 2022 00:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/looking-back-at-founders-and-coders/</guid>
    </item>
    <item>
      <title>Four Things I&#39;ve Learnt So Far at Founders &amp; Coders</title>
      <link>https://example.com/four-things-i&#39;ve-learnt-at-fac/</link>
      <description>&lt;article&gt;
  &lt;p&gt;It’s been a month since I started the full-time course at Founders &amp; Coders, and it seems like a good time to talk about what I’ve been learning.&lt;/p&gt;
  &lt;p&gt;The FAC course is a software development bootcamp taught at Space4 in Islington and remotely. It is a peer-led course facilitated by mentors from a previous cohort and aims to create an inclusive environment, especially for those who are currently underrepresented in tech. For more details and how to apply visit their &lt;a href=&quot;https://www.foundersandcoders.com/apply/&quot; target=&quot;_blank&quot;&gt;website&lt;/a&gt;.&lt;/p&gt;
  &lt;h2&gt;Git workflows 🔨&lt;/h2&gt;
  &lt;p&gt;Git is software used for tracking changes in any set of files. It is used to enable collaborative working by developers. Before starting at FAC, I didn’t have much opportunity to use its more powerful features. Now I start a branch whenever I start working on a new issue and create a PR to have my code reviewed by my teammates before it gets merged into the main branch.&lt;/p&gt;
  &lt;h2&gt;Node.js and Express 🚀&lt;/h2&gt;
  &lt;p&gt;Node.js is a JavaScript Runtime that allows you to run JavaScript code outside of the browser. It is useful for developers who are building the client side of their application in another JS framework like React. I didn’t have any previous experience with server-side frameworks so this has been a steep learning curve, but I can now build simple web applications.&lt;/p&gt;
  &lt;h2&gt;Testing with Cypress 🧪&lt;/h2&gt;
  &lt;p&gt;Before FAC, I had tested that my code was working manually in the browser. However, as the codebases I’ve been working on have grown and the interactions between the features have become more complex, I’ve discovered the benefits of writing automated tests. Cypress is a great tool for end-to-end testing, simulating the user flow through your application.&lt;/p&gt;
  &lt;h2&gt;SQL 🗃️&lt;/h2&gt;
  &lt;p&gt;SQL (Structured Query Language) is used for extracting and organizing data in a relational database system. I have been using it to store user data, manage authentication, and allow users to post information to the server that is then displayed on the page. SQL is also incredibly powerful - look up &lt;a href=&quot;https://portswigger.net/web-security/sql-injection&quot; target=&quot;_blank&quot;&gt;SQL injection attacks&lt;/a&gt; to see what I mean.&lt;/p&gt;
  &lt;p&gt;We’ve covered a lot in such a short space of time, and I’m really looking forward to the next few weeks to put these skills into practice. Check out my &lt;a href=&quot;https://github.com/Moggach&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt; if you want to see more of what I’ve been up to.&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Sat, 23 Oct 2021 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/four-things-i&#39;ve-learnt-at-fac/</guid>
    </item>
    <item>
      <title>Attending Co-Tech conference at Space4</title>
      <link>https://example.com/attending-co-tech-conference-at-space4/</link>
      <description>&lt;article&gt;
  &lt;p&gt;Co-Tech (Co-operative Technologists) is a network of co-operatives that sell digital or tech services. They met for their conference on 23-24th September in the co-working space at Space4 in Finsbury Park. I attended as a new member of Common Knowledge who have hired me as an apprentice software developer. This has enabled me to complete the full-time programme at &lt;a href=&quot;https://www.foundersandcoders.com/&quot; target=&quot;_blank&quot;&gt;Founders and Coders&lt;/a&gt;, who are also a part of Co-Tech.&lt;/p&gt;
  &lt;img src=&quot;https://practical-swanson-368627.netlify.app/static/de44975c503e4cbeba5bb906b02f1f13/c58a3/co-tech-conf.jpg&quot; alt=&quot;Co-Tech Conference&quot; /&gt;
  &lt;p&gt;Image credit &lt;a href=&quot;https://twitter.com/CoTechUK&quot; target=&quot;_blank&quot;&gt;@CoTechUK&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;A coop is a company that is owned and democratically run by its workers - and in some cases customers. The members of Co-Tech aim to develop technology that serves the needs of workers and communities before private profit. &lt;a href=&quot;https://commonknowledge.coop/&quot; target=&quot;_blank&quot;&gt;Common Knowledge&lt;/a&gt; does this by designing digital tools for grassroots activists to create radical change.&lt;/p&gt;
  &lt;p&gt;At the conference, there were talks and workshops running on subjects like redesigning the &lt;a href=&quot;https://www.coops.tech/&quot; target=&quot;_blank&quot;&gt;Co-Tech website&lt;/a&gt;; advice sessions on how to run a cooperative; what to do with new business leads coming into the network and more. It was great to dip in and out of these and the conversations taking place more informally on the sidelines. It was a rapid introduction both to tech companies and coops.&lt;/p&gt;
  &lt;p&gt;Co-Tech was also the first time I had seen sociocracy being put into practice. This is where decisions about the coop are made with the consent of all members rather than through a majority vote. Sociocracy is combined at Common Knowledge with software development methodologies like Agile and Scrum. Common Knowledge member Gemma explains their approach &lt;a href=&quot;https://commonknowledge.coop/writing/non-hierarchical-organising&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;The session delivered by &lt;a href=&quot;https://servers.coop/&quot; target=&quot;_blank&quot;&gt;Servers.coop&lt;/a&gt; made me see that the choice of network infrastructure for a project can have ethical implications. The speakers were seeking funding to support an ecosystem of grassroots decentralised server hosting providers. It was really interesting to see how a project like this could get off the ground and made me think differently about the impact of tech on the environment.&lt;/p&gt;
  &lt;p&gt;It was inspiring to see people committed to their values working together to achieve something at Co-Tech. I like their approach to using the privilege that people in the tech industry have for the better, and I’m really excited to start working at Common Knowledge.&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Sat, 09 Oct 2021 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/attending-co-tech-conference-at-space4/</guid>
    </item>
    <item>
      <title>My journey to becoming a developer</title>
      <link>https://example.com/my-journey-to-become-a-developer/</link>
      <description>&lt;article&gt;
  &lt;p&gt;I’ve worked in book publishing for eight years but I’ve loved it. I’ve &lt;a href=&quot;https://hub.londonbookfair.co.uk/trailblazer-awards-winners-revealed-by-the-london-book-fair-3/&quot; target=&quot;_blank&quot;&gt;won awards&lt;/a&gt; (which is really nice and slightly embarrassing) and I’ve worked on some beautiful books.&lt;/p&gt;
  &lt;p&gt;Now though I’m transitioning into becoming a software developer with &lt;a href=&quot;https://www.foundersandcoders.com/&quot; target=&quot;_blank&quot;&gt;Founders and Coders&lt;/a&gt;. If you’re interested in my journey this is how I got here...&lt;/p&gt;
  &lt;img src=&quot;https://images.unsplash.com/photo-1484417894907-623942c8ee29?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;ixlib=rb-1.2.1&amp;auto=format&amp;fit=crop&amp;w=889&amp;q=80&quot; alt=&quot;Coding&quot; /&gt;
  &lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@emilep?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Emile Perron&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/s/photos/coding?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
  &lt;h2&gt;Dabbled with coding&lt;/h2&gt;
  &lt;p&gt;I started dabbling with coding quite soon out of Uni and I even attended a course on Dreamweaver (when that was still widely used). I taught myself the basics of HTML and CSS which is what you needed at the time to make basic websites. I ventured into Javascript but found it quite scary without a maths or computing background. I kept coming back to it though mostly because I liked the elegance of coding. I realised it was all about finding the most efficient solution to a problem.&lt;/p&gt;
  &lt;h2&gt;Made learning a habit&lt;/h2&gt;
  &lt;p&gt;What really supercharged my interest in coding was when I made a commitment to practising it every day. Initially, this was just a few minutes and I used the &lt;a href=&quot;https://getmimo.com/&quot; target=&quot;_blank&quot;&gt;Mimo&lt;/a&gt; app. I worked my way through the HTML and CSS tutorials on &lt;a href=&quot;https://www.w3schools.com/&quot; target=&quot;_blank&quot;&gt;W3 schools&lt;/a&gt; and started reading &lt;a href=&quot;https://javascript.info/&quot; target=&quot;_blank&quot;&gt;Javascript.info&lt;/a&gt;. This was when I properly started to grapple with Javascript and I found that persistence and googling were enough to see me through. The developer community also has a great ethos of sharing knowledge and constant learning which really inspired me.&lt;/p&gt;
  &lt;h2&gt;Got involved with events and meetups&lt;/h2&gt;
  &lt;p&gt;Eventually I started to get brave enough to talk to other people about what I was doing. I was a coach at the &lt;a href=&quot;https://dayofcode.co.uk/&quot; target=&quot;_blank&quot;&gt;2019 FutureBook Day of Code&lt;/a&gt; which was a turning point for me in terms of trusting in my own abilities. I started attending (by then online) meetups at &lt;a href=&quot;https://codebar.io/&quot; target=&quot;_blank&quot;&gt;Codebar&lt;/a&gt; and &lt;a href=&quot;https://www.foundersandcoders.com/&quot; target=&quot;_blank&quot;&gt;Founders and Coders&lt;/a&gt;. At these events, I got free support and tuition but I also connected to a group of people who had, or were, transitioning their careers towards software development.&lt;/p&gt;
  &lt;h2&gt;Made projects&lt;/h2&gt;
  &lt;p&gt;I think it’s really important to put your new skills into practice as soon as you can. I started making websites - including the one that hosts this blog which I built following &lt;a href=&quot;https://www.youtube.com/watch?v=8t0vNu2fCCM&amp;t=15148s&quot; target=&quot;_blank&quot;&gt;this tutorial&lt;/a&gt;. I tried to combine my existing skills and experience in publishing with coding so I also made a &lt;a href=&quot;https://romantic-ardinghelli-5883b1.netlify.app/&quot; target=&quot;_blank&quot;&gt;React application&lt;/a&gt; that returns data from the Google Books API. I created a &lt;a href=&quot;https://github.com/Moggach&quot; target=&quot;_blank&quot;&gt;GitHub profile&lt;/a&gt; where I pushed my code and went through the whole process of building a site from &lt;a href=&quot;https://create-react-app.dev/&quot; target=&quot;_blank&quot;&gt;create-react-app&lt;/a&gt; to hosting on &lt;a href=&quot;https://www.netlify.com/&quot; target=&quot;_blank&quot;&gt;Netlify&lt;/a&gt;.&lt;/p&gt;
  &lt;h2&gt;Joined FAC&lt;/h2&gt;
  &lt;p&gt;Earlier this year I made the huge decision to apply to the &lt;a href=&quot;https://www.foundersandcoders.com/apply/&quot; target=&quot;_blank&quot;&gt;Founders and Coders bootcamp&lt;/a&gt;. It was a lengthy application process and the requirements were tough. I knew though, that even if I wasn&#39;t successful, the learning I was gaining wouldn&#39;t be wasted. I am in the middle of the part-time course now and it&#39;s already one of the best things I’ve ever done. In September I’ll be leaving my current job at Abrams &amp; Chronicle Books (which I’ve loved and has supported me to take this step) to study at FAC full time and become a junior developer.&lt;/p&gt;
  &lt;p&gt;I hope that this has been interesting to read and has given you some insight or inspiration to start your own journey with coding! Please feel free to email me at &lt;a href=&quot;mailto:anna_cunnane@proton.me&quot;&gt;anna_cunnane@proton.me&lt;/a&gt; if you have any questions or would like to work together.&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Mon, 09 Aug 2021 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/my-journey-to-become-a-developer/</guid>
    </item>
    <item>
      <title>Why you should make a personal website</title>
      <link>https://example.com/why-should-you-make-a-personal-website/</link>
      <description>&lt;article&gt;
  &lt;h1&gt;Why you should make a personal website&lt;/h1&gt;
  &lt;p&gt;
    A personal website can be thought of as like your ‘home’ on the internet. It is a way to make yourself stand out from the competition. It helps you control your online presence and build a personal brand. It also makes it easier for potential employers to find you.
  &lt;/p&gt;
  &lt;img src=&quot;https://images.unsplash.com/photo-1581291518857-4e27b48ff24e?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;ixlib=rb-1.2.1&amp;auto=format&amp;fit=crop&amp;w=750&amp;q=80&quot; alt=&quot;Woman&#39;s hands drawing a wireframe&quot; /&gt;
  &lt;p&gt;
    Photo by &lt;a href=&quot;https://unsplash.com/@kellysikkema?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Kelly Sikkema&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/s/photos/woman-wireframe?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
  &lt;/p&gt;
  &lt;p&gt;Still need convincing? See the 5 reasons below why you should make a personal website (especially if you are looking for a job).&lt;/p&gt;
  &lt;h2&gt;Control your online presence&lt;/h2&gt;
  &lt;p&gt;
    Having a personal website helps you to control the first few results for your name on Google. Depending on how common your name is, registering a domain with your first and last name and linking it from all your social media sites will push it to the top of the search rankings. A contact us page on your site allows people to get in touch with you quickly and easily.
  &lt;/p&gt;
  &lt;h2&gt;A website is a digital portfolio&lt;/h2&gt;
  &lt;p&gt;
    We all know we should keep our CV up to date, but a website can be continuously refreshed with your latest work and news. It is also more flexible than the traditional CV format allowing you to showcase the projects that you’ve worked on. It’s a way of giving employers more of a sense of your personality while remaining professional.
  &lt;/p&gt;
  &lt;h2&gt;It’s a place to share your knowledge and expertise&lt;/h2&gt;
  &lt;p&gt;
    One of the best ways to build your personal brand is to write online. By sharing your knowledge and expertise on a blog, you can build up a reputation as the go-to person in your specific domain that will bring you to the attention of employers.
  &lt;/p&gt;
  &lt;h2&gt;It gives you the chance to learn valuable skills&lt;/h2&gt;
  &lt;p&gt;
    Learning to code websites with HTML, CSS, and Javascript makes you very attractive to employers. Other skills like writing engaging copy, UI/UX design, and SEO are also massively in demand. This combination of technical knowledge and creative flair shows the value you can offer.
  &lt;/p&gt;
  &lt;h2&gt;It’s easier than ever to create a stunning looking website&lt;/h2&gt;
  &lt;p&gt;
    Even if you don’t feel like learning to code, platforms like &lt;a href=&quot;https://www.wix.com/&quot; target=&quot;_blank&quot;&gt;Wix&lt;/a&gt; and &lt;a href=&quot;https://www.squarespace.com/website-design/?channel=pbr&amp;subchannel=go&amp;campaign=pbr-dr-go-uk-en-squarespace-core-e&amp;subcampaign=(brand-core_squarespace_e)&amp;utm_source=google&amp;utm_medium=pbr&amp;utm_campaign=pbr-dr-go-uk-en-squarespace-core-e&amp;utm_term=squarespace&amp;gclid=Cj0KCQjwraqHBhDsARIsAKuGZeHXstRJk-YJUx76C4dA0v_nOsq11WFPkCfITaucG34hKHcD8hjJGaoaAszBEALw_wcB&quot; target=&quot;_blank&quot;&gt;Squarespace&lt;/a&gt; allow you to create a professional-looking website within minutes. These sites have drag and drop website building tools; free templates and lots of customizable features.
  &lt;/p&gt;
  &lt;p&gt;If you’re interested in learning more check out this comprehensive article from &lt;a href=&quot;https://collegeinfogeek.com/personal-website/&quot; target=&quot;_blank&quot;&gt;CollegeInfoGeek&lt;/a&gt; or &lt;a href=&quot;https://www.youtube.com/watch?v=acBJsjCqgtM&quot; target=&quot;_blank&quot;&gt;Ali Abdal&#39;s video guide&lt;/a&gt;&lt;/p&gt;
&lt;/article&gt;
</description>
      <pubDate>Thu, 08 Jul 2021 01:00:00 +0000</pubDate>
      <dc:creator>Boaty McBoatFace</dc:creator>
      <guid>https://example.com/why-should-you-make-a-personal-website/</guid>
    </item>
  </channel>
</rss>