Skip to content

Instantly share code, notes, and snippets.

@halkyon
halkyon / gist:5580709
Last active December 17, 2015 08:29
Creates a bunch of pages in SilverStripe for testing. It'll take a long time to run, but good for testing how your site performs with a huge amount of pages. Put it into your `mysite/tasks` directory, then invoke the script by running `sake dev/tasks/GeneratePagesTask flush=1`
<?php
class GeneratePagesTask extends BuildTask {
public function run($request) {
for($i = 1; $i < 10; $i++) {
$segment = sprintf('page-top-level-%d', $i);
$p1 = SiteTree::get_by_link($segment);
if(!($p1 && $p1->exists())) {
echo "Creating page $i...";
@halkyon
halkyon / pre-commit
Last active July 11, 2017 03:42
pre-commit script to run php-cs-fixer against changed PHP scripts
#!/bin/bash
if [ ! -f .php_cs ]; then
if [ ! -f .php_cs.dist ]; then
exit
fi
fi
EXECUTABLE_NAME="php-cs-fixer"
LOCATIONS=(
"vendor/bin/$EXECUTABLE_NAME"
@halkyon
halkyon / switch_php.sh
Last active September 2, 2017 00:02
Install and switch between PHP versions (5.6, 7.0, and 7.1) using deb.sury.org packages
#!/bin/bash
# todo: support fpm as well as apache
# use bash "strict mode" http://redsymbol.net/articles/unofficial-bash-strict-mode/
set -euo pipefail
IFS=$'\n\t'
if [ $EUID -ne 0 ]; then
echo "This script must be run as root"
@halkyon
halkyon / gist:ec08493c2906c1539a49
Last active June 18, 2019 23:08
BuildTask for SilverStripe to remove obsolete tables, columns and indexes from the database
<?php
/**
* Remove old tables, columns, and indexes from a SilverStripe database.
*
* Define your obsolete tables, columns and indexes in {@link $deleted_tables},
* {@link deleted_columns} and {@link deleted_indexes} and these will be deleted
* from the database.
*
* In addition to that, it will automatically remove any tables and columns prefixed with "_obsolete".
*/
@halkyon
halkyon / linked-list.go
Last active March 15, 2020 20:52
Simple example of a circular doubly linked list in Go
package main
import (
"fmt"
)
type list struct {
head *item
tail *item
}
@halkyon
halkyon / interface.go
Last active March 15, 2020 20:53
Simple example of an interface in Go using a "loader" interface with memory and disk as implementations
package main
import (
"fmt"
"io/ioutil"
"os"
)
type loader interface {
Read() ([]byte, error)
@halkyon
halkyon / ghost-blog-kubernetes.yaml
Last active July 15, 2020 00:53
Kubernetes YAML (namespace, service, ingress, deployment) for running a very simple setup of Ghost (https://github.com/TryGhost/Ghost)
# Simple setup of Ghost in Kubernetes.
#
# Some points to consider:
# - Content is stored in a single persistent disk, and database is SQLite. Using a dedicated database would be ideal
# for bigger deployments, and using distributed storage would allow pods to horizontally scale, e.g. GlusterFS, EFS.
#
# - A load balancer is provisioned for external traffic to access the blog service. For a multi-tenanted approach,
# nginx ingress controller (https://kubernetes.github.io/ingress-nginx/deploy/) could be used.
#
# - No TLS for the service. This could be accomplished using GCP, or AWS managed certs on the load balancer.
@halkyon
halkyon / digitalocean_saltcloud_vpc.patch
Last active September 7, 2020 00:20
Patch for salt-cloud digitalocean integration to support setting VPC for private networking
--- /usr/lib/python3/dist-packages/salt/cloud/clouds/digitalocean.py 2020-09-07 11:02:31.000000000 +1200
+++ /usr/lib/python3/dist-packages/salt/cloud/clouds/digitalocean_new.py 2020-09-07 11:04:47.000000000 +1200
@@ -357,6 +357,11 @@
if not isinstance(private_networking, bool):
raise SaltCloudConfigError("'private_networking' should be a boolean value.")
kwargs['private_networking'] = private_networking
+ vpc_uuid = config.get_cloud_config_value(
+ "vpc_uuid", vm_, __opts__, search_global=False, default=None,
+ )
+ if vpc_uuid is not None:
@halkyon
halkyon / openwrt_build.sh
Last active March 25, 2021 23:02
Build an OpenWRT target with some extra packages, either using the OpenWRT image builder, or compile from git
#!/usr/bin/env bash
set -euo pipefail
target=${1:-}
subtarget=${2:-}
profile=${3:-}
release=${4:-snapshot}
target_path=$(readlink -f "${5:-$(pwd)}")
packages="luci luci-base luci-mod-admin-full luci-proto-relay luci-app-statistics"
@halkyon
halkyon / install.md
Last active June 3, 2021 02:48
BeDrive docker installation
  1. Unzip the website.zip file provided by BeDrive somewhere
  2. Replace docker-compose.yml with the following:
version: "3"
services:
  web:
    build: . 
    depends_on:
      - mariadb