SlideShare a Scribd company logo
Exploring the Internet of
   Things with Ruby
                 Lone Star Ruby Conf 2012
Exploring the Internet of Things Using Ruby
Man Versus Wild…
The Great Adventure
The Oh No Moment



          (aka – I am going to have to drink my urine)
Whoami

   Mike Hagedorn
   @mwhagedorn

   github.com/mwhagedorn
Agenda

 Internet Of Things in General
 Ruby and USB
 The IOT Printer
 The IOT Display
Agenda

 Internet Of Things in General
 Ruby and USB
 The IOT Printer
 The IOT Display
Internet of Things?

Objects-> Internet -> Servers

“Listen to your world, talk to the Internet”
                        http://supermechanical.com/
Things Talk back
@MarsCuriosity
Botanicalls
IOT Devices

 Arduino
 Rasberry Pi
 Twine
Agenda

 Internet Of Things in General
 Ruby and USB
 The IOT Printer
 The IOT Display
The USB Lamp Project



                 http://www.thekua.com
The USB Lamp Project

 libusb gem
   open a context
   browse for your device   NOT Easy!
   open the device
   send message
   close device
The USB Lamp Project

 Lots of Questions
   How do you send messages?
   What is the form of the messages?
Use The Source Luke…

void USBLamp::init() {
  char data1[8] = { 0x1f, 0x02, 0x00, 0x2e,
             0x00, 0x00, 0x2b, 0x03 };
  send(data1, sizeof(data1));

    char data2[8] = { 0x00, 0x02, 0x00, 0x2e,
               0x00, 0x00, 0x2b, 0x04 };
    send(data2, sizeof(data2));

    char data3[8] = { 0x00, 0x02, 0x00, 0x2e,
               0x00, 0x00, 0x2b, 0x05 };
    send(data3, sizeof(data3));
}
Use The Source Luke…

void USBLamp::send(char *bytes, int size) {
  …
  CALL(usb_control_msg(…))
  …
}
Array#pack & String#unpack

 pack
   Array of numbers to a binary string
     [97,98,99].pack("c*")
     => "abc“

  unpack
    Binary string to array
      "abc".unpack("c*")
      => [97,98,99]
Demo
Agenda

 Internet Of Things in General
 Ruby and USB
 The IOT Printer
 The IOT Display
The IOT printer
The IOT printer
Arduino
Ethernet Shield
Arduino IDE
To Rad or Not To Rad
To Rad or Not To Rad
Tools You Can Trust
Use TextMate!
Use Terminal!

 You can monitor the serial port via Terminal
> ls /dev/tty.*
> screen <dev> <baud-rate>
 End with cntrl-A, cntrl-
IOT-Assistant
    github.com/newsinternational/iot-assistant
Architecture




OAuth       Tweets
Calendars
Suiting It To Me




Calendar   Tasks   News   Twitter

                          (Oauth)
Omnifocus Challenges

 How can I get my tasks exported?
 How can I get them up to the server?
Applescript
Applescript Dictionary
Exporting Omnifocus tasks

#!/usr/local/bin/macruby
framework 'Foundation'
framework 'ScriptingBridge'

OFOC = "com.omnigroup.Omnifocus”
@of = SBApplication.applicationWithBundleIdentifier(OFOC)
load_bridge_support_file 'Omnifocus.bridgesupport'

@doc = @of.defaultDocument

tasks = []
@doc.flattenedTasks.get.each do |task|
 tasks << task
end
How can the server get this?

 Omnifocus tried to solve this
 Have to expose your desktop on internet
 More work than most people want to do
Use HP Object Storage!
HpObjectStore Helper

 Uses Fog
 def tasks_dir
   @connection.directories.get("omnifocus")
 end

 def update_tasks_file(content)
   tasks_dir.files.create(:key => "tasks.json",
                   :body => content)
 end
Update Cloud Bucket

 Run a chron job from my desktop server
 All my omnifocus installs are already synced
 Server gets a current task list
Outlook

 Need my calendar
 Don’t want to deal with corp security
 Use the same omnifocus technique
The Printout
The Arduino Code
Demo
Agenda

 Internet Of Things in General
 Ruby and USB
 Ruby and RFID
 The IOT Printer
 The IOT Display
The IOT Display


                  Original Inspiration:

                  http://bit.ly/vlMMvr
Arduino
32X8 Led Panel




                 http://bit.ly/wyuE5V
