Jean Galea

Health, Wealth, Relationships, Wisdom

  • Start Here
  • Guides
    • Beginner?s Guide to Investing
    • Cryptocurrencies
    • Stocks
    • P2P Lending
    • Real Estate
    • Forex
    • CFD Trading
    • Start and Monetize a Blog
  • My Story
  • Blog
    • Cryptoassets
    • P2P Lending
    • Real estate
  • Consultancy
    • Consult with Jean
    • Consult a Lawyer on Taxation and Corporate Setups
  • Podcast
  • Search

Adding a Hardware Remote Control to Lego PoweredUP Control+ Sets

Last updated: December 02, 2023Leave a Comment

lego buggy

I love building stuff with my son, and one of our latest projects (admittedly more apt for me than for him as he’s too young to be building these kits), was the Lego buggy 42124. This is a great kit that is fun to build but it is let down by the fact that it is controlled using a smartphone. I don’t like using smartphone remote controls and I definitely don’t want my son looking at a screen at a young age, so I set out to figure out a way to use a hardware remote control.

Turns out it’s quite easy to do. I used Pybricks to add custom code to the Lego hub, then ordered a Lego remote to pair with the buggy.

The code I used can be found below. I set the left red button to “ludicrous mode” which enables the buggy to function at full speed. Otherwise, I set it to run at 50% speed since my son is too young to control it at max speed, especially indoors. This way we can both use it and have some fun while using the appropriate speeds.

Lego Buggy (42124)

from pybricks.pupdevices import Motor, Remote
from pybricks.parameters import Port, Direction, Stop, Button
from pybricks.hubs import TechnicHub
from pybricks.tools import wait

# Initialize the motors.
steer = Motor(Port.B)
front = Motor(Port.A, Direction.COUNTERCLOCKWISE)

# Connect to the remote.
remote = Remote()

# Initialize the hub.
hub = TechnicHub()

# Read the current settings
old_kp, old_ki, old_kd, _, _ = steer.control.pid()

# Set new values
steer.control.pid(kp=old_kp*4, kd=old_kd*0.4)

# Find the steering endpoint on the left and right.
# The middle is in between.
left_end = steer.run_until_stalled(-200, then=Stop.HOLD)
right_end = steer.run_until_stalled(200, then=Stop.HOLD)

# We are now at the right. Reset this angle to be half the difference.
# That puts zero in the middle.
steer.reset_angle((right_end - left_end)/2)
steer.run_target(speed=200, target_angle=0, wait=False)

# Set steering angle for the buggy
steer_angle = (((right_end - left_end)/2)-5)
print('steer angle:',steer_angle)

# Now we can start driving!
while True:
    # Check which buttons are pressed.
    pressed = remote.buttons.pressed()

    # Choose the steer angle based on the right controls.
    if Button.LEFT_PLUS in pressed:
        steer.run_target(1400, -steer_angle, Stop.HOLD, False)
    elif Button.LEFT_MINUS in pressed:
        steer.run_target(1400, steer_angle, Stop.HOLD, False)
    else:
        steer.track_target(0)

    # Top speed controls
    top_speed = 50
    if Button.LEFT in pressed:
        top_speed = 100         

    # Choose the drive speed based on the left controls.
    drive_speed = 0
    if Button.RIGHT_PLUS in pressed:
        drive_speed += top_speed
    if Button.RIGHT_MINUS in pressed:
        drive_speed -= top_speed
    if Button.RIGHT in pressed:
        print('Battery voltage:',(hub.battery.voltage())/1000,"V")
        wait(100)          

    # Apply the selected speed.
    front.dc(drive_speed)

    # Wait.
    wait(10)

Lego Top Gear Rally Car (42109)

I also bought the Lego Top Gear Rally Car (42109) and used similar code with a second remote I bought. Now we can race the cars against each other. I can adjust the speed of each through code to adapt it to our different abilities.

Here’s the code I used on this car. I added some things like changing the remote light buttons and naming the remote so that the car would connect to a specific remote out of the two I have, and thus avoid confusion. I also correspondingly changed the hub’s light color.

from pybricks.pupdevices import Motor, Remote
from pybricks.parameters import Port, Direction, Stop, Button, Color
from pybricks.hubs import TechnicHub
from pybricks.tools import wait

