Skip to content

Instantly share code, notes, and snippets.

View lilyball's full-sized avatar

Lily Ballard lilyball

View GitHub Profile
@lilyball
lilyball / 4button-pico-bp.yaml
Last active March 21, 2023 05:10 — forked from crkochan/4button-pico-bp.yaml
Home Assistant Blueprint
blueprint:
name: Lutron Caseta Four-Button Zone Pico Actions
description: Short and long press automations for the Pico four-button remote.
domain: automation
input:
pico_remote:
name: Pico Four-Button Zone Remote
description: Select the Pico four-button zone remote to configure.
selector:
device:
public enum TruncateMode {
case Head, Middle, Tail
}
public extension String {
/// Truncates a string to a maximum length in grapheme clusters using the
/// specified mode. If `addEllipsis` is `true`, the resulting string
/// including the ellipsis will be no longer than `maxLength`.
func truncateToLength(maxLength: Int, mode: TruncateMode = .Tail, addEllipsis: Bool = false) -> String {
if maxLength <= 0 {
@lilyball
lilyball / testmp.rs
Created November 20, 2013 00:33 — forked from DaGenix/testmp.rs
enum State {
Even(~int),
Odd(~int)
}
struct MyNumber {
num: State
}
impl MyNumber {
#[fixed_stack_segment]
fn exec_program(program: &str, args: &[~str]) {
do program.to_c_str().with_ref() |c_program| {
// I don't much care about the ownership of the strings here
// at this point, so let's just fail if execvp isn't working.
unsafe {
let mut c_args = args.map(|arg| { arg.to_c_str().unwrap() });
c_args.push(ptr::null());
execvp(c_program, vec::raw::to_ptr(c_args));
// perror("Running tmux failed:".to_c_str().unwrap()); // Super horrific, apparently, let's use it for debugging only.
fn session_number(line: &str) -> Option<int> {
line.split_iter(':').next().and_then(|s| int::from_str(s))
}
fn occupied_sessions(output: ~str) -> HashSet<int> {
let mut set = HashSet::new();
for line in output.line_iter(){
match session_number(line) {
Some(n) => { set.insert(n); }
None => ()
@lilyball
lilyball / multicast.rs
Last active December 21, 2015 03:48 — forked from jfager/multicast.rs
use std::task;
use std::task::TaskBuilder;
enum MultiCastHackForSelect<T> {
Msg(T),
MsgChan(Chan<T>),
}
struct MultiCast<T> {
priv ch: Chan<MultiCastHackForSelect<T>>
@lilyball
lilyball / btree.rs
Last active December 19, 2015 16:08 — forked from smvv/btree.rs
/*
rustc -O -L. --test -o btree btree.rs
btree.rs:68:24: 79:7 error: mismatched types: expected `~[~str]` but found `std::iterator::MapIterator<,&std::option::Option<TreeItem<T,U>>,~(),std::vec::VecIterator<,std::option::Option<TreeItem<T,U>>>>` (expected vector but found struct std::iterator::MapIterator)
btree.rs:68 let buf : ~[~str] = tree.nodes.iter().transform(|x| {
btree.rs:69 ~"\t".repeat(indent).push_str(match *x {
btree.rs:70 Some(TreeNode { key: k, value: tree }) => {
btree.rs:71 let buf = ~"Node(key=...)\n";
btree.rs:72 buf //buf.push_str(tree.to_str())
btree.rs:73 }
...
fn main() {
fn main() {
let i = str::to_bytes("Hello, world!");
println(fmt!("%?", i));
}
#include <string>
#include <sstream>
#include <vector>
#include <iomanip>
std::string human_readable_duration(int num_seconds) {
static int divisions[3] = {60, 60, 24};
std::stringstream buf;
if (num_seconds < divisions[0]) {
buf << num_seconds << " seconds";
@lilyball
lilyball / A
Created August 23, 2012 01:26 — forked from UnidentifiedContributor/gist:3430820
TheEmpath repping 4over with class
This part: what you think we're all reacting to:
~ #node.js
[20.16.16] < TheEmpath> so
[20.16.34] < TheEmpath> anyone else have a hot programmer girl in their office? o____O
[20.16.42] < Lorentz> I wiiish