Skip to content

Instantly share code, notes, and snippets.

@floehopper
floehopper / install.md
Last active March 26, 2024 14:10
Install rtl-sdr on Raspian on Raspberry Pi
jamesmead@floehopper.local:~$ sudo dd bs=1m if=/Users/jamesmead/Downloads/2015-02-16-raspbian-wheezy.img of=/dev/disk2
pi@raspberrypi ~ $ sudo raspi-config
# Choose option 1 to "Expand Filesystem" - Ensures that all of the SD card storage is available to the OS
# Choose Finish & reboot

pi@raspberrypi ~ $ sudo apt-get update
@floehopper
floehopper / parse_urls_from_sitemap.rb
Created March 4, 2017 12:45
Parse URLs from sitemap.xml
require 'nokogiri'
response = get(sitemap_path)
doc = Nokogiri::XML(response.body)
namespace = 'http://www.sitemaps.org/schemas/sitemap/0.9'
locs = doc.xpath('//urlset:url//urlset:loc', 'urlset' => namespace)
urls = locs.map(&:text).map { |u| URI(u).path }.uniq
@floehopper
floehopper / inspect-retrying-jobs-in-sidekiq.rb
Created June 14, 2023 11:13
Inspect retrying jobs in Sidekiq
require 'sidekiq/monitor'
Sidekiq::RetrySet.new.each do |job|
p [job.display_class, job.display_args]
end
@floehopper
floehopper / format_aldermore_bank_csv_for_upload_to_freeagent.rb
Last active June 9, 2023 12:30
Format Aldermore Bank CSV for upload to FreeAgent
# See https://support.freeagent.com/hc/en-gb/articles/115001222564-How-to-format-a-CSV-file-to-upload-a-bank-statement#h_01FWZVYY1GEEGAPKJHG6FKV2HM
require 'csv'
CSV($stdin, headers: true, skip_blanks: true) do |csv|
csv.each do |row|
puts([
Date.parse(row['Date']).strftime("%d/%m/%Y"),
row['Amount'].gsub(/,/, ''),
row['Description'].gsub(/,/, '')
@floehopper
floehopper / Rollbar.svelte
Last active January 6, 2023 10:50
Rollbar configuration in a SvelteKit app - both client-side & server-side
<script>
/* eslint-disable */
import { mode } from "$app/env";
import { onMount } from "svelte";
const rollbarAccessToken = import.meta.env
.VITE_ROLLBAR_POST_CLIENT_ITEM_ACCESS_TOKEN;
const codeVersion = import.meta.env.VITE_LATEST_SHA;
[04/30/11 12:37:44 +0100 hashblue-com (12250)] DEBUG : Http Connection opened to 204.93.223.139:80
[04/30/11 12:37:45 +0100 hashblue-com (12250)] DEBUG : Uncompressed content returned
[04/30/11 12:37:45 +0100 hashblue-com (12250)] DEBUG : Sat Apr 30 12:37:44 +0100 2011: sent 7 timeslices (99207573) in 0.271603 seconds
[04/30/11 12:37:53 +0100 hashblue-com (10552)] DEBUG : Connect to collector-5.newrelic.com:80/agent_listener/8/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/metric_data?run_id=99206895
[04/30/11 12:37:53 +0100 hashblue-com (10552)] DEBUG : Http Connection opened to 204.93.223.139:80
[04/30/11 12:37:53 +0100 hashblue-com (10552)] DEBUG : Uncompressed content returned
[04/30/11 12:37:53 +0100 hashblue-com (10552)] DEBUG : Sat Apr 30 12:37:53 +0100 2011: sent 7 timeslices (99206895) in 0.272491 seconds
[04/30/11 12:38:44 +0100 hashblue-com (12250)] DEBUG : Connect to collector-5.newrelic.com:80/agent_listener/8/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/metric_data?run_id=99207573
[04/30/11 12:38:44 +0100
@floehopper
floehopper / run-migration-from-rails-console.rb
Created September 6, 2022 19:55
Run migration from Rails console
migration_context = ActiveRecord::Base.connection.migration_context
migration_context.migrate(target_version = nil)
migration_context.rollback(steps = 1)
migration_context.forward(steps = 1)
migration_context.up(target_version = nil)
migration_context.down(target_version = nil)
migration_context.current_version
@floehopper
floehopper / validate-parameters-against-method-signature.rb
Created August 14, 2022 11:22
Validate parameters against method signature
def valid?(method, ...)
signature = method.inspect
pattern = %r{(?:\.|#)#{method.name}\(([^\)]*)\)}
params = signature.match(pattern)[1]
params_with_nil_default_values = params.gsub('...', 'nil')
klass = Class.new
klass.class_eval "def self.#{method.name}(#{params_with_nil_default_values})\nend\n"
klass.public_send(method.name, ...)
true
rescue ArgumentError => e
@floehopper
floehopper / display_changed_row_counts.rb
Created February 1, 2022 14:52
Display changed row counts using ActiveRecord
def row_counts
Hash[*ApplicationRecord.connection.execute(%{
ANALYZE;
SELECT
pgClass.relname AS tableName,
pgClass.reltuples AS rowCount
FROM
pg_class pgClass
INNER JOIN
pg_namespace pgNamespace ON (pgNamespace.oid = pgClass.relnamespace)
@floehopper
floehopper / flatten
Created December 27, 2021 11:26
Flatten files in sub-directories into single directory
#!/usr/bin/env ruby
require 'pathname'
require 'fileutils'
pwd = Pathname.pwd
begin
source = Pathname.new(ARGV[0].nil? ? pwd : ARGV[0]).realpath
destination = Pathname.new(ARGV[1].nil? ? pwd: ARGV[1]).realpath