# Initialize the motors.
steer = Motor(Port.B)
front = Motor(Port.D, Direction.COUNTERCLOCKWISE)

# Connect to the remote and set the light on the remote
remote = Remote('topgear', timeout=None)
remote.light.on(Color.RED)

# Print the current name of the remote.
print(remote.name())

# Choose a new name.
remote.name('topgear')

# Initialize the hub.
hub = TechnicHub()
hub.light.on(Color.RED)

# Read the current settings
old_kp, old_ki, old_kd, _, _ = steer.control.pid()

# Set new values
steer.control.pid(kp=old_kp*4, kd=old_kd*0.4)

# Set initial top speed value
top_speed = 100

# Find the steering endpoint on the left and right.
# The middle is in between.
left_end = steer.run_until_stalled(-200, then=Stop.HOLD)
right_end = steer.run_until_stalled(200, then=Stop.HOLD)

# We are now at the right. Reset this angle to be half the difference.
# That puts zero in the middle.
steer.reset_angle((right_end - left_end)/2)
steer.run_target(speed=200, target_angle=0, wait=False)

# Set steering angle for the buggy
steer_angle = (((right_end - left_end)/2)-5)

# Now we can start driving!
while True:
    # Check which buttons are pressed.
    pressed = remote.buttons.pressed()

    # Choose the steer angle based on the right controls.
    if Button.LEFT_PLUS in pressed:
        steer.run_target(1400, -steer_angle, Stop.HOLD, False)
    elif Button.LEFT_MINUS in pressed:
        steer.run_target(1400, steer_angle, Stop.HOLD, False)
    else:
        steer.track_target(0)

    # Top speed controls
    if Button.LEFT in pressed:
        top_speed = 75
    if Button.RIGHT in pressed:
        top_speed = 100   
    if ((Button.RIGHT in pressed) and (Button.LEFT in pressed)):
        top_speed = 40 

    # Choose the drive speed based on the left controls.
    drive_speed = 0
    if Button.RIGHT_PLUS in pressed:
        drive_speed -= top_speed
    if Button.RIGHT_MINUS in pressed:
        drive_speed += top_speed

    # Print battery voltage    
    if Button.RIGHT in pressed:
        print('Battery voltage:',(hub.battery.voltage())/1000,"V")
        wait(100)           

    # Apply the selected speed.
    front.dc(drive_speed)

    # Wait.
    wait(10)

Lego Go Kart (42109 variant)

from pybricks.pupdevices import Motor, Remote
from pybricks.parameters import Port, Direction, Stop, Button, Color
from pybricks.hubs import TechnicHub
from pybricks.tools import wait

# Initialize the motors.
steer = Motor(Port.B)
front = Motor(Port.D, Direction.COUNTERCLOCKWISE)

# Connect to the remote and set the light on the remote
remote = Remote('topgear', timeout=None)
remote.light.on(Color.GREEN)

# Print the current name of the remote.
print(remote.name())

# Choose a new name.
remote.name('kart')

# Initialize the hub.
hub = TechnicHub()
hub.light.on(Color.GREEN)

# Read the current settings
old_kp, old_ki, old_kd, _, _ = steer.control.pid()

# Set new values
steer.control.pid(kp=old_kp*4, kd=old_kd*0.4)

# Set initial top speed value
top_speed = 100

# Find the steering endpoint on the left and right.
# The middle is in between.
left_end = steer.run_until_stalled(-200, then=Stop.HOLD)
right_end = steer.run_until_stalled(200, then=Stop.HOLD)

# We are now at the right. Reset this angle to be half the difference.
# That puts zero in the middle.
steer.reset_angle((right_end - left_end)/2)
steer.run_target(speed=200, target_angle=0, wait=False)

# Set steering angle for the buggy
steer_angle = (((right_end - left_end)/2)-5)

