Zach Brock's blog



Zach BrockZach Brock
GoGaRuCo '09 - Lightning Talks
edit Posted by Zach Brock on Sunday April 19, 2009 at 12:29AM

Lightning Talks

Bosco is introducing the speakers. Come to the ruby meetup!

Jeff Smick - Blather

GoGaRuCo '09 - Lightning Talks - Jeff Smick - Blather

  • Simpler XMPP
  • Make XMPP4R easier
  • Requires libxml-ruby and EventMachine
  • simple DSL -Handlers for ready, error, message, presence, iq
  • Guards route stanzas
    • Guards can be symbols, hashes with string, hashes with regexs, lambdas or arrays
  • PubSub is in the works and coming next

Tim Connor - Rack Middleware build, init call cycle

GoGaRuCo '09 - Lightning Talks - Tim Connor - Rack Middleware build, init call cycle

  • based on the sinatra flash plugin
  • Wanted to remove sinatra from it
  • Found that every time you say "use" you are creating a lambda which will create an app reference
  • You can check out his Rack::Flash

Wolfram Arnold - What's Cool about cache money?

GoGaRuCo '09 - Lightning Talks - Wolfram Arnold - What's Cool about cache money?

  • Nick Kallen wrote the original Cache Money
  • Backed by Memcached
  • Abstracts away the caching between the code and the database so you don't have to worry about it.
  • Can just do User.find instead of User.get_cache
  • named scope, has_many, etc will all work transparently
  • Can almost use it as a drop in to add caching
  • Cache Money doesn't support joins but check out acts_as_most_popular

Yehuda Katz - Moneta

GoGaRuCo '09 - Lightning Talks - Yehuda Katz - Moneta

  • Moneta is allows you to create objects that behave like hashes backed by any format you want
  • Behaves just like a ruby hash
  • Has adapters for BerkeleyDB, Datamapper, Memcached, S3, xattr, rufus and more
  • Easy to write new adapters

Andy Delcambre - Datamapper Adapters

GoGaRuCo '09 - Lightning Talks - Andy Delcambre - Datamapper Adapters

  • Making it easier to write datamapper adapters
  • Wrote an adapter for github repos today
  • Demonstrating pulling down Github repos and searching with datamapper syntax

Brief interlude trying to figure out why the projector was not working

GoGaRuCo '09 - Lightning Talks - four developers trying to debug a bad display adapter

Erik Michaels-Ober - Merb Admin App

GoGaRuCo '09 - Lightning Talks - Erik Michaels-Ober - Merb Admin App

  • like active scaffold for rails, this is for merb
  • modeled after Django site admin uses their css and js python manage.py runserver
  • introspects your model to display form elements intelligently
  • adds a generator for adding new admin
  • not up on github yet try sferik on twitter

Mislav Marohnić - RSPACTOR for continuous tests on OSX (& more!)