WiFly
Fritzing Sketch
Using IOT-A

 Already had an infrastructure
 Already had a datasource
 Format didn’t make sense for LED Display
User-Agent

 Use two different User-Agent header values
 User-Agent:IOTDisplay
 User-Agent:IOTPrinter
 JSON representation for display
Memory and the Sad Panda

 Standard JSON parser took up too much
  memory
 Char strings storage
 Had to give up a key feature
Demo
HP Cloud For Free!

           https://www.hpcloud.com/free-trial


                 @mwhagedorn


                     Thanks!

    https://github.com/mwhagedorn/IOTDisplay.git
    https://github.com/mwhagedorn/iot_printer_remote.git
    https://github.com/mwhagedorn/iot-assistant.git
    https://github.com/mwhagedorn/thingspeak.git

More Related Content

What's hot (10)

PPTX
Raspberry pi gaming 4 kids
Stephen Chin
 
PDF
We Must Go Deeper
The Software House
 
PPTX
Tensorflow internal
Hyunghun Cho
 
PDF
Docker @ Data Science Meetup
Daniel Nüst
 
PDF
PuppetDB: New Adventures in Higher-Order Automation - PuppetConf 2013
Puppet
 
PPTX
Raspberry Pi Using Python
Seggy Segaran
 
PDF
Go初心者がGoでコマンドラインツールの作成に挑戦した話
dcubeio
 
PPTX
Python in raspberry pi
Sudar Muthu
 
PDF
[Forward4 Webinar 2016] Building IoT Prototypes w/ Raspberry Pi
Tomomi Imura
 
PDF
110864103 adventures-in-bug-hunting
bob dobbs
 
Raspberry pi gaming 4 kids
Stephen Chin
 
We Must Go Deeper
The Software House
 
Tensorflow internal
Hyunghun Cho
 
Docker @ Data Science Meetup
Daniel Nüst
 
PuppetDB: New Adventures in Higher-Order Automation - PuppetConf 2013
Puppet
 
Raspberry Pi Using Python
Seggy Segaran
 
Go初心者がGoでコマンドラインツールの作成に挑戦した話
dcubeio
 
Python in raspberry pi
Sudar Muthu
 
[Forward4 Webinar 2016] Building IoT Prototypes w/ Raspberry Pi
Tomomi Imura
 
110864103 adventures-in-bug-hunting
bob dobbs
 

Similar to Exploring the Internet of Things Using Ruby (20)

PDF
Hacking the Kinect with GAFFTA Day 1
benDesigning
 
PPT
nodebots presentation @seekjobs
Esteban (Steven) De Salas
 
PDF
Open frameworks 101_fitc
benDesigning
 
PPTX
Lab Handson: Power your Creations with Intel Edison!
Codemotion
 
PDF
Better With Friends: Android+NFC+Arduino
Pearl Chen
 
ODP
Who pulls the strings?
Ronny
 
PDF
Javascript, DOM, browsers and frameworks basics
Net7
 
PDF
IoT Development from Software Developer Perspective
Andri Yadi
 
PDF
Original slides from Ryan Dahl's NodeJs intro talk
Aarti Parikh
 
PDF
How To Electrocute Yourself using the Internet
Alexander Roche
 
PDF
arduino
murbz
 
PDF
Node azure
Emanuele DelBono
 
KEY
Using Smalltalk for controlling robotics systems
Serge Stinckwich
 
ODP
Introduction to Raspberry Pi and GPIO
Kris Findlay
 
PDF
Get in Touch with Internet of Things
CodePolitan
 
PDF
JavaOne 2015 : How I Rediscovered My Coding Mojo by Building an IoT/Robotics ...
Mark West
 
KEY
node.js: Javascript's in your backend
David Padbury
 
KEY
SD, a P2P bug tracking system
Jesse Vincent
 
PDF
Taking the hard out of hardware
Ronald McCollam
 
PDF
Socket.io (part 1)
Andrea Tarquini
 
Hacking the Kinect with GAFFTA Day 1
benDesigning
 
nodebots presentation @seekjobs
Esteban (Steven) De Salas
 
Open frameworks 101_fitc
benDesigning
 
Lab Handson: Power your Creations with Intel Edison!
Codemotion
 
Better With Friends: Android+NFC+Arduino
Pearl Chen
 
Who pulls the strings?
Ronny
 
Javascript, DOM, browsers and frameworks basics
Net7
 
IoT Development from Software Developer Perspective
Andri Yadi
 
