How to develop a library and a project in PHP concurrently

I keep forgetting the best way to do this, so thought it best to write it down.

Suppose you are building a library and an example project that implements it. You can do this in a single repository with an example folder, for small examples.

But for larger examples you might want to use a separate repository, with it’s own issues and documentation.

This can make it a hassle to work with the library and keep the project in sync.

Let’s say these are mylibrary and myproject which is using the library. Let’s assume you’re using PHP and Composer. mylibrary is at version 0.1 but there are newer commits in the develop branch.

Require a Git repository

$ cd myproject
$ composer config vcs
$ composer require me/mylibrary:0.1 --prefer-source

--prefer-source means Composer will install from source if there is one, the result is a git repository.

Switch to the develop branch

Once installed it’s then easy to switch to any other branch you want to work on:

$ cd vendor/me/mylibrary; git switch develop

You don’t have to register the repository with packagist if you follow this workflow! As a bonus when after you run composer update in myproject the mylibrary directory sticks with the branch.

Daily Clean Trash

I use trash-cli on every linux install, and today I realised it’s not actually removing files from the trash, so I’ve set up this little scheduled task to delete items that have been trashed at least 30 days ago:

$ crontab -e
# daily trash clean
@daily /usr/bin/trash-empty 30

OpenSUSE Tumbleweed Installation Notes

For future reference here are some issues I’ve come across installing and setting up Tumbleweed on my workstation.

The reason for switching from macOS is that a commercial operating system focused on services builts in too many distractions for me. Also long term the Apple hardware is priced above what I’m prepared to pay, so it makes sense for me to look for an alternative.

Tumbleweed is a rolling distribution which makes for a long term maintained setup, and packages are tested thoroughly but are quickly updated.

So far these are just little niggles.

Day one issues

  • The old Grub menu from my previous Linux installation wasn’t wiped, I simply reinstalled making sure all existing partitions were deleted before partitioning.
  • avahi is not allowed to start itself due to security policies. This was because dbus needed to restart after avahi installed configuration into it. I could have rebooted.
  • My Apple Magic Keyboard must be selected in KDE after the installation as it’s not an option during the installation routine.
  • Opening ports for OpenSSH means that they’re open on the public zone. I didn’t realise this as I want to use the home zone as default.Yast Firewall sorted this out.
  • After installing Lutris, Steam and Proton Experimental, certain games would not start, due to missing vulkan drivers. This Lutris Wiki link describes the issue, I had to search Yast Software for vulkan showed I had to install libvulkan_intel and libvulkan_intel-32bit.

Interesting links

  • There’s a nice tiling window manager script for KDE called Krohnkite. Meta-D conflicted with show desktop, after reassigning the latter I still think that shortcut doesn’t do anything, though.

So far so good. The interface is more snappy than macOS and more powerful, and the system is working nicely.

Bye Twitter

I’ve deactivated my Twitter account.

Twitter didn’t like it, you get unceremoniously dumped out of the service with an error message. All your tweets disappear. Like you weren’t welcome anyway, social media with a nasty streak.

The problem with Twitter is that there’s only space for black/white arguments and replies. It harms compassion and collaboration. It’s algorithms are optimised for making money, not your wellbeing.

Let’s go make something beautiful instead with all the time saved!

Added a little timestamp to my zsh prompt and it makes all the difference. Open ~/.zshrc and add:

# prompt time
preexec () {
  DATE=$(date +"%H:%M:%S")
  echo -e "\033[1A\033[${C}C ${DATE} "

There are no app stores and streaming services, only content marketplaces.

elementaryOS 6 refresh

default elementaryOS desktop

I refreshed the olde Thinkpad to elementaryOS 6, and thought it would be useful to me and others to document the process.

As they don’t support an upgrade from elementaryOS 5, I backed up my repositories using repoman and paved the rest, as I use this laptop for side-projects and have a sync solution in place.

The first install resulted in a black screen (perhaps it went into standby and did not respond to mouse or keyboard presses), but a restart continued the installation successfully. Further OS setup was straightforward and simple. I thought about creating a /home partition but as I was happy with my migration process I decided to go with the convenient default.

The first app to install I had to get from FlatHub, which is nicely integrated. This first flatpakref loaded on the second try and installed using the integration included in the OS.

Syncthing’s introducer feature allows a device to introduce shares to connected devices and this helps setting up the shared folder containing my new-device scripts. It’s important to untick “Receive only” so that it’s a two way sync.

This post will be updated as more thoughts become available.

Today I’m trying to send my posts to Twitter, directly via WordPress. Let’s see if this works.

Perhaps people use the Desktop for their files because of applications using the Documents folder.

Today, I setup my Xbox 360 in order to play some audio cds 🙈😂

It’s not asynchronous communication when you sit around waiting for the answer.

So I spent most of the evening adding drag and drop physics to a card sprite and moving it around. I fairly underestimated the amount of learning required to use this game engine!

I think giving him minutes would do the trick, yes. (See image)

Screenshot of player demands minutes miscalculation bug

Hot take: I feel the web needs an improved markup + styling system, but more practical and reduced in functionality. This way more browsers can participate. Web pages don’t need a realistic ray casting rendering system for CSS, despite of how nice this would look — it has zero business benefits and discriminates against low performing devices. Instead, have a look at a video game engine with html5 output, if that’s what you want.

Found a cool resource, WP Kama notes on Sitemap on the WordPress sitemap feature I helped create, including many scenarios and a performance optimisation! It’s really satisfying to see the care given to something they find has usefulness. 👍

Really like the site as well, it has more reference information than the official codex.