GoGaRuCo '09 - Mislav Marohnić - RSPACTOR for continuous tests on OSX (& more!)

  • "make it green then make it clean"
  • autotest
    • Problems
      • one big file
      • awkward growl integration
      • pitfalls when using rspec-rails plugin
      • polling - uses 25% of cpu when idling :(
  • Original RSpactor written by Andreas Wolff
    • OS X only because it uses filesystem events
    • made for Rspec + Growl integration
    • Console tool
    • but abandonded :(
  • Mislav-RSpactor
    • cleaner, more modular, default mappings for usual directory structure
    • better mappings if its a rails project
    • tested!
    • so modular you can reuse the Listener if you want to listen for mac file system events
    • uses a lot less CPU Possibilities
      • running related tests while you TDD
      • compile Haml/Sass for static sites
      • trigger javascript sprockets build
      • render RDoc output while you edit comments
    • it can be run for all projects in your filesyste, you just opt each project in

Bryan Helmkamp - Rack::Bug

GoGaRuCo '09 - Lightning Talks - Bryan Helmkamp - Rack::Bug

  • Rack middleware
  • inspired by Django debug toolbar
  • Modular, can be used for any rack app
  • Panels
    • rails env
    • rails response time (cpu time)
    • request vars (session cookies, rack env)
    • keeps track of SQL queries - shows backtrace on queries, explain for queries
    • count of ActiveRecord instantiations on the page using Oink
    • can look in Memcache cache
    • template traces (times for rendering)
    • aggregates all Rails log entries
    • KB delta for process size of Ruby during a single request
  • runs on production environments, password protected
  • instruments using alias_method_chain hacks
  • Working with Yehuda Katz on Orchestra to someday soon simplify it

Pat Nakajima - No more Keynote with Slidedown

GoGaRuCo '09 - Lightning Talks - Pat Nakajima - No more Keynote with Slidedown and Maker's Mark

  • Speaks at NYCrb meetup, and didn't want to use Keynote
  • Wanted to use Markdown but also wanted syntax highlighting
  • Generates an HTML page that you can use to run your presentation
  • The Maker's Mark library was extracted to do easy syntax highlighting in Markdown

Chris Lee - Floxee - OS Twitter Dir

GoGaRuCo '09 - Lightning Talks - Chris Lee - Floxee - OS Twitter Dir

  • open source twitter dirctory application
  • tweet congress
    • directory of tweets from members of congress
  • Floxee on Github

Max - PaMP: Privacy-aware Marketplace

GoGaRuCo '09 - Lightning Talks - Max - PaMP: Privacy-aware Marketplace

  • From IBM Almaden Research Labs
  • privacy-aware market place
  • Goals
    • to develop a platform that allows users to manage their privacy settings across social network -reducing the cognitive burden on a user; leveraging the wisdom of his crowd
    • Maps to opensocial, etc

Andrew Cantino - SelectorGadget

  • No time :(
  • "SelectorGadget is an open source bookmarklet that makes CSS selector generation and discovery on complicated sites a breeze."

Kyle Maxwell - Parsley

  • No time :(
  • "Parsley is a simple to use and elegant language for creating HTML and XML parsers"
  • "Parsley can be used from Ruby, Python, C/C++, and the *nix command-line."

CloudKit: Hacking the Open Stack with Ruby and Rack - Jon Crosby

Intro

Thanks for the votes, his talk is here because of GoGaRuCo attendee votes.

He works for Engineyard, and they are hiring.

This talk will be "lightning-talk" style, so that means it will be very fast (and also means this live-blog will be pretty sparse)

GoGaRuCo '09 - Jon Crosby

Cloudkit

Cloud Kit is an Open Web JSON Appliance Can quickly and easily spin up an API for RESTful Collections of JSON Documents

Similiar to CouchDB and Perservere Implemented in Ruby (unlike CouchDB)...

Now Frameworks are basically another MVC framework

So why wouldn't you want to do a new MVC architecture?

gem install cloudkit

Radar

"If your RESTFUL API cannot be accessed with curl, you lose"

Resource Composition in the Browser

If you have two widgets in the browser doing different tasks, you can point them at different resources. Example: 280Slides Example: SproutCore

Mobile apps can benefit from this style of restful architecture as well.

ESI caching layers - like Old Skool SSI, except that they are cache includes.

Cloudkit is built on Rack. Rack is awesome.

HTTP Intermediaries - such as Rack Middleware. Rack Is The Web The spec for rack middleware is runnable and readable

Build an App! create config.ru require 'cloudkit' expose :todos, :profiles

Cloudkit bootstraps so you can query it You can ask it for it's Options and it'll tell you what you can do with it

Hypermedia as the Engine of Application State

Cloudkit is read-optimized

No SQL, no ORM, uses Tokyo Cabinet Tables instead

Schema Free, HTTP and JSON are the schema

Can do a PUT to place a new record at a specific location

Can do POST to update. By supplying the version etag the server can solve the "lost update" problem

Auto-versioning, any time you update a resource, the previous version is archived. That's reflected in the url - :collection/:version. This is solves the last-update problem when 2 users update the same document at once. If you try to update a resource without providing the version, it will return 400 bad request. If two clients try to update the same version, the seconds get 412 precondition mismatch response.

Cloudkit also solves the batch GET problem, where you can access the resource with id "_resolved" to get multiple documents at once (and their complete contents).

Finally, with DELETE, you can't delete things that out of date, similar to update. The 410 Gone response will get returned in this case.

"Rewrite in Scala... or solve the problem"

What's missing? The ability to ask questions Pagination Querying - solved with JSONQuery. (/todos[0:10][?priority=3])

jQuery plugin for Cloudkit

All code is up at Jon's Github

Because it's OpenWeb, you can easily add OAuth, OpenID, etc. A desktop application might use OAuth, whereas a web application could use OpenID for authentication.

Q: Isn't querying slow? A: Yeah, it can be slow. There's indexing work that needs to be done on write to optimize read. Tokyo Cabinet might come to the rescue here about searching data with regular expressions.

Q: Are there real world apps using cloudkit? A: Not that I know of. One company might be trying it.

Q: What kind of apps are good for cloudkit? A: I'm personally using it for Actiontastic, a synchronizing web service that provides a REST interface.

Q: Are there plans to abstract away the key/value storage system so other systems can be used? A: Yehuda has a library called Moneta that's an abstraction for Key/value stores that I'd like to move to.

Q: How does CouchDB map/reduce company to cloudkit's JSONQuery? A: It first started as a Sinatra app that sat between couchDB, but I found JSONQuery to be better suited.

Intro

Hypertable and Rails: DB Scaling Solutions with HyperRecord

Links: Hypertable HyperRecord

Rusty is from Zvents, a local search engine

Presentation

Showing example of hourly data for the last month for a single event

GoGaRuCo '09 - Rusty Burchfield

Old benchmark was over 1M rows inserted per second sustained

Hypertable is an open-source implementation of Google's BigTable.

Hypertable is a Column-Oriented DBMS

Data Model 5-part key: Row Key Column Family Column Qualifier Timestamp Revision

One index per table (on the row key) Only stores strings

Architecture Master server - tracks range servers and where data is stored (spare master is also usually run, as it's a single point of failure) Range servers - data is broken up into individual range servers Hyperspace - Handles locking and master recovery HDFS - Stores redundant copies of data

GoGaRuCo '09 - Rusty Burchfield

ThriftBroker - An RPC wrapper for Hypertable for many languages using the Thrift Wrapper

HyperRecord

HyperRecord is a subclass of ActiveRecord for Hypertable Supported by the Hypertable

Example Loading data into simple pages app Loading first 10,000 articles of wikipedia 150MB of data infiled in 14 seconds Loads all the data into a rails scaffold and browses it

Design considerations Denormalization - can't do joins so you have to put your data in an appropriate format for querying. Can use MapReduce to interact with data. Column families/qualifiers - You can store data in the key part of the key value pair Revisions - deletes are represented as inserted delete cells

Questions

Q: How do you break down data by hours in example
A: Broken down by Ruby and aggregated

Q: It looks like the keys in that list were strings, not timestamps, did you have to take the timestamp and convert it to a string yourself?
A: Pretty much

Q: Did the wikipedia articles contain any of the sub-data like images, links, etc?
A: No, just a sql dump as a demo of querying the database through a rails scaffold

Q: Does hypertable select support SQL limits, order, etc?
A: HQL supports a lot of things you'd expect from SQL, but it's still somewhat limited.

Q: What do you do with it?
A: We store all of our log data and process it using Cascading to gather hourly data for all our pages. We then put it in Hypertable so we can query it quickly to generate reports.

Rusty: Cascading is Java code You can easily construct complicated MapReduce jobs using it

Josh: Some other uses of Hypertable at Zvents Changelog We deal with a lot of user created content, and things change often and we don't always know what We log everything that ever happens to our data so that we can track everything that happens to our data. From uploaded images to deleted links to edited descriptions, we can see what changed, when and how.

Zvents and Baidu are the primary sponsors of the Hypertable project. Hypertable and HyperRecord are both on Github.

Hypertable development started 2 years ago as a forward looking solution to analytics problems.

The search problem for Zvents is many dimensional: Time, Location, Description, User Data and User Behavior and Hypertable is a way to inform a lot of that data.

Q: What kind of problems are well suited to HyperTable A: We're trying to move our entire site over. A canonical example for this kind of database is a crawl database. A2: Anything where you have mountains and mountains of data and want to query over it.

Example of Crawl Database stored in Hypertable.

Zach BrockZach Brock
Standup - 04/10/2009
edit Posted by Zach Brock on Friday April 10, 2009 at 05:28PM

Interesting

Transparent PNGs and IE6 - Check out this awesome article about making gracefully degrading PNGs with transparency. With a little PNG8 trickery you can use alpha channel transparency without worrying that your page will look totally awful in IE6.

Rubymine 824 - No immediately obvious new bugs and a few teams are using it successfully. A step in the right direction!

Zach BrockZach Brock
Standup - 04/03/2009
edit Posted by Zach Brock on Monday April 06, 2009 at 04:04AM

Interesting

Hpricot 0.8 - This version doesn't seem to work. The solution seems to be to downgrade to 0.6 or switch to Nokogiri

Rubymine 820 - Autosave is back! Well, about 95% of the time.