View compass.rs
// Algorithm from http://cosinekitty.com/compass.html | |
// Code ported to Rust by @aeshirey | |
use core::f64::consts::PI; | |
#[derive(Debug, Copy, Clone)] | |
pub struct Location { | |
latitude: f64, | |
longitude: f64, | |
elevation_meters: f64, | |
} |
View main.rs
// `probably` crate @ https://github.com/aeshirey/probably/ | |
// Use it by specifying probably = "0.2.0" in your Cargo.toml | |
use probably::quantile::greenwald_khanna; | |
use std::fs::File; | |
use std::io::{BufRead, BufReader}; | |
fn main() { | |
const EPSILON: f64 = 0.001; | |
const QUANTILE: f64 = 0.5; // median |
View Read ADL file.py
import fsspec | |
filename = 'adl://path/to/file.csv' | |
adl_auth = { | |
'tenant_id': "<tenant_id>", | |
'client_id': "<client_id>", | |
'client_secret': "PGNsaWVudF9zZWNyZXQ+" | |
} |
View check_temp.py
# maximum allowable delta (°F) before we start the fans | |
TEMP_DELTA = 5.0 | |
def check_temp(): | |
global VENTILATION_STATE | |
c = db.cursor() | |
# get the last ten minutes of data only | |
c.execute("SELECT temp, room FROM temps WHERE (julianday('now') - julianday(timestamp))*86400 < 600 ORDER BY timestamp") | |
inside_temps, outside = [], 0.0 |
View ventilation.yaml
- id: '1234' | |
alias: ventilate_on | |
trigger: | |
- payload: 'on' | |
platform: mqtt | |
topic: ventilate | |
condition: [] | |
action: | |
- data: | |
entity_id: switch.wind_tunnel |
View outside-temperature-query.py
#!/usr/bin/env python | |
import paho.mqtt.client as mqtt | |
import json | |
import requests | |
BROKER = '192.168.0.1' | |
TOPIC = "weather/renton" | |
URL = "http://api.openweathermap.org/data/2.5/weather?id=5808189&APPID=<your api key goes here>" | |
API_DELAY_SEC = 60 * 10 # every 10 minutes |
View ESP8266_DHT11.c
#include <DHTesp.h> | |
#include "Adafruit_MQTT.h" | |
#include "Adafruit_MQTT_Client.h" | |
#include <ESP8266WiFi.h> | |
#define LOOP_MS 60000 | |
#define DhtPin 14 | |
DHTesp dht; |
View kegerator.c.ino
// Code accompanying my blog post on my kegerator setup, found here: | |
// http://www.dingostick.com/2018/12/kegerator-v10.html | |
// 1. https://www.pjrc.com/teensy/td_libs_OneWire.html | |
#include <OneWire.h> | |
// 2. https://github.com/milesburton/Arduino-Temperature-Control-Library | |
#include <DallasTemperature.h> | |
#define LOGGING |
View Keybase proof
### Keybase proof | |
I hereby claim: | |
* I am aeshirey on github. | |
* I am adamshirey (https://keybase.io/adamshirey) on keybase. | |
* I have a public key ASBGD1ACCiGZ0YRRZCuMxEAZncMYrJI5_Ima7UdJqXYRogo | |
To claim this, I am signing this object: |
View venn.min.js
!function(t,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("d3-selection"),require("d3-transition")):"function"==typeof define&&define.amd?define(["exports","d3-selection","d3-transition"],r):r(t.venn={},t.d3,t.d3)}(this,function(t,C,r){"use strict";var w=1e-10;function x(r,t){var n,e=function(t){for(var r=[],n=0;n<t.length;++n)for(var e=n+1;e<t.length;++e)for(var a=k(t[n],t[e]),i=0;i<a.length;++i){var s=a[i];s.parentIndex=[n,e],r.push(s)}return r}(r),a=e.filter(function(t){return function(t,r){for(var n=0;n<r.length;++n)if(R(t,r[n])>r[n].radius+w)return!1;return!0}(t,r)}),i=0,s=0,u=[];if(1<a.length){var o=P(a);for(n=0;n<a.length;++n){var f=a[n];f.angle=Math.atan2(f.x-o.x,f.y-o.y)}a.sort(function(t,r){return r.angle-t.angle});var l=a[a.length-1];for(n=0;n<a.length;++n){var h=a[n];s+=(l.x+h.x)*(h.y-l.y);for(var x={x:(h.x+l.x)/2,y:(h.y+l.y)/2},c=null,g=0;g<h.parentIndex.length;++g)if(-1<l.parentIndex.indexOf(h.parentIndex[g])){var v=r[h.parentIndex[g]],p=Math.atan2(h.x-v.x,h.y-v.y),d= |
NewerOlder