Wrestling GenuineJava onto Fedora 10

In order to get access to a client’s VPN, I needed to get their VPN client software installed on my Fedora 10 workstation. Following their basic directions, it was apparent that there was an attempt to run Java in FireFox, and it was failing. Running FireFox from a shell, I could see IcedTea errors. So, I went off for instructions to get Sun’s Java installed.

There were some clues from the http://ubuntuforums.org/showpost.php?p=1356952, and few promising Google results. The Fedora Project had an FAQ on Java that was a good start. That pointed to http://www.city-fan.org/tips/JpackageJava with some fairly intricate instructions to download the Sun JDK package and invoke some serious RPM magic on it to turn it into a set of RPM packages that could be installed on Fedora. Once I followed the instructions, the ‘alternatives’ script showed me that Java was installed – hurrah! I tried the VPN install again, but no joy, same IcedTea error messages. Hmm. It turned out that the global Mozilla FireFox plugins, stored in /usr/lib/mozilla/plugins, had two shortcuts: libjavaplugin_oji.so and libjavaplugin.so. Running FireFox and examining about:config and searching for plugin told me that Moz should only be using the first one, but that was pointing to the correct place. The second, on the other hand, was pointing to the Iced Tea installation. FireFox’s about:plugins showed me that Iced Tea was still the preferred plugin. I deleted the second, libjavaplugin.so, link and tried it one more time. Yes! Installed. Whew!

Now to get to work…

Notes from October Python SIG: Unit testing and Sphinx

An even dozen (or maybe an odd dozen…) folks attended the October Python Special Interest Group meeting, held as usual on the fourth Thursday of the month at the Amoskeag Business Incubator.

It was a busy and exciting meeting. Vigorous conversations filled the first half hour, as we welcomed a few new members, a few members not seen in a long time, caught up on news and what’s new in the Python world, and made a round of introductions.

Kent S. Johnson presented a new episode of Kent’s Korner, talking about the unit testing facilities available in Python. Python has a couple of options, including a xUnit-clone version and a more Python system in nose. We got into a great discussion on the philosophy of unit-tests, the test-first-fail-code-test cycle, test-driven development, and so forth. It was quite enlightening.

Arc Riley made the second presentation on the Sphinx documentation generator for Python. Arc talked about the history of Python documentation, with docstrings and EPyDoc and ReStructuredText (not to be confused with ReST, Representational State Transfer!). Sphinx seems to be a popular project name these days, as I heard about a different project by the same codename both at the RubySIG and maintainer Patrick Galbraith’s presentation at MonadLUG).

Arc provided us with the slides to his presentation, available on the gnhlug site here.

Links and notes from this meeting and past meetings can be found at Shawn O’Shea’s blog at http://eth0.net/ — thanks, Shawn!

NOTE that the next meeting of PySIG will take place on Wednesday December 17th at the Amoskeag Business Incubator across the hall from our usual meeting room. Hope to see you there!

Thanks to Arc and Kent for great presentations, to Bill and Alex for organizing and running the meetings, to Janet for the incredible cookies, to the Amoskeag Business Incubator for the great facilities, and to all who attended and participated.

SFTP, DropBear on Linksys WRTSL54GS and OpenWrt

For some reason, I couldn’t get this to work the first time through, but perseverance paid off. On our home office LAN, we use the LinkSys WRTSL54GS router. The WRTSL54GS (whew!) is the Storage Link (that means it has a USB connection) version with 802.11 G technology, the standard 54 Mbps wireless protocols, with the SpeedBoost option.

I’ve upgraded the factory-installed firmware with the third-party Open Source firmware OpenWrt. This gives me more capabilities, the ability to tweak lots of settings, and the ability to add on many, many third party applications. You might not think of a little sub-$100 consumer-grade router as a platform for third-party applications, but under the hood this device is a Linux box with a decent CPU, a bit of spare RAM, switches, routers, bridges and USB connections. Thanks to the storage option, you might make your router a file server using Samba or NFS protocols, or an ftp or SFTP server you can use to share files inside the firewall or securely outside of your firewall (if your contract with your upstream provider allows you to run servers; many consumer connections disallow this, unfairly, in my opinion.)

OpenWrt is accessible remotely through telnet (discouraged, as it is not secure), Secure Shell (ssh), and a web interface. There are even third party add-ons to created an enhanced web interface (WebIf2) with a built-in package manager, usage graphs that update live, and more.

