Don’t Blame the Developer: Lessons from CrowdStrike

The recent CrowdStrike incident has sparked debates about responsibility and blame. While it’s easy to point fingers at the developer, this approach misses the bigger picture.

Developers are human, working under pressure and tight deadlines. Mistakes are inevitable. When such errors reach end users, it’s not just the developer at fault—it’s a sign of systemic failure.

Organizations should focus on building robust systems with automated testing, thorough code reviews, and strong CI/CD pipelines. These processes catch errors early, preventing them from escalating. Creating a supportive culture that emphasises continuous learning and improvement is also crucial.

Instead of blaming individuals, let’s ask: Are the right safeguards in place? Are tools and processes adequate? Is the culture one of support?

Fixing the system, not blaming the developer, is the key to preventing incidents like CrowdStrike. Let’s focus on building resilient organisations where mistakes are caught and corrected early.

Why AI-Generated Content is a Game-Changer

You know, there’s a lot of talk about AI-generated content being a problem. But honestly, it’s pretty amazing. Here’s why.

Accessibility and Inclusion

Imagine you’re someone who has brilliant ideas but struggles to write them down. AI helps bridge that gap, giving everyone a chance to share their thoughts. It’s like giving a voice to those who might otherwise stay silent. And isn’t that what we want? More voices, more perspectives.

Boosting Accuracy and Reducing Errors

Humans make mistakes—it’s just a fact of life. AI, on the other hand, can process tons of data to ensure the information is spot-on. Sure, it’s not perfect, but it’s a huge step toward minimizing errors. And let’s face it, who wouldn’t want more accurate information at their fingertips?

Enhancing Productivity

Think about how much time you spend writing emails, reports, or articles. Now imagine AI taking care of the grunt work, leaving you with more time to focus on the creative, strategic stuff. It’s like having a super-efficient assistant who never needs a coffee break.

Personalization at Its Best

One of the coolest things about AI is its ability to tailor content just for you. It’s like having a personal concierge for information, learning exactly what you like and need. This makes your interaction with content much more engaging and relevant.

Sparking Creativity

Some folks say AI lacks creativity, but I see it differently. AI can be a fantastic starting point, sparking ideas you might not have considered. It’s not about replacing human creativity but enhancing it. Think of AI as a collaborator that helps you break through writer’s block or see things from a new angle.

Continuous Improvement

Interacting with AI-generated content helps us learn and grow. It’s a feedback loop where both humans and machines get better over time. We teach AI, and in turn, it helps us refine our skills and knowledge.

Embracing the Future

AI-generated content isn’t a threat; it’s an opportunity. When used responsibly, it can make our lives easier, our work more efficient, and our world more inclusive. Let’s embrace the potential of AI to augment our abilities and drive us toward a brighter, more innovative future.

In conclusion, AI-generated content offers a myriad of benefits that far outweigh the criticisms. It democratizes content creation, boosts productivity, ensures accuracy, and even enhances creativity. So, instead of fearing the rise of AI, let’s harness its power to create a richer, more dynamic world.

And yes, you guessed it right. This is indeed AI generated.

How to Change a Kitchen Tab Mixer Cartridge: A DIY Guide

A leaky kitchen faucet can be a major annoyance, not to mention a waste of water. If your faucet is dripping or spraying, the culprit is likely the cartridge, a small but essential component that controls the flow of water. Replacing a kitchen faucet cartridge is a relatively simple DIY project that can save you time and money compared to calling a plumber.

Understanding Your Kitchen Tap Mixer

Before starting, it’s crucial to understand the type of kitchen tap mixer you have. Common types include single-lever, dual-handle, and pull-out spray mixers. Each type might have a slightly different cartridge system.

Tools and Materials

  • Adjustable wrench
  • Flat-head screwdriver
  • Replacement cartridge (make sure it matches your faucet brand and model)

Steps

  1. Turn off the water supply. Locate the shut-off valves under the sink, one for hot water and one for cold water. Turn them clockwise until they stop to shut off the water flow to the faucet.
  2. Open the faucet to release any pressure. Turn on the faucet handle and let the water run until it stops. This will relieve any pressure in the lines and prevent water from spraying out when you remove the cartridge.
  3. Remove the handle. Look for a small cover or screw under the handle. Use the Allen wrench to remove the screw and then pull off the handle.
  4. Remove the decorative cap. Underneath the handle, you should see a decorative cap. Pry it off gently with the flat-head screwdriver.
  5. Unscrew the retaining nut. Use the adjustable wrench to loosen and remove the nut holding the cartridge in place. Be careful not to overtighten the nut when you reinstall it.
  6. Pull out the old cartridge. Grab the cartridge and pull it straight out of the faucet body.
  7. Install the new cartridge. Insert the new cartridge into the faucet body, making sure it’s lined up correctly. The cartridge should have two small plastic tabs that fit into corresponding slots in the faucet body.
  8. Screw on the retaining nut. Tighten the nut snugly with the adjustable wrench. Don’t over-tighten it, as this could damage the cartridge.
  9. Replace the decorative cap and handle. Push the decorative cap back into place and screw on the handle. Tighten the Allen screw until the handle is secure.
  10. Turn on the water supply. Slowly turn on the shut-off valves under the sink. Check for leaks around the cartridge and handle. If you see any leaks, tighten the connections slightly.

Replacing a kitchen faucet cartridge is a quick and easy way to fix a leaky faucet. With the right tools and a little patience, you can save yourself the time and expense of calling a plumber. We had to learn and apply how to do this this weekend. Specifically this youtube video helped to see it visually:

