Skip to content

Instantly share code, notes, and snippets.

#!/usr/bin/env bash
# MIT © Sindre Sorhus - sindresorhus.com
# git hook to run a command after `git pull` or `git checkout` if a specified file was changed
# Run `chmod +x post-checkout` to make it executable then put it into `.git/hooks/`.
changed_files="$(git diff-tree -r --name-only --no-commit-id HEAD@{1} HEAD)"
check_run() {
echo "$changed_files" | grep --quiet "$1" && echo " * changes detected in $1" && echo " * running $2" && eval "$2"
@mariusGundersen
mariusGundersen / gist:6925246
Last active May 8, 2022 20:38
Programmer collective nouns
@mariusGundersen
mariusGundersen / demo.js
Created May 2, 2012 21:29
The usefulOrientation function takes the arguments from an DeviceOrientationEvent and returns the orientation of the interface relative to the world
/*
Demo showing how to use the usefulOrientation function.
*/
function onDeviceOrientationChange(e){
console.log("deviceOrientation", e.alpha, e.beta, e.gamma);
var orientation = usefulOrientation(e.alpha, e.beta, e.gamma);
console.log("usefulOrientatino", orientation.alpha, orientation.beta, orientation.gamma);
}
window.addEventListener("deviceorientation", onDeviceOrientationChange, false);
@mariusGundersen
mariusGundersen / Example11.cs
Created October 21, 2018 13:04
Duct-typed extension methods Example 11
// Example 11: add with params
// Use params to take several ints, each representing 3 digits
public static void Add<TKey>(this IDictionary<TKey, int> dictionary, TKey key, params int[] values)
=> dictionary.Add(key, values.Aggregate(0, (s, v) => s*1000 + v));
// Now we can write it like this
var populations = new Dictionary<string, int>
{
{ "China", 1,409,517,397 },
@mariusGundersen
mariusGundersen / Example10.cs
Created October 21, 2018 12:55
Duct-typed extension methods Example 10
// Example 10: add a tuple
// This is just a dummy class that we can use in the example
public class City
{
public City(string name, int population, string country)
{
Name = name;
Population = population;
Country = country;
@mariusGundersen
mariusGundersen / Example7.cs
Last active October 21, 2018 12:53
Duct-typed extension methods Example 7
// Example 7: add a dictionary
// These are just some dummy methods for the example to work
public static IDictionary<string, int> GetAfricanCountries() => new Dictionary<string, int>{
{ "Nigeria", 190_886_311 },
{ "Ethiopia", 104_957_438 },
{ "Egypt", 97_553_151 }
};
public static IDictionary<string, int> GetEuropeanCountries() => new Dictionary<string, int>{
{ "Russia", 146_864_513 },
@mariusGundersen
mariusGundersen / Example8.cs
Last active October 21, 2018 12:53
Duct-typed extension methods Example 8
// Example 8: add a new instance
// This is just a dummy class that we can use in the example
public class City
{
public City(string name, int population, string country)
{
Name = name;
Population = population;
Country = country;
@mariusGundersen
mariusGundersen / Example9.cs
Created October 21, 2018 12:49
Duct-typed extension methods Example 9
// Example 9: multi or single dimensional arrays?
// We define this extension method
public static void Add<T>(this List<T> list, params T[] items)
=> list.AddRange(items);
// And then we can make a flattened matrix
var matrix = new List<double>
{
{ 1, 0, 0 },
@mariusGundersen
mariusGundersen / Example6.cs
Created October 21, 2018 12:18
Duct-typed extension methods Example 6
// Example 6: Add a list
// This is just a dummy method that returns some ints
public static IEnumerable<int> GetAnotherListOfInts()
=> new[] { 10, 11, 12, 13 };
// With this extension method...
public static void Add<T>(this List<T> list, IEnumerable<T> items)
=> list.AddRange(items);
@mariusGundersen
mariusGundersen / Example5.cs
Created October 21, 2018 12:09
Duct-type extension methods Example 5
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
// Example 5: await tuple of Tasks
// Just some dummy async functions
public static Task<string> GetSomethingAsync(int number) => Task.FromResult($"Something {number}");
public static Task<int> GetAnotherThingAsync(string text) => Task.FromResult(text.Length);
// This extension method lets us await a tuple with two values