This week’s project was to get the storage working. I was under a misunderstanding that disk sharing had been broken in the version of OpenWrt (White Russian) that I’m using, but a CentraLUG meeting earlier this year, presenter Bruce Dawson showed off one of his LinkSys machines with disk storage working, so I was encouraged to give it another try. Following the instructions at the OpenWrt wiki for USBStorage and SFTP, I was up and running pretty quickly. Nifty!

This is pretty cool. In slightly less geeky terms, this gives me the ability to transfer files to our home office LAN from anywhere on the Internet without having to keep any of the machines in the office running, just the router itself and a USB flash drive hanging off it.

Fedora 10 “Cambridge” ships!

Last Wednesday, just in time to give thanks, the five-year-old Fedora Project released their 10th version, code-named Cambridge. Fedora 10 has all the latest goodies: a very improved wireless networking tool, far better Java support, and a slew of features they list here. I was very impressed with the new version upgrade features: I was able to download a single “pre-upgrade” package and run it to convert my Fedora 9 installation on my ThinkPad T61 to a Fedora 10. Over at the Linux Format website, Andy Hudson reviews the new release and concludes, “If you’ve not tried Fedora, or have moved away from it in the past then you should definitely take a look…”

Jump on the bandwagon and check out the new Fedora 10 here

Electrician’s Mate “A” School class 8017-B

U.S. Navy Electrician's Mate "A" School class 8017-BA fellow LinkedIn member asked me recently if we’d gone to Electrian’s school together, as we’d graduated in the same class from Naval Nuclear Power School. I didn’t recall his name, but it prompted me to dig around in the archives and pull up this photo. (clicking the picture will yield a 1.2 Mb PNG)

Getting Stuff Organized

This next month, I’ll be flipping the calendar page to 2009 to schedule the next month’s work. I’ve been using a “desk-size” Day Runner – 5½” x 8½”, conveniently half a US Letter sized sheet – for fifteen years. I’ve got one of the older 3-ring models, and lots of the cool accessories: zip pouches, business card holders, etc., but I’ve bought the calendar refills each year. I’ve also printed some pages for myself: some grid pages using DOS-characters and FoxPro/DOS, dumps of my contacts, etc. But I’ve kept DayTimer and other vendors busy printing.

This year, I came across a great site, DIYPlanner.com, with some great templates to use. The host developed a set of templates, now up to version 3.0, released under Creative Commons, an nearly 80 pages of clever templates. Many other have contributed templates, graphics, word processing documents and executables to generate some really professionally-finished pages. Supporters of Getting Things Done, Hipster, the Covey plans and the other organizing techniques seem to be getting along pretty civilly, and have posted a number of interesting articles. If you’re a fan of systematic ways of doing things (and that seems to be a common trait amongst the computer nerds), check out DIYPlanner.com.

Webpages should accomodate the viewer gracefully.

I regularly run my FireFox browser with JavaScript disabled, using the great NoScript plugin. Keeping JavaScript disabled by default protects me, a little, from malicious sites. “Malicious sites” used to be a codeword for “sites you shouldn’t visit anyway,” but all sites need to be considered malicious, owned by bad guys, until you have a good reason to believe otherwise. Ad networks have accepted ad content containing malware. It happens. Bad guys figure out how to inject code into comments on legitimate sites. And phishing emails are getting so believable that everyone’s going to get caught once in a while. A first visit to a linked web site should let me examine the HTML and the page and decide if this is a site I’d like to trust. Websites that just dump me on a blank page with a disabled Flash animation FAIL.

Sites need to understand there’s good reasons for a client having their JavaScript turned off, and downgrade their presentation gracefully. For example, the http://www.searspartsdirect.com site tells me, “IMPORTANT ! This website requires JavaScript support for proper operation. It appears that your browser does not have this feature enabled. Click here for more information and assistance.” Well done. Proctor and Gamble’s pg.com site, on the other hand, hangs for 10 seconds at a blank page, and then takes me to a generic page (using a NOSCRIPT tag and redirect) telling me “PG.com is best viewed on Netscape or Internet Explorer version 4 or above. To ensure our Web site works on your system, please upgrade your browser…” Oh, puhleez! Wrong in so many ways.

Voices That Matter, Professional Ruby ’08, notes from Day Three

Well, the Day Three notes are a bit rough. Wrapping up 800 miles of commuting and not enough sleep during the conference. But at least I didn’t have to come up with bail money 🙂 Stay tuned. Expect updates, spell-fixes and proper grammar as I punch this up over the weekend…

