- Digital radio transmitter or receiver
- GPS/GPRS tracker
- High atmosphere air current tracking using balloons, and a pi/arduino with GPS and recording
- Launch something that goes out of sight, then track/find it using your favourite protocol
- Amateur radio beacon hunting using your own equipment
- SMS remote control
- 555 timer based signal generator
- Piezo based floor piano
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
source 'https://rubygems.org' | |
gem 'midilib', '~> 2.0.4' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!ipxe | |
dhcp | |
echo Starting Ubuntu 12.04 i386, non-pae installer for ${hostname} | |
set base-url http://archive.ubuntu.com/ubuntu/dists/precise-updates/main/installer-i386/current/images/netboot/non-pae/ubuntu-installer/i386 | |
kernel ${base-url}/linux | |
initrd ${base-url}/initrd.gz | |
boot || | |
# If everything failed, give the user some options | |
echo Boot from ${base-url} failed | |
prompt --key 0x197e --timeout 2000 Press F12 to investigate || exit |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Wemux demonstration container | |
# ============================= | |
# docker build -t wemux . | |
# docker run -t -i -d -p 2255:22 wemux | |
# | |
# ssh -p 2255 root@<host> | |
# root : screencast | |
# ssh -p 2255 user@<host> | |
# user : password | |
# |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'nokogiri' | |
require 'open-uri' | |
doc = Nokogiri::HTML.parse open('http://www.itjobswatch.co.uk/contracts/london/ruby.do') | |
# Inside London... | |
cells = doc.css('table.summary>tr').find {|tr| tr.css('>td').text =~ /Average daily rate/ }.css 'td' | |
daily_rates = { three_months: cells[1].text, last_year: cells[2].text, two_years_ago: cells[3].text } | |
# => {:three_months=>"£425", :last_year=>"£400", :two_years_ago=>"£375"} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'nokogiri' | |
require 'open-uri' | |
require 'json' | |
doc = Nokogiri::HTML(open('http://www.mysupermarket.co.uk/asda-compare-prices/Spirits/Havana_Club_Rum_Anejo_7_Year_Old_700ml.html')) | |
prices = doc.css('#PriceComparison .StoreDiv').map {|c| { name: c.css('.ImgSpan img').first['alt'], cheapest: c['class'].include?('Cheapest'), price: c.css('.Price>span.priceClass, .Price>span.Offer').text.strip } } | |
# => [{:name=>"ASDA", :cheapest=>true, :price=>"£18.00"}, | |
# {:name=>"Tesco", :cheapest=>false, :price=>"£23.30"}, | |
# {:name=>"Ocado", :cheapest=>false, :price=>"£23.30"}, |
The output is IQ (quadrature) sampling. It's interleaved, so first byte is I, second Q and so on. The samples are unsigned bytes, so you subtract 127 from them to get their real ralue (lying between -127 and +127).
Send a command byte followed by a 32-bit big-endian int parameter.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def find_path(entry) | |
path = [] | |
until entry.parent.name == 'Root' do | |
entry = entry.parent | |
path.insert(0, entry.css('>Name').text) | |
end | |
path | |
end | |
def insert_entry(entry) |
This is a list of random junk which I'm looking for, for various projects. In the spirit of http://uk.freecycle.org/, I like to recycle things where I can. I also have a box of odds and ends, so if you're looking for something electrical or mechanical, let me know as I might have it :)
- Fire extinguisher/air tank
- Doesn't have to work, but should be airtight
- Ideally not a CO2 extinguisher
- To be used as a 100psi air compression chamber
- Doesn't have to work, but should be airtight
- Arc welder/welding supplies
- For welding steel, etc.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'fileutils' | |
# Set the directory containing your backup files (they can be in sub-directories of this path) | |
f = Dir.glob './**/*.wbfs' | |
f.each do |n| | |
x = `wwt LIST \"#{n}\"` | |
if $?.success? | |
# WBFS containers can have multiple games in them. Here, we select just the first one for naming. | |
# Nearly always, you will have only backed up a single game per container anyway. | |
(id, name) = x.split("\n")[3].split(/\s{2,}/) | |
if id && name |