# Now we can start driving!
while True:
    # Check which buttons are pressed.
    pressed = remote.buttons.pressed()

    # Choose the steer angle based on the right controls.
    if Button.LEFT_PLUS in pressed:
        steer.run_target(1400, -steer_angle, Stop.HOLD, False)
    elif Button.LEFT_MINUS in pressed:
        steer.run_target(1400, steer_angle, Stop.HOLD, False)
    else:
        steer.track_target(0)

    # Top speed controls
    if Button.LEFT in pressed:
        top_speed = 75
    if Button.RIGHT in pressed:
        top_speed = 100   
    if ((Button.RIGHT in pressed) and (Button.LEFT in pressed)):
        top_speed = 40 

    # Choose the drive speed based on the left controls.
    drive_speed = 0
    if Button.RIGHT_PLUS in pressed:
        drive_speed -= top_speed
    if Button.RIGHT_MINUS in pressed:
        drive_speed += top_speed

    # Print battery voltage    
    if Button.RIGHT in pressed:
        print('Battery voltage:',(hub.battery.voltage())/1000,"V")
        wait(100)           

    # Apply the selected speed.
    front.dc(drive_speed)

    # Wait.
    wait(10)

Lego 4×4 Extreme Off-Roader (42099)

from pybricks.pupdevices import Motor, Remote
from pybricks.parameters import Port, Direction, Stop, Button
from pybricks.tools import wait

# Initialize the motors.
steer = Motor(Port.C)
front = Motor(Port.A, Direction.COUNTERCLOCKWISE)
rear = Motor(Port.B, Direction.COUNTERCLOCKWISE)

# Lower the acceleration so the car starts and stops realistically.
front.control.limits(acceleration=1000)
rear.control.limits(acceleration=1000)

# Connect to the remote.
remote = Remote()

# Find the steering endpoint on the left and right.
# The middle is in between.
left_end = steer.run_until_stalled(-200, then=Stop.HOLD)
right_end = steer.run_until_stalled(200, then=Stop.HOLD)

# We are now at the right. Reset this angle to be half the difference.
# That puts zero in the middle.
steer.reset_angle((right_end - left_end) / 2)
steer.run_target(speed=200, target_angle=0, wait=False)

# Now we can start driving!
while True:
    # Check which buttons are pressed.
    pressed = remote.buttons.pressed()

    # Choose the steer angle based on the left controls.
    steer_angle = 0
    if Button.LEFT_PLUS in pressed:
        steer_angle -= 75
    if Button.LEFT_MINUS in pressed:
        steer_angle += 75

    # Steer to the selected angle.
    steer.run_target(500, steer_angle, wait=False)

    # Choose the drive speed based on the right controls.
    drive_speed = 0
    if Button.RIGHT_PLUS in pressed:
        drive_speed += 1000
    if Button.RIGHT_MINUS in pressed:
        drive_speed -= 1000

    # Apply the selected speed.
    front.run(drive_speed)
    rear.run(drive_speed)

    # Wait.
    wait(10)

Troubleshooting

If you’re having issues getting the code to work, you can try both editors:

  • beta.pybricks.com
  • code.pybricks.com

You can also use this code to verify that a connection is being successfully made by your controller with the hub:

from pybricks.hubs import TechnicHub
from pybricks.pupdevices import Remote
from pybricks.parameters import Button, Color
from pybricks.tools import wait

hub = TechnicHub()

# Make the light red while we connect.
hub.light.on(Color.RED)

# Connect to the remote.
my_remote = Remote() 

# Make the light green when we are connected.
hub.light.on(Color.GREEN)

while True:
    # For any button press, make the light magenta.
    # Otherwise make it yellow.
    if my_remote.buttons.pressed():
        hub.light.on(Color.MAGENTA)
    else:
        hub.light.on(Color.YELLOW)
    wait(10)

Lego 42124 Trike Variant

from pybricks.pupdevices import Motor, Remote
from pybricks.parameters import Port, Direction, Stop, Button
from pybricks.hubs import TechnicHub
from pybricks.tools import wait

# Initialize the motors.
steer = Motor(Port.B)
front = Motor(Port.A, Direction.COUNTERCLOCKWISE)

# Connect to the remote.
remote = Remote()

# Initialize the hub.
hub = TechnicHub()

# Read the current settings
old_kp, old_ki, old_kd, _, _ = steer.control.pid()

# Set new values
steer.control.pid(kp=old_kp*0.5, kd=old_kd*1)

# Find the steering endpoint on the left and right.
# The middle is in between.
left_end = steer.run_until_stalled(-200, then=Stop.HOLD)
right_end = steer.run_until_stalled(200, then=Stop.HOLD)

print('left end:',left_end)
print('right end:', right_end)

# We are now at the right. Reset this angle to be half the difference.
# That puts zero in the middle.
steer.reset_angle((right_end - left_end)/2)
steer.run_target(speed=100, target_angle=0, wait=False)

