Skip to content

Instantly share code, notes, and snippets.

@peterkeen
peterkeen / card.yml
Last active July 12, 2023 16:44
Home Assistant YouTube Blocker
type: custom:timer-bar-card
entities:
- entity: timer.youtube_15_minutes
state_color: true
name: YouTube
translations:
idle: Blocked
extend_paper_buttons_row:
position: right
buttons:
# Step 1: write a gist with a file named __script__.rb
# Step 2: copy and paste the function def below into Rails console
# Step 3: run `eval_gist("the-gist-id-from-the-url")`
# Step 4: GOTO Step 3
def eval_gist(gist_id)
eval(JSON.parse(Net::HTTP.get(URI("https://api.github.com/gists/#{gist_id}"))).dig("files", "__script__.rb", "content"))
end
require 'sorbet-runtime'
require 'active_support'
class ApplicationScript < T::InexactStruct
def self.run!(args = ARGV)
options = {}
OptionParser.new do |parser|
props.each do |propname, prop|
# special case T::Boolean because OptionParser doesn't understand it
if prop[:type] == T::Boolean
@peterkeen
peterkeen / automatic.txt
Created April 8, 2015 16:23
Examples from Program Your Finances: Envelope Budgeting
= /Income:Salary/ and expr date >= [2015/04/01] && date < [2015/06/01]
* Assets:Funds:Water $50.00
* Liabilities:Funds:Water $-50.00
= /Income:Salary/ and expr date >= [2015/06/01]
* Assets:Funds:Water $55.00
* Liabilities:Funds:Water $-55.00
= /Expenses:Water/
* Liabilities:Funds:Water 1.0
@peterkeen
peterkeen / export_tiller.rb
Created March 4, 2018 14:25
Export a Tiller transaction spreadsheet as a ledger file while checking for duplicates in ledger-web database.
require 'rubygems'
require 'bundler/setup'
require 'pg'
require 'sequel'
require 'ledger_gen'
require 'google_drive'
SPREADSHEET_ID = 'your-google-sheet-id'
DATABASE_URL = 'postgres://username:password@host/database'

Cora Street Press Individual Contributor License Agreement

Thank you for your interest in contributing to open source software projects (“Projects”) made available by Cora Street Press or its affiliates (“Cora Street Press”). This Individual Contributor License Agreement (“Agreement”) sets out the terms governing any source code, object code, bug fixes, configuration changes, tools, specifications, documentation, data, materials, feedback, information or other works of authorship that you submit or have submitted, in any form and in any manner, to Cora Street Press in respect of any of the Projects (collectively “Contributions”). If you have any questions respecting this Agreement, please contact pete@corastreetpress.com.

You agree that the following terms apply to all of your past, present and future Contributions. Except for the licenses granted in this Agreement, you retain all of your right, title and interest in and to your Contributions.

Copyright License. You hereby grant, and agree to grant

require 'rubydns'
require 'httparty'
require 'lru_redux'
class ZeroTierAPI
include HTTParty
base_uri "https://my.zerotier.com/api"
headers 'Authorization' => "Bearer #{ENV['ZT_API_TOKEN']}"
require 'rubydns'
INTERFACES = [
[:udp, "0.0.0.0", 5300],
[:tcp, "0.0.0.0", 5300]
]
IN = Resolv::DNS::Resource::IN
UPSTREAM = RubyDNS::Resolver.new([[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]])
task :run_gist => :environment do
url = ENV['url']
raise "usage: rake run_gist url=https://gist.github.com/asdfasdfasdfasdf" unless url.present?
dir = Dir.mktmpdir
system("git clone #{url} #{dir}")
Dir.chdir(dir) do
raise "Gist does not have a script.rb file to execute" unless File.exists?('script.rb')
@peterkeen
peterkeen / gist:7591428
Created November 21, 2013 23:02
microsoft.com is down
$ dig microsoft.com @4.2.2.2
; <<>> DiG 9.7.6-P1 <<>> microsoft.com @4.2.2.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 15309
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION: