Skip to content

Instantly share code, notes, and snippets.

#!/bin/bash
cd $HOME
echo Updating system
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install -y curl
@lesleh
lesleh / public_ip
Created June 2, 2015 10:00
Script to detect public IP
#!/bin/bash
SERVICE_URL=http://icanhazip.com/
if hash wget 2>/dev/null; then
wget -qO- $SERVICE_URL
elif hash curl 2>/dev/null; then
curl $SERVICE_URL
else
>&2 echo Need wget or curl.
@lesleh
lesleh / move_to_music
Last active August 29, 2015 14:16
Add a music file to your music library, with the format {artist}/{album}/{track} {title}.{ext}. Automatically removes illegal filename characters.
#!/usr/bin/env ruby
# Ubuntu: apt-get install libtagc0-dev
# gem install taglib-ruby
require 'taglib'
require 'fileutils'
#------------------------------------------------
# Configuration
@lesleh
lesleh / cache.rb
Last active May 1, 2020 15:59
Ruby in-memory cache.
require 'date'
class Cache
Entry = Struct.new(:expiry, :value)
def initialize(opts={})
@data = Hash.new
@opts = opts
end
@lesleh
lesleh / number-suffix.js
Created January 18, 2015 17:09
Get the suffix for a given number, e.g. 2nd, 3rd, 4th.
/*
1st
2nd
3rd
4th
11th
12th
21st
22nd
121st
@lesleh
lesleh / cache.js
Last active December 1, 2023 12:21
Basic memory cache implementation for JavaScript.
function Cache(config) {
config = config || {};
config.trim = config.trim || 600;
config.ttl = config.ttl || 3600;
var data = {};
var self = this;
var now = function() {
return new Date().getTime() / 1000;
@lesleh
lesleh / data_uri
Created January 15, 2015 12:25
Bash script to create data URIs.
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "No filename specified." >&2
exit 1
fi
FILENAME=$1
MIMETYPE=$(file -b --mime-type "$FILENAME")
DATA=$(cat "$FILENAME" | base64)
@lesleh
lesleh / RatioImageView.java
Last active August 29, 2015 14:00
An implementation of ImageView for Android that restricts the image to a given aspect ratio, if possible. This is a more generalised way of doing SquareImageView, just set both the width and height ratios to 1 for a square image.
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.widget.ImageView;
public class RatioImageView extends ImageView {
private static final float DEFAULT_WIDTH_RATIO = 1;
private static final float DEFAULT_HEIGHT_RATIO = 1;
@lesleh
lesleh / build.gradle
Last active August 29, 2015 13:57
APK signing configuration for Android Gradle projects
// APK signing
def signingPropFile = new File(project.rootDir, "signing.properties")
if(signingPropFile.exists()) {
Properties props = new Properties()
props.load(new FileInputStream(signingPropFile))
android {
signingConfigs {
release {
storeFile file(props['signing.keystore'])
@lesleh
lesleh / chunk.cs
Last active June 10, 2022 19:40
Java generics are so horribly broken.
// ONE implementation for everything
public static T[][] chunkArray<T>(T[] array, int chunkSize) {
int numOfChunks = (int)Math.Ceiling((double)array.Length / chunkSize);
T[][] output = new T[numOfChunks][];
for(int i = 0; i < numOfChunks; ++i) {
int start = i * chunkSize;
int length = Math.Min(array.Length - start, chunkSize);
T[] temp = new T[length];