Google Pixel (Original) Camera

This year, I decided to buy a Google Pixel and replace my DSLR camera with my phone’s camera. I must say that I don’t miss carrying a big camera with me. I’m happy with all the features of the phone and photos I took with this phone so far.  It is great for outdoor photography, does amazing job post-processing images with HDR+ and comes with free unlimited Google Photos storage for images taken with this phone. So that I can store and share as many photos I want.

Bukchon Village and my camera

​I’m thinking to change my phone, get a higher end device with better camera and eventually give up on my DSLR camera and switch to using phone camera only. It is a big decision for me because I really like to shoot photos, stay at the same spot for long time to get all settings right. And sometimes stay in front of my computer to fine tune colours and maybe combine photos to make HDR images. It is really fun, but time consuming hobby.

Pros of DSLR way:

  • Satisfaction when I finish editing and have a great looking photo in front of me.
  • Process of taking the photos is like meditation. Helping to clear my mind, not to think daily problems for a while.

Cons:

  • Takes a lot of time to take photos.
  • Camera is heavy
  • Requires additional equipment (lenses, cleaning stuff, tripod…), which is also heavy.
  • Can’t carry everything everywhere all the time.
  • Takes time to process raw images.

Mobile phone camera:

  • Point and shoot
  • High quality photos with little effort
  • With me all the time and ready to shoot immediately
  • Doesn’t need additional equipment
  • Powerful post processing with apps
  • No extra time required to process and organise photos.

Mobile camera cons:

  • Lower quality images in low light conditions and in general compared to DSLR

We visited Bukchon Village today. Took some photos to test my camera again. Before I decide to sell it or not.

 

When I copied photos to my laptop from SD card, I found that they don’t look good at all. Like none of them. I thought that there must be something about screen colour settings. Uploaded all images to Google Photos and applied auto fix to all of them one by one. Google Photos doesn’t allow batch effect processing yet. And they still far from what I expected. I was quite disappointed until I saw the photos on my phone. On the phone screen (Galaxy S5) they look much better. It must be the screen..

I am going to post some more photos to compare after I got my new phone.

Slim Framework with Docker

Warning: This article is quite old now and some of the docker images and links might not work.

Slim Framework is a micro framework which provides minimal tools to build simple and fast APIs and websites.

We are using Slim to build many of our APIs, combined with Docker. We usually add a docker-compose file and use one of docker images we have. See previous post about building automated docker images.

First, we need composer. It is best to follow the install instructions on their website. Since it is changing from time to time. I usually move composer file into bin directory so that I can access it from anywhere.

sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer

Then we can go ahead and install Slim Framework.

composer create-project slim/slim-skeleton slim-example

Now we have slim framework code installed. But we don’t want to install all PHP extensions, database, Redis, and other application requirements to our local machine. Instead, we want to share exact same development environment with other developers. For this purpose, we are using docker-compose to define our application and other linked apps and services. Our simplest docker-compose.yml looks like this:

version: '2'
services:

  slim-example:
    image: comicrelief/php7-slim:latest
    volumes:
      - ~/Examples/slim-example:/var/www/html
    ports:
      - "9001:80"
    depends_on:
      - slim-example-mysql
    environment:
      APPLICATION_ENV: local

  slim-example-mysql:
    image: mysql:5
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: mypassword
      MYSQL_DATABASE: slim-example

Then run:

docker-compose up -d

Containers are downloaded and started. Visit https://localhost:9001/ . See that default Slim example route and page is loaded.

For this example I used comicrelief/php7-slim image, which extends comicrelief/php7-base image and has some default php-extensions loaded. You can find more information about these images in their readme files and in my other post.

Time to start coding..

Docker: Create Automated PHP Images

Docker is the buzzword for a while now. At work, we are using Docker for our website development and on continuous integration tools. It provides us an easy and fast way to get new developers local development environment up and ready.

Our team is using php7 and Slim Framework to develop PHP apps. To make the experience even better we built a docker image hierarchy which we extended from official base php7 image, and created our own “base” image.

Our docker php7 base repository has some PHP extensions, composer, some vhost files, some basic php.ini configuration, mysql extension and XDebug installed. This is pretty much the things we always need when developing any application.

image showing menu link to create automated build on docker hubFinally we set up an automated build on docker hub to have it built for us whenever we push to master branch. Here you have to authorise docker hub to access the GitHub repositories. Then pick the repository you have the Dockerfile committed. Another configuration we have here is to get another automated build triggered whenever official php image has a new release as well.  This enables us to get latest 7.0.* versions automatically upgraded in the image we are using.

image showing the config page for repository links on docker hub

For more information about docker hub automated builds, you can also check out their official documentation.

Now the fun part. The idea with this base image was, to have it ready to be extended for more specific use. For example we have php7-slim repository, which is extending base php7 image and enabling slim vhost configuration and adding slim framework requirements, and has its own automated build. Has the same link as above, but this time to php7-base image itself. Similarly, php7-drupal extends php7-base image with Drupal requirements and has its own automated build. And then another project can join and extend it once more.

The resulted docker image hierarchy is working well, and we are getting minor php upgraded to our development environment automatically, because a change in base image causes chain triggers to rebuild parent images. We can also use this to add more php extensions to all Slim Framework projects for example, or optimise composer, or update php.ini config for all docker images we use in all teams in a central location…

We are then using final images in docker-compose configuration yaml files.

Simple, and fun.