# Set steering angle for the buggy
steer_angle = (((right_end - left_end)/2)-20)
print('steer angle:',steer_angle)

# Now we can start driving!
while True:
    # Check which buttons are pressed.
    pressed = remote.buttons.pressed()

    # Choose the steer angle based on the right controls.
    if Button.LEFT_PLUS in pressed:
        steer.run_target(400, -steer_angle, Stop.HOLD, False)
    elif Button.LEFT_MINUS in pressed:
        steer.run_target(400, steer_angle, Stop.HOLD, False)
    else:
        current_angle = steer.angle()
        deadband = 3  # Define a deadband range of +/- 3 degrees
        if current_angle > deadband:
            steer.track_target(0)
        elif current_angle < -deadband:
            steer.track_target(0)
        else:
            steer.stop()

    # Top speed controls
    top_speed = 50
    if Button.LEFT in pressed:
        top_speed = 100         

    # Choose the drive speed based on the left controls.
    drive_speed = 0
    if Button.RIGHT_PLUS in pressed:
        drive_speed += top_speed
    if Button.RIGHT_MINUS in pressed:
        drive_speed -= top_speed
    if Button.RIGHT in pressed:
        print('Battery voltage:',(hub.battery.voltage())/1000,"V")
        wait(100)          

    # Apply the selected speed.
    front.dc(drive_speed)

    # Wait.
    wait(10)

Lego 51515 Robot Inventor

You can also use the same principles to connect to the Lego 51515 Robot Inventor hub. There are many things you can build with that kit, but below you can find the general framework for connecting the Lego remote to the 51515 hub:

from pybricks.hubs import InventorHub
from pybricks.pupdevices import Remote
from pybricks.parameters import Button
from pybricks.tools import wait

# Initialize the hub and the remote
hub = InventorHub()
remote = Remote()

while True:
    # Check if a button on the remote is pressed
    pressed = remote.buttons.pressed()

    if Button.LEFT in pressed:
        # Code for when the left button is pressed
        pass
    elif Button.RIGHT in pressed:
        # Code for when the right button is pressed
        pass
    
    # Delay to avoid rapid polling
    wait(10)

Using a PS4 Controller via BrickController2

BrickController2 is an app that lets you control LEGO creations with game controllers. To use a PS4 controller with BrickController2, follow these steps:

  1. Pair the PS4 Controller with Your Device:a. Put the PS4 controller in pairing mode by holding down the “Share” and “PS” buttons at the same time until the light bar starts flashing.b. On your device (whether it’s an Android or iOS), open the Bluetooth settings.

    c. Look for the PS4 controller in the list of available devices. It might show up as “Wireless Controller” or something similar.

    d. Tap on the PS4 controller’s name in the list to pair it with your device. You might be prompted to confirm the pairing.

  2. Open BrickController2:a. Make sure you’ve set up your LEGO devices in the app.b. In the “Controllers” section, you should see the PS4 controller listed if it’s connected. If not, try disconnecting and reconnecting the PS4 controller via Bluetooth.
  3. Assign Controls:a. Once the PS4 controller is recognized in BrickController2, you can start assigning its buttons to control specific functions of your LEGO creation. This can include movement directions, rotations, or other actions.
  4. Play and Control:Once you’ve set up the controls, you can use your PS4 controller to play with and control your LEGO models. Ensure the LEGO devices and the controller are both connected and in range for optimal performance.

Further Reading

  • Brickset – reviews of Lego sets
  • Rebrickable – alternate builds
    • GoPro mod
  • MOCHub – “my own creation”
  • RacingBrick on Youtube – fantastic Lego builds channel

Filed under: Tech

The Best Powerline Adapters

Published: January 02, 2021Leave a Comment

netgear powerline

Powerlink adapters are a fantastic invention that help those who have poor WiFi connections at home get a decent signal through the powerlines. I’ve tried various solutions to be able to make the best use of my fibre optic connections in rooms where the WiFi connection was playing around, and have finally settled on the Netgear adaptors.

I just wanted to write a few notes down here for my future self and others who might be in the market for one of these devices.

I’ve also tried the Devolo and TP-link options. I got the best product from each of these brands, but the Netgear was the clear winner. In fact, although it advertised lower speeds than the Devolo, it still came up on top in the end.

