I am currently evaluating PicoCss V2 in Astro project. PicoCss is a CSS / SCSS framework I used for some of my projects because it is small and brings sufficient styling for most HTML Elements. It has integrated light and dark mode, but no theme switcher.
So i was looking for one and found this one for Pico V1:
https://github.com/RWDevelopment/theme_switch
Obfuscate Web Component
Typically, when integrating emails into websites, I obfuscate the email address to prevent spam bots from collecting them. For React, there were already components that handled this task; however, without React, I couldn’t find a suitable solution.
Therefore, I created a web component: obfuscate-wc that now provides an HTML element capable of obfuscating your email (and some other contact data).
<obfuscate-link id="obfuscate" email="aXZvQGxvY2FsLmRldg==">custom link</obfuscate-link>
Code language: HTML, XML (xml)
Continue reading “Obfuscate Web Component” Composer bump
Do you miss that the version numbers of your PHP dependencies are automatically updated in the composer.json file after a composer update
?
Just like npm or yarn are updating the version numbers in the package.json file.
Then upgrade to Composer 2.4 and say hi to composer dump
.
This version introduced a new command composer bump
which will update your composer.json file to the precise version which is pinned in the composer.lock file.
It basically will sync the composer.json with the composer.lock versions and will keep the caret version constraints, so you can still make minor or patch version upgrades.
Testing PDF creation with headless chrome and PHP
I had the task the other day to use a headless chrome to generate PDF files from websites in a PHP app.
The plan was to use chrome-php with a headless chrome to generate the PDF.
Usually you would install chrome/chromium on a linux server via apt and just run chrome from the PATH with chrome.
Since i was on shared hosting i was not sure if this was possible since i was not allowed to run apt commands.
So i tried to use Puppeteer which ships a headless chrome executable and use just this directly.
I installed Puppeteer with npm locally and uploaded the chrome executable to the shared hosting.
Puppeteer will place the headless chrome in the .cache dir in your home directory, f.e.:
~/.cache/puppeteer/chrome/linux-113.0.5672.63/chrome-linux64/chrome
Upload:
scp -r ~/.cache/puppeteer/chrome/linux-113.0.5672.63/chrome-linux64 me@sharedhosting:/usr/home/test
10 reasons to replace your CMS with Astro
I replaced another CMS powered site with an Astro powered static site the other day.
Here is why:
Import data into MySql with docker-compose
Having a docker-compose setup which involves a Database like Mysql or MariaDB, then at some point you might want to import data into those Databases.
There are several ways to import the data in your docker-compose setup.
- Using a volume for import data
- Using mysql client from commandline with docker-compose exec
- Using phpmyadmin in docker-compose setup
- Using a mysql GUI client on the host and connect to the DB in the Docker container
So let’s see how we can do this:
Continue reading “Import data into MySql with docker-compose”Stream an image from Symfony controller
When sending an image/file from a Symfony controller you would usually read the file from filesystem.
This you can do by passing the file path to the BinaryFileResponse class and return it in the controller, as described in the docs:
https://symfony.com/doc/current/components/http_foundation.html#serving-files
use Symfony\Component\HttpFoundation\BinaryFileResponse;
$file = 'path/to/file.txt';
$response = new BinaryFileResponse($file);
Code language: PHP (php)
But in some cases you might want to create an image dynamically and return it directly from the controller without storing it on the filesystem.
So you can create your image with the GD library and directly stream the GDImage object from the symfony controller with the StreamedResponse class.
Doctrine migrations and Postgis
Using Postgres with the Postgis extension to integrate GeoData / GIS functionality in your project is not natively supported by Doctrine and Doctrine migrations.
First you have to add the extension to Postgres, even if you use the Postgis docker image like postgis/postgis:14-3.3-alpine
.
So add this SQL statement to the up method of your first migration:$this->addSql('CREATE EXTENSION IF NOT EXISTS postgis;');
and the DROP statement for the extension to the down method:$this->addSql('DROP EXTENSION postgis;');
Now, when using Doctrine with Postgres and Postgis extension, migrations still behave a bit odd and try to remove Sequences created by Postgis, because Doctrine migrations does not take Postgis extension’ s built-in Sequences into account.
Continue reading “Doctrine migrations and Postgis”Show kubernetes secrets with k9s
If you want to show decrypted secrets of your kubernetes (k8s) deployment with k9s try this:
First choose the namespace you want to check the secrets in by typing a colon and namespace
Continue reading “Show kubernetes secrets with k9s”Symfony deprecation log channel
Are you annoyed of too many deprecation warnings in you logs of your symfony app?
Probably yes because it is really a lot of noise.
However deprecation logs are still useful to ensure future compatibility of your app.
So since version 5.1 symfony will log deprecations to a dedicated log channel when it exists and ships with this monolog config:
monolog:
channels:
- deprecation # Deprecations are logged in the dedicated "deprecation" channel when it exists
Code language: PHP (php)
This is added already in the recipe and ships when installing symfony.
Ok, but the handler for this deprecation channel is not configured, so you have to do this yourself.
How? Add this to your monolog config: