Categories
Dev

PHP floating point precision

I was attempting to find if the result of a calculation returned a number with any decimals.

So, I was doing something like:

$num=123.1/0.1;
if(floor($num)!=$num){
  echo "has decimals";
}else{
  echo "doesn't have decimals";
}
//has decimals

To my surprise the code above returns: ‘has decimals’

If you do the math in any calculator the result of 123.1/0.1=1231 and in fact that is what PHP displays when you do:

echo 123.1/0.1;
//1231

But internally PHP stores the value in float and when you do:

echo floor(123.1/0.1);
//1230

As I only need to know if the number has any decimals, I ended up doing:

$num=round(123.1/0.1,1);
if(floor($num)!=$num){
  echo "has decimals";
}else{
  echo "doesn't have decimals";
}

I completely understand why Steve Wozniak never got round to add floating point support on BASIC, no sane person wants to deal with floating points.

Categories
Dev Mac

Change macOS terminal shell to Bash 5

Since macOS Catalina that zsh is the default shell. From what I could understand this was caused by a change in Bash license to GPL after version 3.

So, since version 3 of Bash is pretty old they changed the default to zsh.

Since Homebrew is not yet fully Apple Silicon compatible using Homebrew was not an option. If your Mac runs Intel a simple brew install bash will install a newer version of Bash on /usr/local/bin/bash (if you had Homebrew installed obviously). You can follow the updates for Homebrew compatibility with Apple Silicon here.

This leaves us with installing Bash the good old fashion way:

curl -O https://ftp.gnu.org/gnu/bash/bash-5.1.tar.gz
tar xzf bash-5.1.tar.gz
cd bash-5.1
./configure --prefix=/usr/local && make && sudo make install

After that is done, you just need to add Bash to your available shells:

sudo bash -c "echo /usr/local/bin/bash >> /private/etc/shells"

And make Bash the active one:

chsh -s /usr/local/bin/bash

Open a new terminal window or restart your terminal app and check with:

echo "$SHELL"
bash --version

Categories
Dev Mac Tech

MAMP Pro – Oops, something is badly wrong!

Out of the blue, MAMP Pro started presenting me with an alert when I tried opening the app:

Oops, something is badly wrong!
Either you did not provide the necessary admin credentials or the MAMP PRO package could not be initialized correctly. You can either restart the application and try again or re-install the software.

I contacted support, they advised me to uninstall/reinstall and that didn’t help. The alert kept on being the only thing I saw when I tried to start the app and then it would just close.

After doing some digging around the web, I ended up here and the following command fixed it:

sudo launchctl load -w /Library/LaunchDaemons/de.appsolute.mampprohelper.plist

I suspect this might have been caused because I manually disabled MAMP Pro helper Launch Agent on macOS. Still not sure why MAMP Pro needs that running to start the app but it looks like it does.

BTW: the databases and settings for MAMP Pro are not in /Applications/MAMP but in /Library/Application Support/appsolute/MAMP PRO/

Categories
Dev

Change dropdown align to right underscores.me

The dropdown sub menus for underscores.me by default align left.

If you need to change it to align right, go into style.css “# Menus” and change the following lines:


.main-navigation ul li:hover > ul,
.main-navigation ul li.focus > ul {
left: auto;
right: 0%;
}

.main-navigation ul ul li:hover > ul,
.main-navigation ul ul li.focus > ul {
right: 100%;
}

Categories
Dev Tech

Adding Placeholder attribute to Tokeninput jQuery plugin

I was having a hard time to get the placeholder attribute to work with Tokeninput jQuery plugin.

First I managed to get it to show up by adding attr(‘placeholder’) to the onReady:
$("#myInput").tokenInput("/url/to/your/script/"){
onReady: function(){ $('#token-input-myInput').attr('placeholder','type here...'); }
};

It worked but every time it lost focus the resize of the input field would partially hide it. So, I tweaked with the code inside jquery.tokeninput.js and after line 436 (declaration of var escaped) added:
if(input_box.attr('placeholder')!=undefined){
escaped = input_box.attr('placeholder');
}

It is not pretty but it works 🙂