Skip to content

Instantly share code, notes, and snippets.

View amnuts's full-sized avatar

Andrew Collington amnuts

View GitHub Profile
@amnuts
amnuts / Dockerfile
Created October 3, 2023 10:59
Run PHPCompatibility/PHPCompatibility on a directory using docker containers
FROM php:8.2-cli
COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
RUN apt-get update && apt-get install -y --no-install-recommends git curl zip unzip \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /var/cache/apk/* /usr/share/man /tmp/*
@amnuts
amnuts / workflow.yml
Created August 29, 2023 11:00
View inputs on a GitHub Action
on:
workflow_dispatch:
inputs:
some_input:
default: "input value"
jobs:
do_something:
steps:
- name: "Show inputs"
run: echo "${{ toJSON(github.event.inputs) }}"
@amnuts
amnuts / DateTimeInterval.php
Created December 14, 2021 09:37
Extend the \DateInterval class to have a __toString() method, returning the string representation of the object
<?php
use DateInterval;
class DateTimeInterval extends DateInterval
{
/**
* Return the textual representation of an interval object
*
* @return string
import platform
import subprocess
def isMac() -> bool:
return platform.system() == 'Darwin'
def getMacProcessor() -> str:
return subprocess.check_output(['sysctl', '-n', 'machdep.cpu.brand_string']).decode('utf-8').rstrip()
@amnuts
amnuts / 01_setting_up_wsl.md
Last active November 20, 2021 20:53
setting up WSL2

These are just some notes on my setting up of WSL

  • 02_new_location.md
    I wanted to run WSL and the WSL docker containers from a location that wasn't my C drive, and this explains how
  • 03_defender.md
    Excluding WSL files from Windows Defender apparently helps to increase speed
  • 04_setup.md
    General commands to set things up that I wanted
@amnuts
amnuts / UnitTestCase.php
Created October 14, 2021 08:44
PHPUnit: mock an iterator
<?php
namespace Tests;
use ArrayIterator;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
class UnitTestCase extends TestCase
{
@amnuts
amnuts / warm.php
Last active April 27, 2021 08:04
Fake pre-warm op-cache files for testing https://github.com/amnuts/opcache-gui
<?php
$nums = range(0, 5000);
foreach ($nums as $i) {
$path = __DIR__."/files/c{$i}.php";
if (file_exists($path)) {
break;
}
file_put_contents($path, "<?php\n\nfunction c{$i}() { return {$i}; }\n\n");
@amnuts
amnuts / propSearch.js
Created October 6, 2020 14:59
Helpers to see if object has all props or any of the props
const hasAllProps = function(list, within) {
list.forEach(function(e) {
if (!within.hasOwnProperty(e) || within[e] == "") {
return false;
}
});
return true;
};
const hasAnyProps = function(list, within) {
@amnuts
amnuts / directory-reflection.php
Created January 6, 2020 18:04
Using Better Reflection to get details on classes in multiple directories
<?php
use Roave\BetterReflection\BetterReflection;
use Roave\BetterReflection\Reflector\ClassReflector;
use Roave\BetterReflection\SourceLocator\Type\DirectoriesSourceLocator;
require __DIR__ . '/vendor/autoload.php';
$refSubscriptions = [];
@amnuts
amnuts / datetime.php
Created June 4, 2019 15:57
PHP date/time conversion example
<?php
foreach (range(1, 12) as $m) {
$elStart = new \DateTimeImmutable("2019-{$m}-10 23:50:00", new \DateTimeZone('Europe/London'));
$elEnd = $elStart->add(new \DateInterval('PT5H'));
$utcStart = $elStart->setTimezone(new \DateTimeZone('UTC'));
$utcEnd = $elEnd->setTimezone(new \DateTimeZone('UTC'));
printf("E/L: %s / %s, UTC: %s / %s\n",
$elStart->format(DATE_RFC822),
$elEnd->format(DATE_RFC822),