The difference between the Netgear and Devolo was very significant. I could reach the same upload speed with both but download speed on the Devolo was half that of the Netgear.

An interesting fact is that it’s the upload speed that suffered most with WiFi connections. I’m not sure why that is so.

 

Filed under: Tech

Best Backup Software for Mac

Published: September 15, 2020Leave a Comment

backup software mac

I’m quite a fanatic about making backups of every digital asset I have, so having a reliable software to handle backups is essential to me.

The candidates for Mac backup:

  • SuperDuper
  • Carbon Copy Cloner
  • FreeFileSync
  • RsyncGUI

SuperDuper

SuperDuper’s website feels like we’re still in the 90s and it’s hard to trust such a website and the software it is selling. I’ve tried it but it didn’t feel as slick as Carbon Copy Cloner. The only advantage is it’s cheaper than CCC, coming in at $40.

Carbon Copy Cloner

Carbon Copy Cloner is the most polished of all the candidates and costs $60. It probably has a more stable and bigger dev. team behind it. SuperDuper seems more on the indie side. When it comes to backups saving you in the event of a meltdown, trust is essential. I get that from CCC. Having said that, both SuperDuper and Carbon Copy Cloner will do the same job and do it well.

Click here for a good comparison between CCC and SuperDuper.

FreeFileSync

FreeFileSync is what I’ve used for many years and it works fine. It’s open-source and completely free, so if money is an issue this should be your first choice. The GUI is good enough and I really couldn’t ask more from a free software, it does the job.

RsyncGUI

RsyncGUI is not developed to be an easy synchronize and backup tool. The main purpose is to ease the use of rsync and synchronize files on your Mac to remote FreeBSD and Linux servers. And of course restore files from remote servers. The UI might also be difficult to understand or complex if you don’t know what rsync is. It is not required to know rsync but it will ease the use and understanding of RsyncGUI. But it is though, possible to use RsyncGUI by just adding a source and remote backup catalog using default parameters.

If your plan is to use RsyncGUI as your main tool for backup of files, please investigate and understand the limits of it. RsyncGUI is quite powerful, but it is might not the primary backup tool for the average user of macOS.

My Choices

I use Time Machine to backup my various machines on a continuous basis, and Carbon Copy Cloner for more periodic backups or backups of specific folders to external media for archiving purposes.

Filed under: Tech

My Thoughts on WordPress in 2020

Last updated: August 18, 202210 Comments

I’ve been using WordPress since the early days, 2006 to be exact.

I fell in love with the idea of open-source CMSs a few years before that, after experiencing firsthand how cumbersome and expensive closed-source CMSs were. The big open source players at the time were Drupal and Joomla, but then WordPress came along and changed the game.

After seeing how much easier WordPress would be to explain to my clients when compared to Joomla (named Mambo in those days), I made the switch immediately and also started blogging about this exciting piece of software that was going to “democratize publishing”.

I had been blogging for a few years by then, using the limited functionality of Blogger. I switched my site to WordPress and started WP Mayor to share my new knowledge with the rest of the world and also act as a testbed for me to implement things.

I can say that there were 3 main things that attracted me to WordPress in 2006:

  • Ease-of-use
  • Technically accessible
  • Community

First, it was very easy to use WordPress straight out of the box, provided you knew how to set up a domain and basic hosting service, which wasn’t a problem for me given I had been working as a web developer for several years by then.

Secondly, it was also technically accessible. I had started computer science and business at University, but I could not claim to be a hardcore developer. I knew enough PHP and MySQL to build a basic CMS and modify HTML/CSS templates. That’s all I needed to know to customize WordPress websites. I could also build my own WordPress plugins fairly easily. It took me a while to go down that road, but eventually, I built WP RSS Aggregator, which, like WP Mayor, is still around today and doing great.

Thirdly, the community. One of the reasons why it was so easy to get started with WordPress was that there were some great forums, including the official one, where you could easily get help in doing anything WordPress-related, and for free! There was a spirit of generosity and sheer excitement at building an amazing product that would change people’s lives and give a voice to anyone on the planet.

Fast forward a decade and a half, and I am still a WordPress user. This very blog runs on WordPress. However, my feelings towards WordPress have changed over the years. While it remains an excellent product that can certainly deliver the goods (after all, it powers 35% of the world’s websites, according to some estimates), I have a few big gripes that might even jeopardise the product’s future, and that’s what I want to note down in this post.