Josh Susser, Pivotal Labs
dawn of history: agriculture, pyramids, smalltalk
what the hell happened to smalltalk? In the 80s,
arguably the most advanced software development
platform in the world. The best of the best.
At Apple, wrote a memo damning C++
Bjorne’s fault.
C++ is portable structured assembler.
SmallTalk had IDE, garbafe collection, and a big blind spot.
It’s greatest strength is also his greatest weakness.
Consider SuperMan. His moral certitude is his greatest flaw, too.

With SmallTalk, the virtual image stored everything, down to
the network stack and primitives of the file system.
Just the kernel needed to actually be implemented on the OS
itself.

Squeak is the modern implementation.

Virtual Image was very powerful, but not without costs: it made
it nearly impossible to deliver client applications.

Updating a client involved sending them code for them to compile
to update the application code, which was mixed in with
the data in the Virtual Image. Problem. Multiple vendors couldn’t
really practically share a VI, since they could easily clobber each
other’s stuff.

Was a regular at OOPSLA for years; it was all SmallTalk for the longest time. Then
C++ came along, and OOPSLA was all C++. And it wasn’t that C++ was so much
better than SmallTalk, it was that it was so much better than C.

Argues Ruby is prodeominant because of Rails, and Rails predominates because of
web apps and XP. Extreme Programming is highly adopted in the Rails community,
and TDD is very easy to accomplish. “It’s almost easier to test than not.”

Many current issues will be solved with MagLev or Rubinius or Marv.

Problem with the flexibility of Ruby/Rails is the strength and weakness: meta-programming and on-the-fly in-code creation of classes and method means that code is executed that doesn’t exist anywhere on disk. How can you find and modify and refactor code that’s not there? Answer: tough. But we have testing that should describe all the behaviors or our application, even the just-in-time code. Modifications to base classes such as Active Record to hook in and capture the creation of classes and methods. Clever!

RESTful possibilities, REST in Rails and Beyond
James Golick
Survey: who codes REST? half the hands
Example: you host a web site, want to map some data. Don’t have the geocodes, want to oursource that
Solution: remote procedure calls, SOAP or CORBA. Complexities of underlying stacks is huge: 41,659 LOC for the SOAP client in Ruby. rpc = FAIL. Roy Fielding’s PhD dissertation. Describes http as Representational State Transfer (REST)
anything can be a resource http is verb (GET, PUT) and a noun (location) Argues POST http://example.com/comment/create is NOT RESTful – Don’t Verb the Noun map.resources :post – tells the Rails router to route the request not only on the noun, but also on the verb

standardization is good.

Assumes that most “professional” ruby developers have worked with these conventions, and therefore will be productive much faster. RESTful api with YAML, JSON or XML exposed. powerful tooling. Example: James had an idea, Tweet:”walking my dogs thought I’d bore you with details of my life, blahblahblah” right from the command line. 35 minutes from concept to shipping

Things not to do in Boston while you’re drunk: Bukowski Tavern FAIL

Using Berkeley DB and Ruby for large data sets Matt Bauer
Tweets: Still at the Boston police station. #prorubyconf08 Bailsman is on the way. Still not processed completely yet. Long nite
Data collection of bike racing, 28 data points captured every 5 seconds, 1.7 TERAbytes of data annually .
Wrote a custom lighttpd plugin, SleepyCat (BerkeleyDB) and merb for data collection.
Bullet points: Open Source, highly concurrent (thousands of threads), scales to 256 TB, keys/data to 4 Gb, Supports ACID transactoion
embedded/ runs in same address space, written in C with many bindings, very small: 399 kb of text space, no SQL or Schema
Doesn’t operate on Keys or Data
Two data stores: concurrent: no recoverability; transactional: Fully recoverable, ACID
BerekeleyDB is like an Indy Car: wicked fast, but you will hit the wall. Advice: read the manuals! Plan for recovery.
Specs on performance he’s measured: Concurrent, nearly 1M records posted per second, Transactional, 128K/s

Ruby & Dbd bindings, two versions: Guy Decoux 2002-2008, passed away! Dan Janowski (2006-2007) exact
implementation of C API, Oracle API, Quite Stable, Only Three Test Cases.

Very frank about “hating” SQL – like swim floaties, we can do better. I’m not sure he understands the problem space
that SQL solves.

