CSS: Super simple design guides

Needed to see if I had lined some stuff up correctly on a website I’m making. Came up with this simple CSS to add two guides to the page that I can move around freely in the browser developer console (just nudge their position around to where I need them).

It’s really simple, but for some reason didn’t think of it until now…

html::after {
    content: "";
    height: 1px;
    width: 100%;
    background: red;
    position: fixed;
    left: 0;
    bottom: 5px; /* Change this to move the guide horizontally */
html::before {
    content: "";
    height: 100%;
    width: 1px;
    background: red;
    position: fixed;
    top: 0;
    right: 5px; /* Change this to move the guide vertically */

PHP: Delete directory recursively

function delete_directory($dir)
    if( ! file_exists($dir))

    $it = new RecursiveDirectoryIterator($dir);
    $it = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST);

    foreach($it as $file)

PHP test script for cross origin proxy target

Just a script I used as target during some testing of a cross origin proxy to make sure whatever I thought should go through actually went through.

<?php // test.php
$info = [
    'method' => $_SERVER['REQUEST_METHOD'],
    'cookie' => $_COOKIE,
    'get' => $_GET,
    'post' => $_POST,
    'input' => file_get_contents('php://input'),
    'headers' => getallheaders(),

header('Content-Type: application/json; charset=utf-8');
header('X-SomeHeader: Some value');

PHP: Easy Javascript compression with closure compiler

Here’s how to fairly easily compress/minify Javascript by using the Closure Compiler Service API.

More or less verbatim how I’m currently doing it over at bibelstudiet.no in my script controller class, and so far it’s been working great. Just remember to cache the result on your server so that you’re not calling the API more than necessary. In my case it’s handled further up the chain by the parent class 🙂

header('Content-Type: text/javascript; charset=utf-8');

$files = ['foo.js', 'bar.js'];

$js = array_map('file_get_contents', $files);
$js = implode(PHP_EOL.PHP_EOL, $script);

$c = curl_init();
curl_setopt_array($ch, array
    CURLOPT_URL => 'https://closure-compiler.appspot.com/compile',
    CURLOPT_POSTFIELDS => http_build_query([
        'language' => 'ECMASCRIPT5',
        'output_info' => 'compiled_code',
        'output_format' => 'text',
        'compilation_level' => 'SIMPLE_OPTIMIZATIONS',
        'js_code' => $js,

if(curl_exec($ch) === FALSE)
    http_response_code(500) and exit("// ERROR: ".curl_error($c));

if(curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD ) <= 1)
    echo $js;


Note that if the compilation fails for any reason, the response will be empty. In that case I’ve chosen to output the original Javascript instead so the site doesn’t suddenly break. To check what went wrong, you need to repeat the request, but output_info set to errors instead of inline=”true”>compiled_code.

See their API documentation for more information about the parameters.

PHP: Array key whitelist and blacklist

Keep forgetting… writing it down so I can stop googling it…

function whitelist(array $array, array $whitelist)
    return array_intersect_key($array, array_flip($whitelist));

$filtered = whitelist($array, ['good1', 'good2', ... ]);
function blacklist(array $array, array $blacklist)
    return array_diff_key($array, array_flip($blacklist));

$filtered = blacklist($array, ['bad1', 'bad2', ...]);

With a hint of Social Ineptitude