23 May 2020
Heredoc is a useful tool for larger strings, though they have an indentation quirk which always put me off.
To quote from the PHP Requests-for-Comments:
The heredoc and nowdoc syntaxes have very rigid requirements. This has caused them to be, in-part, eschewed by developers because their usage in code can look ugly and harm readability.
PHP 7.3 introduces two changes to the syntax for heredoc and nowdoc syntaxes:
16 May 2020
Over the years, I’ve built a whole library of helper functions for working with dates in php, but I think they’re all a thing of the past now. Because I’ve been playing with Carbon Date library by Brian Nesbitt. It’s best described as Php’s
DateTime for humans.
Here follows a quick summary, but I’m just looking at the very tip of the iceberg. Lots more!
9 May 2020
I use modal popups all over the place in my web applications. The most frequent use is to make the user confirm deletion, either by typing DELETE into a form or by giving a reason for deleting the item in question. And I want to make this work in Laravel.
Note: this is klunky. I’ve been playing with Laravel for a few weeks and if I end up using it as an ongoing development platform, then yes, things will be rewritten.
2 May 2020
Familiar with password forms like this?
Restrictive password rules are not just frustating and unhelpful for people trying to manage logins for a multitude of sites; they (officially) do not do much for security on your website.
25 Apr 2020
Every time I take my hands off the keyboard and reach for the mouse, and drag the mouse across the desk, I’m losing time. I’m going slower and moving out of flow. It’s especially true when I’m working with a large monitor, or dual-monitors, and I have to moooove the mouse all the way to where it needs to me. Or the mouse cursor has disappeared on me, and I have to frantically slide the mouse until the movement traps my eyes and I can see where it is on the screen.
We all know the basics are Cmd+C for Copy, Cmd+X for Cut, and Cmd+V for Paste.
1 Aug 2019
These are my reading notes & a quick summary. If we’re aiming for big things, it’s easier to succeed if we get the small details right.
30 Oct 2018
Okay. So I had a problem with my Mac. Basically, about 10 minutes after a restart, the application switcher and the dock would stop working. Whichever application I had at the front (chrome, terminal, editor whatever) would be fine but I won’t be able to load or change to any other application. Alt-Ctrl-Esc would work, so I could kill applications, but that wasn’t particularly helpful.
The cause of the problem took FAR TOO LONG to track down. It was apache. More specifically, I had installed Homebrew’s Apache and the built-in version of apache hadn’t been disabled properly, so they both started up on a reboot. NO IDEA why this broke the dock.
(Note: I had setup apache using this guide macOS 10.14 Mojave Apache Setup: Multiple PHP Versions – and thank-you grav people, very helpful.)
If I killed all the httpd processes (
sudo pkill httpd) immediately after the restart, and then restarted apache I was fine but that wasn’t exactly a longterm solution.
This command should stop the running instance of Apache, and record that it should not be restarted.
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
But it gave the error:
/System/Library/LaunchDaemons/org.apache.httpd.plist: Could not find specified service
Basically, the native OSX instance was still running, but it had become separated from launchctl, so launchctl couldn’t unload or stop it.
First of all, I took the brew apache out of the picture
brew unlink httpd
/usr/sbin/httpd Okay, we can now FINALLY see the OSX apache. Try restarting it.
sudo apachectl restart
It gave this error:
Address already in use: AH00072: make_sock: could not bind to address [::]:80
That’s my problem. Because of this error, the apachectl process would start up, but the launchctl couldn’t shut it down properly.
A little bit of headscratching, but fixed by editing the apache config file (for OSX, not brew apache)
/private/etc/apache2/httpd.conf and setting:
Now the command
sudo apachectl restart works. And
sudo launchctl unload ... also works.
Restart the mac, check the processes and (hurrah) no httpd processes found.
Link brew version back up.
brew link httpd
brew services restart httpd
Normality restored. But it took me a long time to get there.
Pretty sure all this kicked off when I upgraded to Mojave 10.14.
TL;DR launchctl thought it had properly shut the apache process down, but the apachectl agent refused to stop because reasons, resulting in a decoupled process
25 Feb 2018
And I’m sure I’ve bumped into it before, but today I got confused all over again, so I’m writing it down so I know where to look the next time I get confused.
ls -l shows
-rwxr-xr-x@ 1 bronwen staff 22691 24 Feb 19:17 jquery.validate.min.js
@ sign means that the file has extended attributes
ls -l@ to see the extended attributes
-rwxr-xr-x@ 1 bronwen staff 46285 24 Feb 19:17 jquery.validate.js
com.apple.quarantine extended attributes are part of the file quarantine feature that Apple added yonks ago (OS X Leopard – 2009?). From the release notes for OS X Leopard
File Quarantine is a new feature in Leopard designed to protect users from trojan horse attacks. It allows applications which download file content from the Internet to place files in “quarantine” to indicate that the file could be from an untrustworthy source. An application quarantines a file simply by assigning values to one or more quarantine properties which preserve information about when and where the file come from.
To remove the file from quarantine:
xattr -d com.apple.quarantine *
And to remove ALL FILES in the folder from quarantine:
find . -iname '*.js' -print0 | xargs -0 xattr -d com.apple.quarantine
12 Jun 2016
I think it was Rasmus Lerdorf who once quipped PHP is like English. I can’t find the exact quotation, but it went something like “Yeah, PHP has quirks and isn’t the most elegant, but it’s simple overall and easy to get started. Look at English. Full of exceptions! But having a lot of exceptions and grammatical inconsistencies didn’t prevent English from becoming the dominant natural language.”
The analogy stuck with me. Like PHP, English is a relentlessly pragmatic language that’s relatively simple with a ton of gotchas.
From What do non-native English speakers think of the English language?
7 May 2016
Basically, root is no longer all powerful – there are some things even root account cannot do! Official name is “System Integrity Protection” I’m writing all this down so next time I run into the problem and start googling, I’ll find my own notes.
I was trying to rename / remove the previous version of php
sudo mv /usr/bin/php /usr/bin/php55
This failed with the error “Operation not permitted”
When I try
ls -lO /usr/bin/php I get:
-rwxr-xr-x 1 root wheel restricted,compressed 10577504 3 Dec 06:35 /usr/bin/php
restricted is a new flag for El Capitan. Basically Apple has added a whole new layer of security in OS X. They have taken away some privileges from root. If a file has a restricted flag, only restricted processes which are signed by Apple will be able to modify them. However, you can disable this security system by booting in recovery mode and disabling it in a Terminal by running the command:
And for all the exciting details: https://apple.stackexchange.com/questions/193368/what-is-the-rootless-feature-in-el-capitan-really