Nearly completely free PHP hosting forever with InfinityFree

Looking for some free hosting for my very simple test project, I have stepped into InfinityFree offer.

They’re probably the best in the entire universe, because they bring you a fabulous offer (nearly free forever, absolutely no ads or obligations, no credit card or this kind if stuff, no caps). But… please, read the below carefully, before actually opening a champagne bottle…

Read More “Nearly completely free PHP hosting forever with InfinityFree”

Various .gif optimization methods vs. file size

I have captured my cool spinner as a .gif animation. It has 241 frames, last 8 seconds and has 3.59 MB (3 768 320 bytes) size.

Quite huge, to be honest, so I decided to play a little bit with fabulous’s Animated GIF optimizer and compressor tool to see, if I can get down a little bit with it.

BTW: Consider taking a headache pills before pressing the button below! :) You’re going to see a really huge number of spinning gear wheels in this article. Believe me or not, you can get really, really wako out of watching them… spinning around… spinning around… spinning… around… around… arrrr! :)

Read More “Various .gif optimization methods vs. file size”

Translating software to Hindi language

If you consider translating your software, cloud service or game into Hingi language, you have two options:

The first option incurs some more costs due to the needs of hiring special translator and sometimes due to the need of adjusting currently used font to support all 48 Devanagari alphabet‘s characters.

I did some short research, both public and private, to see, if supporting natural Hindi language supports additional expenses from our app’s budget. And I want to share with my findings.

Read More “Translating software to Hindi language”

Reload page without cache in Microsoft Edge

Pressing Ctrl+Shift+R for Hard Refresh (instead of Ctrl+R for Normal Refresh) may not always invalidate cache of the page that you are currently viewing.

If you want to truly reload page from server (bypassing local copy stored in cache) then you must:

  • Press Ctrl+Shift+I to open Dev Tools for a moment
  • Right-click Refresh button in the toolbar
  • Click Empty cache and hard refresh option in context menu

An example:

Since Edge is based on Chromium, the very same trick will work in Chrome as well.

Source: Super User.

Shorthand notation for Yii commands in Git Bash and Windows Terminal

Developing PHP applications in Yii 2 makes you use Yii command-line commands quite often (for example for migrations). Since I am a Windows maniac that uses XAMPP, I have to type:

php yii

before each command each and every time.

A bit tiring so I wanted to make this a little bit easy. For example, to be able to type:

y migrate

instead of:

php yii migrate

Getting there was quite easy for Windows scripts and using Windows Terminal. Things has got a little bit complicated when trying to achieve the same in PhpStorm. Which uses GitBash instead of Windows Terminal.

Read More “Shorthand notation for Yii commands in Git Bash and Windows Terminal”

Deleting or moving selection in Paint reveals emptiness…

…that is alpha channel instead of (as for past 30+ years) background color.

This is introduced in September 2023 software update and naturally cannot be turned off by means of changing anything in configuration. It is always one Microsoft way.

The easiest and fastest way of getting rid of this, is to get “old” Paint back.

Read More “Deleting or moving selection in Paint reveals emptiness…”

Customize delete confirmation in GridView

As nearly everything in Yii 2, you are starting from scratch with out-of-the-box solution for displaying models in grids (using yii\grid\GridView). Usually last among columns ($columns) of such grid there is an button column (yii\grid\ActionColumn) that serves basic operations for corresponding row or item. One of such column’s buttons there’s a delete button.

Everything is ready for you, to be used without much effort, but only as long as you are building an English-only application, as translating or customizing delete confirmation in such scenario isn’t a super-easy task. One of a great approaches is given in here: How to create a custom delete button?.

But, it works just great, if you want to customize just a single delete button of a one or maybe two grid view. What about, if you have a grid view for each and every of your data model?

Read More “Customize delete confirmation in GridView”

One of two model’s attributes must be provided

Suppose that we have any Yii 2 model with to and from attributes. And we want to make sure that either of them is provided. So we need a logical OR relation between these two attributes.

A slightly modified Stack Overflow example will do the trick:

['from', 'required', 'when' => function($model) {
    return !is_numeric($model->to);
}, 'message' => Yii::t('models', 'Either "to" or "from" must be provided.')],

Using a closure (an anonymous function) is all the “magic” here. We use it as a value $when of property of yii\validators\Validator (actually yii\validators\RequiredValidator in this case).

To basically tell Yii 2 that it must validate whether from does not have null or empty value if, and only if to does not have null or empty value as well.

Adding tags to git repository

This is just a quick memo to remember how to add tags to repositories.

For exiting commit:

  • List all commits: git log --pretty=oneline
  • Pick the one you wish to tag (first seven letters of the has are enough), i.e.: 32c274c
  • Add a tag: git tag -a 0.1.0 32c274c -m "First version before general refactor"

For latest commit: git tag -a 1.4.5 -m "My version 1.4.5".

Tags are always added to local repository and never pushed to remote by default. You have to explicitly tell git to do so. For example, by executing git push --tags.

More info in Git Basics – Tagging and Managing releases in a repository.

Read More “Adding tags to git repository”

Convert HEIC images into JPG or PNG [updated]

In the original version this article was discussing how to load HEIC files in IrfanView under Windows 11. In order to convert them to a bit more natural, a bit less Apple formats like .png.

Previously I was doing such conversion on my PC using CopyTrans HEIC Codec. At the beginning of 2024 however, CopyTrans’ management hit their heads really hard and figured out that it will be so cool to start distributing their software in the way that it leaves an unbelievable mess on user’s computer (including creating icons and shortcuts everywhere, adding dozens of right-click menu items and even creating some fake disk available in This PC window).

Seeing this, I did the only thing I could do. I have flushed CopyTrans crap in the toilet and started using fabulous Convertio — HEIC Converter. Now, I am doing all the HEIC → JPEG conversion in the cloud.

Hit the button below, if you however wish to do such conversion the old-skull way, on your PC, with having fun of installing all the crap that CopyTrans HEIC Codec brings together with it.

Read More “Convert HEIC images into JPG or PNG [updated]”

Bring back ALL the original Windows 11 apps

Many users starts their journey with Windows from uninstalling all the crap that ships with the system. Sometimes you may go a bit too far with that process and remove something that you actually need or an app that (when missing) causes Windows to act strangely.

In such case you can run Windows PowerShell as an administrator and execute the following command:

Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}

Keep in mind that it will reinstall all the apps that your Windows originally came with! In my case it was 115 apps added (I didn’t even realized before that I removed that much crap out of my Windows 11).

Setting git user globally or for given repository

This is just a quick note to future self about operations on git user and emails address.

1. Read current setting for given repository:

cd template-repository
git config
git config

2. Read global settings (affects all new repositories on given PC):

git config --global
git config --global

3. Change current setting for given repository:

cd template-repository
git config "johnny.bravo"
git config ""

4. Change global settings (affects all new repositories on given PC):

git config --global "johnny.bravo"
git config --global ""

You may also want to read about setting your commit email address, setting your username in Git or blocking command line pushes that expose your personal email address in GitHub Help guide.

If you wish to check or change your GitHub user in PhpStorm then Ctrl+Alt+SGitHubEnter.

Reviewing your current email settings in GitHub can also sound like a good idea.

Rename Bluetooth devices in Windows 11 22H2

Starting with 22H2 edition of Windows 11 it seems impossible to rename Bluetooth devices. Folks at Microsoft was cleaver enough to figure out that you don’t need such functionality. Nice.

Pity that I really need it, because I have two exactly the same headphones (one at home and one at office) that does not support auto-connect and must be manually connected. I never know which one I am connecting, because both are named “Edifier W600BT” in my system.

The only solution that I figured out is to use tiny software called BtDeviceRenamer (here is a direct link to downloadable .exe file). Please, be aware that since it directly interface with devices, it can (and probably will be) detected by Windows or your anti-virus software as a possible threat.

EDIT: Nope, even this one fails. Windows 11 enforces its own name upon next login or after just a couple of minutes. Thank you, Microsoft, for knowing better what we need or want.

Fix for up-side down duplex scanning in WIA

When scanning using WIA (Windows Image Acquisition) through certain apps (NAPS2 — Not Another PDF Scanner 2 in my case) and on certain scanners (Canon MX920 in my case), you may run into situation where all odd pages are scanned up-side down. Even though they’re all fed correctly to the ADF:

This is certainly not your software problem and most likely not WIA’s one, but probably comes from the fact how your scanner driver “talks” through WIA to your scanning software.

Fortunately, fix is very simple.

Read More “Fix for up-side down duplex scanning in WIA”

Use deliveredto: Gmail filter to capture non-typical SPAM

For past 3-4 months I started experiencing a very weird (?) kind of spam:

  • Always landing in Gmail’s Spam folder
  • That I couldn’t filter out using typical methods


  • Somehow sender (and sender’s domain) was always white-listed and legit
  • Sender was always different (auto-generated)
  • Recipient was also always different and always not my mailbox(es)

In fact, the only common thing about these messages was that always landed in my Spam box in three copies, ultimately (no matter what the recipient was) delivered to my personal and company mailbox.

The word “delivered to” told me what solution I should consider.

Read More “Use deliveredto: Gmail filter to capture non-typical SPAM”

KeePass’ auto-type feature vs. browser’s password manager

I personally adore KeePass! But… mainly not for being my private Fort Knox and my single source of all passwords. As I can have the same with every browser’s password manager. What is an absolutely fabulous feature of KeePass, is its powerful auto-type mechanism.

Not only, this is easier and more convenient, but — the most important — it is by far, much, much more safe (see details later into this article)!

Now, the biggest problem is that I also have and I am also using password manager in my browser (similarly beloved Microsoft Edge; screw you Google!). And when I press Ctrl+U to open corresponding URL in a browser, I have login field already prefilled. Usually with an incorrect login, as I have a lot of account saved for every web service in my password manager.

Fortunately, there’s a solution even for this.

Read More “KeePass’ auto-type feature vs. browser’s password manager”

Quick changes in repository name

This is just a quick memo to future self on what should be done locally, if I rename some GitHub repo:

git pull
git push
git prune
git remote prune origin
git status

Or even faster:

git pull && git push && git prune && git remote prune origin && git status

I am changing a lot of my repos’ names to figure out some static scheme. This is a “toolset” for that process.

How to check GitHub user’s registration date…

…and other basic account information for any GitHub user?

There are at least two ways of getting this information:

  • the “clickable” way and
  • public API call

The documentation for API call tells about required token, when calling it from cURL or JavaScript.

But my tests has proven that simply pasting this URL to browsers’ address bar doesn’t require any token and works even if you are not logged in to any GitHub account.

Read More “How to check GitHub user’s registration date…”