Skip to content

Instantly share code, notes, and snippets.

View AlexVanderbist's full-sized avatar
🌚
Dark mode propaganda account

Alex Vanderbist AlexVanderbist

🌚
Dark mode propaganda account
View GitHub Profile
function measure(string $label = 'default') {
static $starts;
if ($starts[$label]) {
dump($label . ' took '. (microtime(true) - $starts[$label]) . ' seconds');
}
$starts[$label] = microtime(true);
}
@AlexVanderbist
AlexVanderbist / opendb.sh
Created September 17, 2020 16:21
`opendb` command - opens the database for a Laravel app in your GUI
opendb () {
[ ! -f .env ] && { echo "No .env file found."; exit 1; }
DB_CONNECTION=$(grep DB_CONNECTION .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_HOST=$(grep DB_HOST .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_PORT=$(grep DB_PORT .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_DATABASE=$(grep DB_DATABASE .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_USERNAME=$(grep DB_USERNAME .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_PASSWORD=$(grep DB_PASSWORD .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
@AlexVanderbist
AlexVanderbist / ScopeFilter.php
Created December 6, 2019 15:07
laravel-query-builder scope filter with model binding
<?php
namespace App\Http\Filters;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
use ReflectionObject;
use Spatie\QueryBuilder\Filters\Filter;
@AlexVanderbist
AlexVanderbist / opendb-ddev.sh
Created September 17, 2020 16:39
opendb for ddev
opendb () {
unset GREP_OPTIONS
PORT="$(ddev describe | ggrep -Pio "(?<=port=)[0-9]*")"
open mysql://db:db@127.0.0.1:${PORT}/db
}
@AlexVanderbist
AlexVanderbist / alfred_search_engine_url
Created April 20, 2021 08:53
Explain shell Alfred search engine
alfred://customsearch/Explain%20shell%20%27%7Bquery%7D%27/explain/utf8/%2B/https%3A%2F%2Fexplainshell.com%2Fexplain%3Fcmd%3D%7Bquery%7D
@AlexVanderbist
AlexVanderbist / fn-live-template-phpstorm.xml
Created July 22, 2020 13:58
PhpStorm arrow function live template
<template name="fn" value="fn ($TYPE$ $INSTANCE$) =&gt; $INSTANCE$$END$" description="Arrow function" toReformat="false" toShortenFQNames="true">
<variable name="TYPE" expression="completeSmart()" defaultValue="" alwaysStopAt="true" />
<variable name="INSTANCE" expression="concat(&quot;$&quot;, camelCase(TYPE))" defaultValue="" alwaysStopAt="false" />
<context>
<option name="PHP Expression" value="true" />
<option name="PHP Statement" value="true" />
</context>
</template>

Ironisch genoeg eindigt mijn stage met lagere temperaturen dan dat het begonnen is in de winter...

@AlexVanderbist
AlexVanderbist / blog_day_58.md
Last active April 20, 2017 08:57
Blog dag #58

Vandaag is het tijd om de puntjes op de i te zetten voor de twee nieuwe packages. Beiden hebben nog wat basic tests en documentatie nodig en moeten dan getagd worden. Gelukkig krijg ik hier wel wat hulp. Zo kunnen beide packages tegen de middag als v1.0.0 getagged worden. Tegen 13u zitten ze allebei al op 1.0.1, je mist bijna altijd wel iets.

Het is altijd leuk als je werk geapprecieerd wordt. Zo is de Flysystem integratie opgenomen in de officiële Laravel documentatie!

De rest van de dag probeer ik bij wijze van ultieme integratietest de Dropbox driver te gebruiken in het backup pakket. Iets dat ik waarschijnlijk zelf ook zal gebruiken zo. Dat ging op eerste zicht zonder problemen maar bij het oplijsten van de backups ging het mis. Zo duurde het redelijk lang (3 minuten) om gewoon een lijstje van 2 backups weer te geven... Na een beetje debuggen werd het duidelijk dat heel wat simpele filesystems calls (zoals bv. kijken of een bestand bestaat) meerdere keren werden uitgevoerd binnen de dezelfde backup coll

Nog maar 4 dagen! Om sterk te eindigen begin ik vandaag niet aan één maar twee nieuwe packages...

De Dropbox API bestaat ondertussen al enkele jaren en is redelijk goed geintegreerd in de opensource wereld. Zo zijn er binnen PHP alleen al een aantal third party Dropbox SDKs bovenop de officiele PHP SDK van Dropbox zelf. Ook in de andere packages die ze hier maken wordt Dropbox vaak gebruikt d.m.v. Flysystem in Laravel.

Allemaal goed en wel tot Dropbox beslist de stekker eruit te trekken en enkel nog support te bieden voor hun v2 API. Een officiele PHP SDK komt er ook niet meer. Tijd om het heft in eigen handen te nemen dus.

Aangezien een volledige Dropbox PHP SDK schrijven nogal veel werk is (denk maar aan alle Dropbox specifieke share opties) hebben we beslist enkel de endpoints nodig voor Flysystem integratie te voorzien. Als tweede package gaan we dan ook de Flysystem integratie zelf voorzien.

Zo gezegd zo gedaan, de rest van de dag werk ik verder aan de eerste simpele endpoints voor directory listing

Hoezo zit ik al aan de laatste week van m'n stage? De tijd is echt gevlogen (de weekends aan de andere kant ook wel...). Voor de laatste week staat er nog niet veel op het programma. Ik zal waarschijnlijk nog wat verder werken aan het geheime project en de rest van de week wat dingen afronden.

Vandaag werk ik aan het menubar icoontje. Ook dat ondersteund electron native en cross-platform maar wel binnen de main thread. Spijtig genoeg zit alle applicatie logica in de Vue app. Als een menu item uit het contextmenu van het icoontje een actie wil aanroepen zou er dus in principe een open browser/electron window moeten zijn. Gelukkig heeft Electron ook hieraan gedacht en kunnen onzichtbare browserwindows worden geopend specifiek voor dit soort gevallen. In eerste instantie vond ik het nogal een louche oplossing maar in praktijk is het meer dan snel genoeg, zeker voor wat wij proberen te doen.

Het is vandaag ook paasmaandag, dat wil hier zeggen dat we gaan uit-eten. Dat gebeurt zoals altijd bij een kleine Italiaa