Skip to content

Instantly share code, notes, and snippets.

View hborders's full-sized avatar

Heath Borders hborders

View GitHub Profile
@hborders
hborders / decimalize_git_hash.bash
Last active January 7, 2023 13:56
Print the given git hash + a prepended "1" in decimal form
#!/bin/bash -euo pipefail
if [ ${#} -eq 0 ]
then
# read from STDIN
MAYBE_GIT_HASH=$( cat )
else
MAYBE_GIT_HASH="${1}"
fi
@hborders
hborders / minutes_since_date.bash
Created September 14, 2016 18:16
Print the number of minutes since a given date
#!/bin/bash -euo pipefail
if [ ${#} -eq 0 ]
then
# read from STDIN
DATE=$( cat )
else
DATE="${1}"
fi
@hborders
hborders / versions.bash
Created September 14, 2016 18:18
A script run within Xcode's `Run Script` build phase that outputs version info into `versions.h`, which we prepend onto our Info.plist template.
#!/bin/bash -euo pipefail
# When we increment TW_BUNDLE_SHORT_VERSION_STRING
# also update TW_BUNDLE_SHORT_VERSION_DATE to the current date/time
# we don't have to be very exact, but it should be updated at least
# once every 18 months because iTunes requires that a CFBundleVersion
# be at most 18 characters long, and DECIMALIZED_GIT_HASH will be
# at most 10 characters long. Thus, MINUTES_SINCE_DATE needs to be
# at most 7 characters long so we can use the format:
# ${MINUTES_SINCE_DATE}.${DECIMALIZED_GIT_HASH}
@hborders
hborders / git_hash_from_cfbundleversion.bash
Created September 14, 2016 18:19
Convert a `CFBundleVersion` string constructed with `versions.bash` into a short revision of a git commit hash
#!/bin/bash -euo pipefail
if [ ${#} -eq 0 ]
then
# read from STDIN
MAYBE_CFBUNDLEVERSION=$( cat )
else
MAYBE_CFBUNDLEVERSION="${1}"
fi
@hborders
hborders / NamedParams.java
Created November 27, 2021 00:02
Generates named parameters for a constructor using a chain of interfaces
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import javax.annotation.Nonnull;
fun launchBrowser(context: Context, uri: Uri?) {
val browserIntent = Intent(Intent.ACTION_VIEW).apply { data = uri }
val browseActivities = context.packageManager.queryIntentActivities(browserIntent, PackageManager.MATCH_DEFAULT_ONLY)
for (info in browseActivities) {
if (info.activityInfo.packageName != context.packageName) {
browserIntent.setPackage(info.activityInfo.packageName)
try {
context.startActivity(browserIntent)
break
} catch (e: ActivityNotFoundException) {
public class AssertFailsWith {
public interface RunnableThatThrows {
void run() throws Throwable;
}
public static <T extends Throwable> void assertFailsWith(Class<T> throwableClass, RunnableThatThrows runnable) {
try {
runnable.run();
fail();
} catch (Throwable throwable) {
assertTrue(throwableClass.isInstance(throwable));
@hborders
hborders / CompactDecimalFormatTest.java
Last active March 16, 2019 21:10
Demonstrates that CompactDecimalFormat#setMaximumFractionDigits and CompactDecimalFormat#setMaximumIntegerDigits don't work on Android API 24, but work on Android API 28.
import android.icu.text.CompactDecimalFormat;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.Locale;
import static org.junit.Assert.assertEquals;
@RunWith(AndroidJUnit4.class)
public class CompactDecimalFormatTest {
@hborders
hborders / move-subscription-after.sql
Last active March 1, 2019 06:22
Moves a subscription row after a given reference subscription row
/*
Moves moving_id after reference_id by finding the next row after
reference_id and setting moving_id.sort to be the midpoint of
reference_id.sort and next_reference_id.sort
*/
UPDATE subscription
SET sort = (
CASE WHEN (
/*
Get the first sort value after the reference_id
@hborders
hborders / Heath-C-Java-Apple-Android.opml
Created February 3, 2019 06:26
An OPML of all the C, Java, Apple, and Android feeds I follow in Feedly.
<?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0">
<head>
<title>Heath's C, Java, Apple, and Android feeds</title>
</head>
<body>
<outline text="C" title="C">
<outline type="rss" text="zeuxcg.org" title="zeuxcg.org" xmlUrl="http://zeuxcg.org/feed/" htmlUrl="http://zeuxcg.org"/>
<outline type="rss" text="Krister Walfridsson’s blog" title="Krister Walfridsson’s blog" xmlUrl="http://kristerw.blogspot.com/feeds/posts/default" htmlUrl="https://kristerw.blogspot.com/"/>