Original slides from Ryan Dahl's NodeJs intro talk
Aarti Parikh
 
How To Electrocute Yourself using the Internet
Alexander Roche
 
arduino
murbz
 
Node azure
Emanuele DelBono
 
Using Smalltalk for controlling robotics systems
Serge Stinckwich
 
Introduction to Raspberry Pi and GPIO
Kris Findlay
 
Get in Touch with Internet of Things
CodePolitan
 
JavaOne 2015 : How I Rediscovered My Coding Mojo by Building an IoT/Robotics ...
Mark West
 
node.js: Javascript's in your backend
David Padbury
 
SD, a P2P bug tracking system
Jesse Vincent
 
Taking the hard out of hardware
Ronald McCollam
 
Socket.io (part 1)
Andrea Tarquini
 
Ad

More from Mike Hagedorn (6)

PDF
Experienced Cloud Engineer Looking for New Roles
Mike Hagedorn
 
PDF
Couchbase Talk
Mike Hagedorn
 
PDF
Hacking the Internet of Things
Mike Hagedorn
 
PDF
Using OpenStack With Fog
Mike Hagedorn
 
KEY
Playing With Fire - An Introduction to Node.js
Mike Hagedorn
 
KEY
2011 a grape odyssey
Mike Hagedorn
 
Experienced Cloud Engineer Looking for New Roles
Mike Hagedorn
 
Couchbase Talk
Mike Hagedorn
 
Hacking the Internet of Things
Mike Hagedorn
 
Using OpenStack With Fog
Mike Hagedorn
 
Playing With Fire - An Introduction to Node.js
Mike Hagedorn
 
2011 a grape odyssey
Mike Hagedorn
 
Ad

Recently uploaded (20)

PDF
Windsurf Meetup Ottawa 2025-07-12 - Planning Mode at Reliza.pdf
Pavel Shukhman
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
Ampere Offers Energy-Efficient Future For AI And Cloud
ShapeBlue
 
PDF
CloudStack GPU Integration - Rohit Yadav
ShapeBlue
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PPTX
Extensions Framework (XaaS) - Enabling Orchestrate Anything
ShapeBlue
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PPTX
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
PPTX
Building and Operating a Private Cloud with CloudStack and LINBIT CloudStack ...
ShapeBlue
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
TrustArc Webinar - Data Privacy Trends 2025: Mid-Year Insights & Program Stra...
TrustArc
 
PPTX
Darren Mills The Migration Modernization Balancing Act: Navigating Risks and...
AWS Chicago
 
PDF
NewMind AI Journal - Weekly Chronicles - July'25 Week II
NewMind AI
 
PDF
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Hironori Washizaki
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PDF
Why Orbit Edge Tech is a Top Next JS Development Company in 2025
mahendraalaska08
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PDF
SFWelly Summer 25 Release Highlights July 2025
Anna Loughnan Colquhoun
 
PDF
Persuasive AI: risks and opportunities in the age of digital debate
Speck&Tech
 
Windsurf Meetup Ottawa 2025-07-12 - Planning Mode at Reliza.pdf
Pavel Shukhman
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
Ampere Offers Energy-Efficient Future For AI And Cloud
ShapeBlue
 
CloudStack GPU Integration - Rohit Yadav
ShapeBlue
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
Extensions Framework (XaaS) - Enabling Orchestrate Anything
ShapeBlue
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
Building and Operating a Private Cloud with CloudStack and LINBIT CloudStack ...
ShapeBlue
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
TrustArc Webinar - Data Privacy Trends 2025: Mid-Year Insights & Program Stra...
TrustArc
 
Darren Mills The Migration Modernization Balancing Act: Navigating Risks and...
AWS Chicago
 
NewMind AI Journal - Weekly Chronicles - July'25 Week II
NewMind AI
 
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Hironori Washizaki
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
Why Orbit Edge Tech is a Top Next JS Development Company in 2025
mahendraalaska08
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
SFWelly Summer 25 Release Highlights July 2025
Anna Loughnan Colquhoun
 
Persuasive AI: risks and opportunities in the age of digital debate
Speck&Tech
 

Exploring the Internet of Things Using Ruby

Editor's Notes

  • #3: How many of you have heard of Bear Grylls?
  • #4: The Grand AdventureThe Exciting BeginningThe Oh Oh MomentThe Big Finish
  • #6: Its not so important what those moments are..He overcomes, learns----- Meeting Notes (8/10/12 09:03) -----
  • #7: Developer Experience – user tools, management consoleDistributed Team About 15Subtext – I am interested in ways to automate what it means to be a remote team
  • #8: Also gonna talk about MacRuby, Automation using the scripting bridge
  • #10: Quote from the twine guys
  • #11: Contrast to 2004 yellowstone trip, when it was almost nowhere (JIWIre)Some kind of research about the growth of wifi availability
  • #15: Not the same as a bar code, you can write information to it.. Shelf life for instance, date stockedActive Example – tollway tags
  • #16: Industry, Retail – 3c per tag, hospitals
  • #17: This is a great book BTW.Most people think about the IOT being objects actively talking back
  • #20: Twine supermechincalWe arent gonna talk much the other stuff just due to time
  • #21: ----- Meeting Notes (8/10/12 22:51) -----14 minutes at USB Lamp
  • #22: My Episode 1
  • #25: Worth noting that this happens once in the c codeCould never get that to work in the ruby codeAlso the control message
  • #26: Worth noting that this happens once in the c codeCould never get that to work in the ruby codeAlso the control message
  • #27: Format specifier indicates signed 8 bit val (-127 to 127).. Why is this? Why not unsigned----- Meeting Notes (8/10/12 22:51) -----Demo at 18:20
  • #28: ----- Meeting Notes (8/10/12 22:51) -----Talk about the format of the color msg (37)
  • #30: Kit from AdafruitCode that ships with pulls tweetsTook me about two hours to put togetherSimple soldering
  • #31: Thermal printer, code that is listed for the kip pulls tweets
  • #32: Small device, low power, easy to interface to sensors, programmed in a C variant.. Only 30K of sram. Doesn’t run mruby
  • #33: Shields are expansion boards, they do lots of stuff, servo control data logging,
  • #34: Builds, uploads, provides docs, serial monitor. NOT Ruby.
  • #35: Code generatorGenerates C++ which gets pushed (arduino does this too)Problem is that step one part is kinda hard codedEvan Lights DSL generator -&gt; AST
  • #36: Code generatorGenerates C++ which gets pushed (arduino does this too)Problem is that step one part is kinda hard codedEvan Lights DSL generator -&gt; AST
  • #38: You can build, upload and view serial port all via textmate
  • #40: Rails APPSource is availableSchedule printoutsSelect what prints Do on demand printouts
  • #41: Google for OAUTHGoogle for CalendarTwitter for FeedsTimes of London for latest news
  • #42: I don’t use google tasks.. What do I doDeployed it on nova hpcs
  • #43: Old sample code omnifocus released (evan light worked on it)
  • #44: Applescript EditorApplescript allows you to automate apps on the platformMost apps have a scripting interfaceBut Applescript is kinda weird, suboptimal
  • #45: Allows you see if they have a scripting interface, and what commands are available
  • #46: Don’t want to use Applescript?Use MacRuby and the Scripting BridgeHave to build support files (basically a header file)This doesn’t show the export part…This doesn’t show filtering by projectI had issues with grabbing the project and its tasks throwing an exceptionHad to get them all then throw away ones I don’t want
  • #47: Putting my home machine on the net problematic. Omnifocus people gave you a rough howto and it was more work than people wanted to do
  • #49: Connection details are in the file…
  • #50: Show the omnifocus stuff added in
  • #52: We use Outlook
  • #54: You download the code from the website if you are an admin
  • #57: Reset printer firstLogin via serialPull SerialThen resetShow front pageUsing twitter oauthShow printoutsShow Settings pageShow printer downloadDo an on demand printoutSwitch to omnifocusUploadHPCS OSShow fileSkip OutlookOn Demand PrintShow template for printerLet it print
  • #59: I wanted a networked, display that listened on a socket and displayed messages.. Think CallerID. On demand messages
  • #63: Wanted to use the most common paradigm, i.e. wifiXbee – need other hardware..Bluetooth – can be flakyLast one really interesting(cheap)
  • #64: Yellow are controlRed powerBlack GndBlue DataGrey Read/Write
  • #67: Uses constraints to set the format on inbound request, so that that respond to block can handle it
  • #69: aJson wont fit… too little memory
  • #72: Probably not
  • #73: Time sensitive updates where getting dropped, mixing code for timing and logic.. Needed a solution
  • #74: Also cosm, open source version, running on HPCS
  • #75: On demand?, stop polling revisit rad?
  • #76: Chad Fowler’s book, faraday probably was quoting Benjamin Franklin