Code example, very C-like
Four data storage patterns: BTree (sorted balanced trees, can set fill factor high on ordered insertion),
Hash (extended linear hashing), Queue (fixed length records, head/tail push/pop), Recno (stable record number).
Simple tuple can be 8 Gb in size, one key (4 Gb), one value (4 Gb)
Flags are all-important to interface, each method call has parameters to be tunable.
Cursor support, open, first, next, last, close. create, save.

Voices That Matter, Professional Ruby Conf ’08 Boston, Day Two

Matt Knox did a stand-up presentation for the second day keynote, as Giles Bowkett was not able to make it to the conference. Matt was telling us about the great stuff he’s learned at conferences. Smalltalk is the coolest language ever. Unit Testing is not the greatest thing ever. Damien Katz’ great story of success. DHH wrote some framework, we’re not the fringe any more. The Great Surplus (I believe this talk is available on IT Conversations, search for RailsConf). Giles, in a picture, bowling and archery at the same time. Giles (in words): an epic tale of adventure, fail, music, rebar, LSD, VC, parking-ticket evasion, and pet monkeys (that’s be us).

Followed an informal Smack-Down session: one yellow sheet, one blue sheet, Obie Fernandez pops up slides and we get to vote, vim vs. emacs, Agile Dev w/ Rails vs. The Ruby Way. svn vs. git broke out into a debate, Brian argued that svn is for maintaining versions of files, not for collaboration, and is fundamentally broken and people need to get over it. jQuery vs. Prototype? Chad from Thoughtbot uses Prototype, and says currently the pain of switching outweighs the pain of sticking with Prototype. grid960 (http://960.gs/) versus… I missed it, Sinatra v. Camping? Few if any cards, all for Sinatra. Blueprint v. YUI, empty? v. blank?, system gems v, frozen gems, Vlad v. Capistraro, Mocha v. Flexmock, FactoryGirl v. ObjectDaddy, resource_controller v. make_resourceful, HAML v. ERB: interesting debate: HAML “Beautiful but astere”, ERB parses like HTML. HAML less typing & faster, ERB has too many close-tags, Obie argues that HAML maps well to CSS – I need to check this out!, Redcloth v. Bluecloth (no one), RMagick v. ImageScience (nobody’s sure) , Tiny MCE v. FCKEditor, restful_authentication v. clearance, Test::Unit v. RSpec (RSpec 3:1). Very informative!

Payment Processing with Active Merchant, Cody Fauser, Shopify
Why? Get money from your customers. Originally http://www.snowdevil.ca/ integrated with Moneris, a single payment processor. Expanding to support multiple processing options, everyone has their unique API, glossaries, , “unique snowflakes,” etc. Simple Uniform API to dozens and dozens of payment processor back ends in over a dozen countries. Components follow the normal flow of Customer data entry, Authorization, Payment and Settlement. Includes extensions for the Address Verification System and Card Security Code (CID, CVC or CW2). Cody jumps into the code. It’s simple. And it’s the same for three processors he shows — that’s the point, after all. The code for settlement is drop-dead simple as well, and for collecting the results.

Rock Solid Ruby Deployments, Philippe Hanrigou
Addison Wesley Shortcuts, Troubleshooting Ruby Processes, free chapter available on line at InformIT. How to troubleshoot problems with with threads. An http request gets the attention of the Rails handler, which gets the lock, goes to the dispatch, which might go to the database. While waiting on the I/O, a new request gets a new handler spawned which… goes to get the lock, which is busy, and… goes to sleep waiting. Ouch! This drove the need for caller_for_all_threads, which can be used to dump the state of all threads. This is a patch, not a gem, but will be included in next version of Ruby Enterprise Edition and Passenger. Another good tool for troubleshooting is DTrace “a comprehensive, dynamic troubleshooting tool” or in Brian-talk “a freaking awesome tool for debugging all the fracking stack.” DTrace runs within the kernel and so it can see all the hangups from the Ruby interpreter to the networking calls to the database processes to the raw I/O. However, DTrace is not running on Linux. “How many of you deploy on Solaris? Open Solaris OS X Server?” Not a single hand. “We all deploy in Linux.” A DTrace is not Linux-friendly. And SystemTap, while venerable is not DTrace. Paul Fox, www.crisp.demon.co.uk, is trying to port. Had a demo of DTrace running on Ubuntu in a VM. PID Provider is a wrapper that can intercept calls from an application that’s not instrumented for DTrace. Until then, we talk about what we can troubleshoot now. Ruby Probes, Joyent, good wy to get started. Ben Rockwood has a good presentation on MySQL and DTrace from the MySQL Conference 2008, find on the web. There’s also a ruby plug-in for DTrace: gem ruby-dtrace ‘Tracer”
http://github.com/ph7/xray/tree/master

Blaine Cook, formerly of Twitter
A short story about messages… things we do every day: postal mail, telephones, etc. Synchronous v. asychronous. Clustering, hadoop documentation, Google MapReduce. Reduce latency. Messaging: has a sender and a recipient. Synchronous: bad. Options: RabbitMQ, ActiveMQ, Spread, beanstalkd, Starling (Blaine wrote for Twitter), Gearman/TheSchwartz, Delayed::Job, cron. Each has their own protocols, some share a few like AMQP. Does queue need durability? What kind of guarantee can you get on delivery? Beanstalk doesn’t have a durability guaranty, and Spread only under certain configurations. Reliability? Atomicity? If a job is sent off into a queue and no success or failure message is received, how should the messaging system behave? Restart the job? What if the job has a cost (example: sending SMS) whose cost is incurred, but completion fails later? Recently released ActiveQueue, some similarities to Nanite. Others: Workling talks to Sterling, Rabbit, ActiveMQ, etc. Paraphrasing, if email worked the way the internet works now, you’d have to check individually to see if each of your friends had sent you email.

Matt Pelletier (CTO, Eastmedia) was to talk “Rails Scales” but instead talk about “Mobile Developments” taken a great interest in the mobile sphere, business has grown out of web-only focus. Global PC stats: 280 million PC sales/year. Phones sold: 1.3 BILLION, more in a single quarter than all computer sales. “Smart” phones have small share of that market, admittedly, but growing. Technologies: Voice, SMS, MMS, Mobile Data Services. Voice: regular calls, robo calls, automated voice services (airlines), VOIP, Voice XML, Asterisk/Adhearsion. SMS, finally exceeding voice in US, has been the situtation in Far East for a while: Mobile Terminated (MT), Mobile Originated (MO), Shortcode vs. Phone number, No friggin’ metadata, Project: Mobile Commons (launched 2006, worked with civic organizations). MMS: “Total Shit Show,” Carrier Specific, Event Apple said screw it, use email instead. What’s up with viewmymessages.com???? Mobile Data Services: WAP, the “Real” internet, Apps. WAP 1.0 complete disaster, WAP 2.0 is basically trimmed down Web. Project: New York Jets Mobile. Page caching rocks. Brett Farve signed, 4 million page views in a couple of hours, cached through Akamai. The “Real” Internet: as long as you exclude Flash, Real browsers with Js/AJAX support, marketing heating up, MobileSafari, Android Browser (WebKit based), Fennec (FireFox), Opera, Skyfire. Apps: used to be controlled by the carriers in the US, Qualcom’s BREW, Apple iPhone via App Store, Google Android offers Marketplace. App Technology: (most of these folks are too young to remember OS/2 v. Windows) too many OSes, entrenched. Interesting stats on numbers of smart phones sold (Apple #2 to Nokia), as of Q4 more messages that voice calls in US. What are people doing on their phones? Watching videos, accessing social sites, Matt said “boring but played out” but I’m not sure of the context. Up and coming: Geo-related apps: directions, find a restaurant. GPS is still really slow, AGPS (tower triangulation) much faster, less accurate, Skyhook Wireless FTW, “I want to know exacly where I am, in motion” – makes trouble playing games that are exacly location-dependent. New product, RSN, http://spot.io – “tell us what you saw and where you saw it.” iPhone development… feels like the Rails community, sort of: searching sparse domain knowledge; Objective-C ain’t Ruby; iPhone SDK ain’t Rails. “But STFU, it’s pretty badass for 6 months in.” A decent coder can get going… it’s fun and excitig. For Spot.io we wanted the photos off the camers and quick entry.

Jon “Lark” Larkowski, HashRocket, Communications to support Client Development
Pivotal Tracker: we don’t write a line of code that doesn’t support a user story. Current iteration gets its own page listing ongoing stories, amount of effort. Let’s clients view velocity and acceleration, where stories are in the process, etc. Stories need to be full (BAD: “admin interface”) so any dev can sit down and start coding. Direct capture to Tracker, slowly train customers to write their own. Moving toward standard forms, ideally, Cucumber forms As a l Pair Programming (ATFT). d2d: keep focused, honest, high quality. two wheels on the axle. Company-wide standup each morning: what did you do, what goes next what. Communication aspects: c2w express stores as test, d2c RSpec specdoc format, cucumberl d2d: durable system specification. Techniques used every day at HashRocket: RSpec, MVC test, Factory Girl Object Daddy, Cucumber. Selenium, RSpactor, Continuous Integration, Clicking on Stuff. Delivery: all the f’ing time (Sorry, Brian). Deliver finished stories multiple times a day, c2d very tight feedback look with client, then d2d back together (2 pairs programming separately meets to exchange what’s new). Engine Yard staging slice (highly recommended) or EC2 with Passenger. Funny diagram of “Impedance Mismatch” with client communication, dev communication,

David Berube, Surviving as a Windows-based Ruby developer
Windows is a difficult platform to develop Ruby on, since it lacks many of the POSIX tools (natively, there are add-ons) and running Apache is less well-known. David’s pretty frank: he recommended a Windows dev look seriously at Ubuntu (Disclaimer David was my predecessor as “Fearless Leader” of the Greater New Hampshire Linux User Group, and I think we’re both equally, correctly prejudiced). Intrinsic pitfalls: automatic binary conversions (LF->CRLF) can corrupt binaries. No Kernel#fork; this won’t work. No GNU out of the box. No compiler out of the box. There are some good options: Editor: Visual Studio: Ruby in Steel, Net Beans, gvim (recommended) cream, Emacs, “E Text Editor” – Textmate clone (bundles can be work, slashes are the wrong way, someone has a patch bundle for those, too) Cygwin, UNXtils (preferred). Misc tools: Safari for Windows, FireFox, Tortoise for SNC, LDE(x) windows desktop replacement, PuTTY, FileZilla, SmartFTP

Rails AntiPatterns, Chad Pytel and Tammer Saleh, Thoughtbot
Moving code from controllers to the models: ‘create’ method, 14 lines is too long. Smells funny: there’s a transaction that wraps a single call create_version!() Eliminate DRY code in create new version and create first version, use defaults to set default/initial values of version, use created_at and id functionality built into ActiveRecord design. Slide entitled “Minor Law of Demeter Violation” where they short-circuit the redundant code that references an object and drills into its properties.; better to expose that property/attribute/structure as an explicit method in one place and use the new method to free multiple dependencies on an internal structure. Simplified the create version method to half-dozen lines, removed a related trigger as a callback rather than explicit code. Lessons learned: even a 15 line controller action is too long. Exceptions should be exceptional, Your models should use callbacks to add complex behavior. 2nd example: way too much code in update. Solution: use a constant with a hash to create a set of methods. Lessions: tackle large refactors iteratively. push as much business logic into the model as possible. In lots of code, dimple DRY principles will lead to a lot of refactorings. Common problem domain: user and roles. “Thoughtless Code” Methods like Role, Roles, CanEdit, CanPublish, CanDoSomethingElse…. Solution: Remove the whole shebang, add boolean columns to User: Admin, Edit, Publish, and Active Record automatically gives you the elegant User.Edit?, User.Publish? User.Admin? Lessons: Refactoring! Bug Fixing, Always Be Refactoring, didn’t cover testing; there was a test suite, so regressions were avoided.

Battle Royale, Foy Savas, author “The Merb Way”
Merb’s Role in the MVC Holy Wars
Merb is Rails rewritten with Django and Pylons influences. Created by Ezra in 120 LOC Mongrel _ ERB. Now: high performance, quick to deploy, easy to scale. Sounds like Rails. It isl Awesome. Rails vs. Merb in a fight cage? Point by point comparison. “No code is faster than no code.” “A micro-second saved is a micro-second earned” Background processes, run_later block. Built on Rack Rack allows ou to string together apps using Rack::Cascade. Example, just serving RSS feeds don’t have to invoke entire Merb framework. ActiveSupport is a kitchen sink, ExLib isn’t. DataMapper destroys ActiveRecord. Authomigrations are what your developers always needed. Lazy Loading DataSets. Strategic Eager Loading. Plugins are Gems. Merb Parts. Arguably one of the slickest presentations at the conference, Foy’s rendering of the Dao De Jing, which he read in what I presume is the original dialect, “A way that can be taken rarely stays the way. A name that can be named rarely stays the name.” Not just dramatic, but the theme of his presentation. Perhaps Merb will be the next way.

Voices That Matter, Professional Ruby Conference 08

Warning: Draft nonsense, needs spell-check, grammar and thought completion.

Voices That Matter, Professional Ruby Conference 08, Sheraton Boston, November 17-20, 2008. Beautiful facilities, good good. This is a brand-new conference, version 1.0, and Obie Fernandez was the lead at designing the technical content and format, rather radical schedule: 3-30 minute sessions with 10 minute breaks, long break, 2-30 minute sessions, lunch, 5-30 minute sessions. This means the sessions are tight: experts brain-dumping for 30 minutes

Pre-Conference Sessions

AM, Pat Maddox, RSpec and Behavior-Driven Development: excellent overview of BDD, leaped into RSpec with an expectation that users were familiar with Ruby and TDD, which might not be appropriate for a crowd at a pre-conference. Excellent use of a pre-cooked set of examples (coding a blackjack app) with the tests already written so devs only need to fill in code one test at a time to satisfy the requirements, “Red, Green, Refactor” Worthwhile session. Around two dozen attendees.

PM, Hal Fulton, Ruby Basics. Co-Author of “The Ruby Way” an excellent introduction to the language for folks not familiar with it. A few less attendees, as there was a parallel session by Russ Olsen, “Fluent in Ruby” Hal knows his stuff, was comfortable and receptive to questions. We did some ad-hoc coding. He had an excellent, and again, simple, example that let us concentrate on the code and not get stuck in the business problem: reading a table of text into a set of records, manipulating and sorting them. An incremental set of examples introduced a couple new challenges to each example, and then a couple of new ways to use Ruby, new commands or techniques, to solve those problems. Very clear. A very helpful session for getting comfortable with Ruby.

Day One: attendees 80
Keynote: Obie Fernandez: (http://blog.obiefernandez.com/) war stories of success at Hash Rocket. Pair programming with pairs of keyboards and mice. 14 people total. Keep small (14, boutique). No interviews (week work on site), Guest Star program. References: Agile Manifesto, 37 Signal’s “Get Real,” Rails Rumble 2007. Small Releases often. “Working software over comprehensive documentation ” from Agile Manifesto. “Visual Design First:” vs. Jakob Neilson recent blog complaining that agile was a threat to usability. Obie’s Orject mgmt: concepts and requirements, initial design, Phase one implementation (2-3 weeks), user acceptance, interation, release.

Stoires are Units of work, “storycarding” (SCRUM) estimate level of effort in points system, 1 -4 points (max a day or two), 15- 25 points per week for a team of 2-4 developers, summarize stories,

Master Services Agreement: general contract: billings, liabilities, copyright, trademarks ownership – this has to do with what?

Pivotal Tracker: free. tracks backlog and current iteration.

Standup meetings. for smaller projects. “Pivotal” standup for larger groups: what did you do yesterday? What did you do today? What…

Ben Koski, NYT Riding the Rails case study… bkoski@nytimes.com
Election feeds. AP supplied 153 text files, colon-separated, clomposite-key difficult to parse, used LOAD DATA INFILE, INSERT – REPLACE, survived onslaught by page aching, activeController page integration to generate all possible pages, they “baked it out” and lobbed files via ftp to the actual NYT web servers.

End game analysis: strengths: rapid start, tweak-friendly, activeRecord SQL customizations, web code works on command line, self-contained deploys. Weaknesses: rails vs. nytimes,com infrastructure (SUN), Solution: host on EC2! (eight instances!) , deployments, admin interfaces (vs. Django!),

Thomas Enebo, Sun Microsystems
You don’t have to be a Java programmer to use JRuby: It’s just Ruby! (maybe a tm!). Very, very compatible with 1.8.6, using Rubinius, continueing integration. Fixed 1500+ bugs last year. JRuby 1.1.5 released two weeks ago. improved caching, better performance. Downsides: native-threaded, arguably not a bug but a feature. No native ‘C’ extensions, started with porting popular libraries ported to native Java. No continuations (does anyone use them?) Foreign Function Inteface (FFI) portable across implementations, unlike extensions, most extensions just wrap a library. Started in Rubinius, then joint API discussions, supported in 1.1.4. Example. JRuby 1.8 bigger libraries done. M17N – multinationalizations. Why Java???!!!?!?! Tuned over a decade, generational, super-optimization, native on every platform. native threads, tools, libraries. java is Everwhere, Less political resistance (“JRuby is just another Jar file”), wider database suspport, Java-style deployment, bundle into WAR file, or Glassfish Gem – entire app server in a 4 Mb gem, Ruby-style deployment to GF Application server: gem install glassfish, glassfish . {Lame text” for an example: thread-safe JRuby on Glassfish v2

Mongrel, Matt Pelletier Partner/CTO EastMedia, web-mobile development shop, NYC, funded Mongrel dev for OpenID. Wrote Mongrel book. Zed Shaw, SCGI railsrunner, limited support, webrick slow. Translation (cgi) slow. Full HTTP server, play well with others. Design Goals: Security: Most security holes are due to human oversight, kludgy hand-written parses, gaping holes left in conditionals, HTTP spec does not limit sizes. Resources: site, mailing list, book. Using Mongrel: gem install. Use monit to monitor processes, restart/start new mongresls. How many? Serve static content from web server not mongrel.

Coby Randquist, The many facets of Ruby at YellowPages.com, now “AT&T Interactive”
Partner in Confreaks.com, founding member of LA Rubyl
Lots of small teams. 3-5 people plus functional manager for “socialization” can be a challenge to get things through the pipleline. Teams: HTML/CSS, development, sys admin, sys architecture, UI – user interaction,

Architecture 8415 LOC, 20 servers per data senter, 16 mongresl per server. almost no active record, All static content via CDN. Service tier: ~10kLOC, 8 servers, 30 mongresl/server, memcached running on each server, ruby wrapper to their FAST search engine, Oracle client for communication with Oracle clusters — user registration and personalization. Future changes: from rails to Merb. New code they are open sourcing:

“waves” – resource-oriented open source framework,
funtors – patterned-based dispatch for Ruby,
kablame – easily summarize who has done how much work on your code base,
crufty – find unused code,
hoshi – a library for creating real first-class htmlxml views, a DSL for creating HTML rather than Yet Another Template language www.debu.gs , live-console: a truby gem for providing irb over channels other than stdio
Waves uses bacon as its testing framework
They (R&D) are working on a ton of stuff: bacon for testing, rack handler for jetty, developing branded iPhone apps:
Speak 4 It – directory
Need 2 Pee – geo-location when you gotta go. No, really.
For sale at the iPhone App store. Hope you can pay in a hurry.

Lunch – Consulting table

Nick Plante, Demystifying Ruby Plugins, http://blog.zerosum.org/2008/11/18/demystifying-rails-plugin-development
Bravo to Nick for posting his slides on his website just before presenting! Nick squeezed a lot of information into the very small half-hour he was given: why write a plugin, what’s involved, how to do it, a case study, tools to use to do it, how to publish it, how to package a plugin as a gem (I didn’t know you could do that!) and where to find the tools to do it! Whew!

Ezra Zygmuntowicz, Four years of Ruby Development
Ezra runs the venerable and respected EngineYard shop and talked about the ten configurations of Rails-serving servers he’s wrestled with over the past four years with the pros and cons of each one. The recommendation du jour, with the caveat that the race is still on, is Mongrel for ruby dynamic content, nGinX for static content, but YMMV. The Ezra talked about using an AMQP service using RabbitMQ to create Nanites, a self-organizing set of Ruby applets. Rack is running over Nanite. Ezra announced “EYAAS” – Engine Yard As A Service, “Clouds are too low level for average humans” – use a dashboard to describe your application, what engines, plugins, gems and underlying OS services it needs. The EYAAS stores a JSON config file that can be used to fill in their set of recipes they use to generate S3 and AWS resources. Now, you no longer log in and make one-time changes to a server that get lost if the server is lost, but rather re-configure the recipe to upgrade components, etc. Very, very cool way to automate deployment.

Matt Jankowski , thoughtbot, Nature Network “Agile in the Enterprise”
Boston-based, 10 devs, coupla business people, distributed: NYC, Philly, etc.
Nature Network, publishers of the famous “Nature” journal
Nature Network, social networking for scientists, somewhat more formal than Facebook
Team: 28 people who worked for at least a month over two years
What is Enterprise? Dictionary Definition. Also, a bunch of meetings, weird spec documents, continuous re-organizations. Bureaucracy and internal politics, people who “just” want a job. Compared the impedence mismatch between the enterprise society and the RAD, cool, XP, scrumming agile Rubyists. Funny. Images hysterical.

Shane Harvie, Refactoring Domains in Ruby and Rails
Inheritance v. Delegation; Is Inheritance an “Is-a” relation
Ruby doesn’t allow you to “unmix” an included module, so if you started with delegration by mixing in a module, you’re stuck if then try to subclass the original object and don’t want the mixed in behavior.
Slide fonts are too small. Bummer. On the bright side, it lets me focus on what the speaker is saying and not get lost in the weeds o fthe code…

Powered by WordPress. Designed by Woo Themes

This work by Ted Roche is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 United States.