First – A Little Bit of WP History

Let me take you on a brief history on WordPress from my perspective.

WordPress started life in 2003 as a fork of b2/cafelog by Matt Mullenweg and Mike Little. Although WordPress is the official successor of b2, another project, b2evolution, is also in active development.

The idea for the fork came to Matt when the main developer of b2, Michel Valdrighi, stopped making updates to the platform. Matt announced the idea on his blog and Mike Little replied saying he was interested in contributing.

In the following months, Matt and Mike made several changes to the codebase (PHP, MySQL, HTML and CSS), however Matt was clearly the one with bigger dreams and ideas for WordPress. He registered WordPress.org.

In 2004 the licensing terms for the competing Movable Type package were changed by Six Apart, resulting in many of its most influential users migrating to WordPress. This was the stroke of luck that changed the course of CMS history forever. If it weren’t for this disastrous move by Movable Type, things would have probably looked a lot different today, as Movable Type was a clear leader in those days.

When WordPress was forked from b2/cafelog, it was squarely meant to be a blogging platform, and it became the undisputed best blogging platform very quickly as users flocked to it from Blogger (a very limited tool) and Movable Type.

By this time, Matt Mullenweg was the clear leader of the project, and he also founded Automattic in 2005 to focus on building WordPress-related commercial software and services. That company now employs more than a thousand people and is currently valued at more than $3 billion today. It has acquired several other companies.

The WordPress core group then decided to take on the CMS space, and compete directly with Joomla and, to a certain extent, Drupal. Concepts were borrowed from these two CMSs and custom post types were introduced, which really changed the game and made WordPress the definite no.1 piece of software to use by web developers building medium complexity sites for clients, and not just blogs. Drupal was still regarded as a better option for high complexity sites, while Magento was the e-Commerce leader.

The next big shift in 2014 came when the leadership announced that the focus would shift to making WordPress an API, where the front and back end admin panels could be built with any other language and interface with the WordPress database, giving ultimate flexibility to web developers. The REST API was the solution, and a lot of energy was spent on Calypso, the desktop app meant to showcase this new WordPress concept. It was a cool piece of software but the REST API was way too limiting to make it a viable alternative to using the traditional wp-admin dashboard for anything beyond writing simple blog posts.

In the meantime, e-Commerce solutions on WordPress were getting more and more sophisticated. WooCommerce (a fork of Jigoshop by themes titan WooThemes in 2011) was emerging as the clear leader, and was acquired by Automattic for over $30mln in 2015, along with the rest of the WooThemes business and team. I think this was a pivotal point that really made it clear to everyone that Automattic was the clear juggernaut of the WordPress space and the company could and would do anything it wanted to profit from the WordPress software and community. Speculation immediately started about whether Automattic wanted to make a hosted version of WooCommerce. This move has not materialized yet but most people take it as a given to happen in the next few years.

Calypso never really picked up steam, and suddenly the focus changed on redoing the way people created content with WordPress. This consisted of replacing the TinyMCE editor used on the wp-admin interface and instead use a newly built tool called Gutenberg. Undoubtedly, this was due to platforms such as Wix and Squarespace providing a much simpler interface for new users, making it clear that something had to change for WordPress to keep up.

Although Gutenberg has been the main focus of the WordPress core theme for over three years, it has still not won over the hearts of users, and the Gutenberg plugin in fact is one of the worst-rated plugins in the repository. The hope is that long-term the kinks will be ironed out and old school users will learn how to use Gutenberg while newer ones will immediately find themselves at ease with the more modern interface it provides.

I’m not sure how this will end, all I can say is that I’ve tried Gutenberg and I wasn’t convinced. Probably because I’m set in my ways and I had no real incentive to change the way I create content, so Gutenberg was a big annoyance more than anything. I do agree, however, that for younger users there needs to be a better way of content editing that is more akin to the interfaces they are used to. Whether it will be Gutenberg or something else remains to be seen. Certainly, third party tools like Elementor seem to receive much more love from users.

And that’s where we are at in 2020 as far as I’m concerned. Now on to a few concerns and gripes that have risen over the past few years.

1. Changing WordPress Narrative

As I’ve described, WordPress has morphed from a blogging system, to a CMS, then to an app platform at the database level using APIs. Currently, I’m not even sure what WordPress is trying to be anymore. Is Gutenberg a step towards becoming the top blogging/CMS tool once again?

What is the role of WooCommerce in all this? We know it’s a huge profit center for Automattic and has a big slice of the overall e-commerce market, but it also has serious rivals like Shopify to contend with. As with Wix and Squarespace, these hosted tools have focused on one thing right from the start, while WordPress has been changing and trying to accommodate everything that is thrown at it over the past decade and a half.

2. A Different Web

The web itself has changed a lot since WordPress came to be, and Javascript frameworks are now all the rage. The WordPress codebase now has a much bigger percentage of JS than PHP, and this has been tough on many WP developers who have had to learn a new language in order to keep up.

Apart from the technical considerations that have changed, the online expectations of users have changed as well.

Ten years ago, there was a strong focus on owning your content and open-source platforms were very popular. Nowadays, it’s all about convenience and most users don’t give a hoot about owning their content. You know things have changed a lot when people are writing their blog posts as Instagram posts rather than having a website. It’s insane to me, but realistically that is where the trend is going.

Our lives have gotten busier and users are accustomed to hosted platforms like Facebook, Instagram, Youtube, Wix, Shopify etc. and value the convenience they provide. They don’t care about giving up ownership of their content or about having central organisations that can deactivate their accounts if they feel like and censor them with ease.

3. A Powerful Few Companies Rule

The early days of WordPress were characterised by people who were genuinely motivated about democratising publishing, making good software available to everyone at free or low cost. As WordPress grew and companies like Automattic became extremely profitable, things changed, and I think nowadays it’s all about making money.

It is impossible for a clan of powerful companies not to form in such situations. At present, I see Automattic and a few other big WordPress players who really determine the future of WordPress, as well as have tremendous power commercially. In the plugin space, for example, you have companies that focus purely on acquiring other successful plugins, then cross-promoting their plugins, leaving little chance for other players to compete, let alone new entrants.

I won’t even get into the confusion created between WordPress.com and WordPress.org, with WordPress.com being fully owned by Automattic and a big revenue driver for them, while WordPress.org is where you can actually download WordPress the software. Most new users will naturally gravitate towards the .com domain and then have to figure it out on their own.

4. Hard to Attract Talent

WordPress is no longer the cool kid on the block, and it’s hard to attract talented developers to dedicate their time to WordPress-related development. There are way cooler programming languages and projects that attract them these days. Add to that the fact that many of the existing long-time WP developers don’t really have strong JS skills and it’s really hard to find people.

I can’t blame talented coders who shy away from WordPress due to its antiquated code or core development teams that frequently resist change.

5. Uncontrolled Growth

WordPress has grown immensely from any data point you look at. Take WordCamp Europe, for example. It’s becoming a challenge to even find a venue that can accommodate the thousands of people who want to attend every year. This particular case might not be a big problem, but it is in other cases.

Take the plugin repository as another example. There are many thousands of plugins, and those which were around in the early days have a huge advantage over new entries, discouraging competition and innovation. As a user, it is a nightmare to find the most suitable plugin for your needs. Are we really expecting users to download and test 10 seemingly identical SEO/caching/contact form/social media plugins to decide which one they like best?

It’s also harder to control the quality of the plugins found in the repository, presenting a security nightmare because who knows if the next plugin you install is secure or not?

6. The Sense of Community Has Changed

I’ve perhaps already made references to the fact that the community is not the same as it was in the early years. Nowadays the focus at official events is on marketing and making money, while the official forums are not quite as helpful and tolerant as they once were. In my opinion, some forum moderators who have been there for many years should have moved on to something else a long time ago.

The reason I say that is that they have grown increasingly cynical, dismissive and outright arrogant over the years. The way they speak at times feels like they know that they are backed by the most powerful corporation in the space and are basically untouchables.

If you don’t know what I’m talking about, take a look at this post or even the screenshot below from a that I randomly came across earlier this week.

Nothing too dramatic on the face of it, but I don’t think it’s ok to use such a tone when replying to a user who had politely submitted a perfectly formatted and good question and repeatedly thanked the moderators in previous interactions.

At the same time as this brashness and arrogance is on display, we have the powers that be in WordPress becoming more and more espoused to a certain political view of the world. The best term I’ve found to describe how I feel WordPress leadership operates is the Chinese word Baizuo. Here’s an extract from Wikipedia:

the word “Baizuo” refers to those who “only care about topics such as immigration, minorities, LGBT rights and the environment”, but lack a concept of “real problems in the real world”. It is also used to describe those “hypocritical humanitarians who advocate political correctness just to satisfy their own sense of moral superiority”.

I don’t know about you, but this really hits home for me when I think of the WordPress community’s overall feel.

7. Hard to Recommend WordPress

Due mainly to the shift in expectations from the user side, I am finding it harder and harder to recommend WordPress to people these days. This is hard to accept for me as I spent many years being a WordPress evangelist through my writing on WP Mayor. It’s changing narrative is another issue.

Let’s consider a few examples. If a friend calls and says that they:

  • want to start a blog – I’m probably going to suggest taking a look at Ghost.
  • need to sell products online – Shopify is where I’m going to direct them.
  • want to know what frameworks they should learn – Laravel, React, Node are what I’m suggesting.

Perhaps the one use case where I would still recommend WordPress is if they want to build a company website or want to do something else that doesn’t fit tidily into what the hosted services offer. For example, an automated content aggregator about COVID-19 just to cite a recent example. Then yes, WordPress coupled with plugins such as WP RSS Aggregator would definitely be the number one tool for the job in my view.

I do miss the days when I would encourage everyone to have a voice online and promise them that the easiest way to do so was to spend a couple of hours getting their own site set up with self-hosted WordPress.

Final Thoughts

So there we go, this is just me reflecting on my time in WordPress and my current feelings. I’d welcome your views, even if you think I’ve gotten it all wrong. Ultimately, being a WordPress user, I’d really love WordPress to continue flourishing in the next 10 or 20 years and consolidate its position as a leader.

However, my feeling is that WordPress has lost its spark over the years due to the factors I mentioned and others. To make some comparisons, I feel the crypto space nowadays is very similar to the early days of WordPress. I see the same ethos of changing the world for the better, with open source having a strong presence, as well as incredible communities around Bitcoin and other crypto projects.

The uncertainty and frustration at certain decisions and ways of doing things are feelings that are shared by many people, and some have so far as to actually fork WordPress, creating ClassicPress, a project that is described as “Forked from #WordPress, without #Gutenberg. ClassicPress is a business-focused CMS. Powerful. Versatile. Predictable.”

1/2 I've noticed my Twitter feed's proportion of @GetClassicPress-related content is gradually but steadily increasing. This is good. CP has all the benefits of #WordPress without the petty politics, arbitrary decisions and autocratic control.

— ZigPress (@ZigPress) August 19, 2020

It remains to be seen whether a fork like this can have any real impact. In my view, it all hinges on whether they can provide any real benefit to new users versus what WordPress offers. If they manage to achieve that, then it would make sense for plugin developers to adapt their plugins to work with ClassicPress (many do by default since it’s a fork of WordPress) and then they can focus on building a superior plugin repository. Only then can they give WordPress a good challenge.

I’m not sure I’ve managed to accurately convey my thoughts and feelings across in this post, so I might revisit it with more ideas in the near future, but for now, it’s done its job in helping me sort out the things in my head.

Filed under: Tech

Best Software for Screenshots and Screencasts on a Mac

Last updated: February 26, 20232 Comments

screenshot tools mac

I take a lot of screenshots on a daily basis for various uses, so I make sure I use the best tools for this purpose.

Here are the various options out there.

Mac Inbuilt Screenshot Facility

Your Mac comes with an inbuilt screenshot facility that is accessed via keyboard shortcuts. If you use Dropbox, you will also get prompted to automatically save screenshots to the Screenshots folder on Dropbox, and a link to the latest saved screenshot will be copied to your clipboard, so you can instantly share that image with others if you need to.

If that covers all your needs, I don’t see any reason for using any apps, just learn the few shortcuts that you need and you’re good to go.

[Read more…]

Filed under: Tech

  • « Previous Page
  • 1
  • 2
  • 3
  • 4
  • 5
  • …
  • 10
  • Next Page »

Latest Padel Match

Jean Galea

Investor | Dad | Global Citizen | Athlete

Follow @jeangalea

  • My Padel Experience
  • Affiliate Disclaimer
  • Cookies
  • Contact

Copyright © 2006 - 2025 · Hosted at Kinsta · Built on the Genesis Framework