home ¦ Archives ¦ Atom ¦ RSS

O’Reilly’s Graph Databases

O’Reilly Media has a pre-release version of a book on graph database technology:

Graph Databases, published by O’Reilly Media, discusses the problems that are well aligned with graph databases, with examples drawn from practical, real-world use cases. This book also looks at the ecosystem of complementary technologies, highlighting what differentiates graph databases from other database technologies, both relational and NOSQL.

Graph Databases is written by Ian Robinson, Jim Webber, and Emil Eifrém, graph experts and enthusiasts at Neo Technology, creators of Neo4j, the world’s leading graph database.

I’ll probably eventually pick up a copy, but I’m waiting for it to bake a little bit. Also wondering if it’s mainly going to be a promotional for Neo4j.


Sensoring The News

An interesting trend of news orgs exploiting low cost sensors, but I really like the play on words:

When I went to the 2013 SXSW Interactive Festival to host a conversation with NPR’s Javaun Moradi about sensors, society and the media, I thought we would be talking about the future of data journalism. By the time I left the event, I’d learned that sensor journalism had long since arrived and been applied. Today, inexpensive, easy-to-use open source hardware is making it easier for media outlets to create data themselves.


GitX-dev

My git-Fu is getting better, but I’m using it enough to start thinking about using a graphical client:

GitX-dev is a fork (variant) of GitX, a long-defunct GUI for the git version-control system. It has been maintained and enhanced with productivity and friendliness oriented changes, with effort focused on making a first-class, maintainable tool for today’s active developers.

Per usual anything that helps me deal with merges more efficiently and professionally gets my +1.


Diggin’ On Kafka

Putting Apache Kafka through it’s paces at the office and I’m starting to like what I see after some initial confusion.

Why we built this

Kafka is a messaging system that was originally developed at LinkedIn to serve as the foundation for LinkedIn’s activity stream and operational data processing pipeline. It is now used at a variety of different companies for various data pipeline and messaging uses.

Activity stream data is a normal part of any website for reporting on usage of the site. Activity data is things like page views, information about what content was shown, searches, etc. This kind of thing is usually handled by logging the activity out to some kind of file and then periodically aggregating these files for analysis. Operational data is data about the performance of servers (CPU, IO usage, request times, service logs, etc) and a variety of different approaches to aggregating operational data are used.

In recent years, activity and operational data has become a critical part of the production features of websites, and a slightly more sophisticated set of infrastructure is needed.

I like their particular set of design choices. The client consumer side takes a little getting used to if you’re a lazy pub/sub guy like me. Kafka makes the client do a little bit more work and manage its own topic state. The upside is good to great performance, horizontal scaling, and a client can implement the message delivery semantics (at most once, at least once, exactly once) the client needs, without spoiling it for everyone else.

Great to see logical message offsets in the upcoming 0.8.x releases to make life a little easier.


The Glove and The Wall

Wizards Ball Logo Gary “The Glove” Payton was recently elected into the Naismith Basketball Hall of Fame. I saw a clip right after the announcement and Payton said a couple of interesting things. First, he said he thought of the current crop of players, John Wall had the most potential to equal The Glove defensively. Yow!

Second, Payton said he’d actually been dong some work with Wall. Never quite know what that really means, but it’s a good sign. And I think it’s starting to show in Wall’s game.


The 1TB SSD

ArsTechnica with the overview, and AnandTech with the details on the latest increment on consumer grade price and performance for SSDs. 960 Gb useable is just a bit short of 1 Tb, but give it year. Then we’ll be well over 1 Tb for 30% less cost.

Just in time for my next laptop purchase ;-)

And UltraRAM (PDF warning) is just off the horizon.


Python and vSphere

Link parkin’: Patrick Dunnigan kicks the tires on a number of Python modules that encapsulate the VMWare vSphere API.

I recently had the need to manage VMware vSphere from Python code so I went about looking for examples and open source libraries. The vCenter management server has a SOAP web service that exposes most (if not all) of the administrative capabilities that you can perform on vSphere. At first thought, this seemed like a simple endeavor. However once I got into it I found it not as simple as interacting with a RESTful web service.

Next I went searching for Python client libraries for the vSphere SOAP web service.

Here is a summary of what I found:

Thanks Patrick, ’cuz I’m about to have a close encounter with VMWare’s vSphere. Not looking forward to a reintroduction to SOAP though. Hope these libraries really hide the hurt.


Scalzi on Higher Learning

I swear I was just about to compose a reader request to Jon Scalzi regarding his thoughts on being from an “elite of the elite” university and advice he’d give to his daughter in these days of MOOCs etc. From my thoughts to Scalzi’s keyboard, although I would have been more entertaining than Steve, throwing in lots of Ivy class bonhomie and all that and dropping in a “where fun goes to die” or two:

Presuming my kid has the chops to get in where she wants to go — which I find a reasonable presumption, all things concerned — what I am likely to tell her is this: I’m willing to pay for an elite private institution (think generally but not exclusively the top 25 colleges and the top 25 universities in the US) because their reputations/networks are worth the additional expense in long run. But outside of those schools, why would I pay $40,000+ for a private school when I can pay $10,000 for Ohio State or Ohio University, or only slightly more for Miami University? The value add — the reputation/network — isn’t there in almost all those cases.

I strongly agree with this assessment and keep in mind I’ve been at just about every stage of the pipe: undergrad, grad, faculty, washed up faculty. Haven’t been an educational administrator at any level but I’m not sure I’d wish that on anyone ;-) (Ha! Ha! Only serious)

And we both believe that college can still have a lot of value for a lot of people in this age. I bring this up because there seems to be this virulent dismissive current in the tech and business communities that “higher learning is completely busted, worthless, and mega-disruptive entrepreneurialism is gonna save the day”. I get that there’s a lot of overpriced product out there, but if I see one more link about how a PhD is meaningless, I’m gonna barf. Even if it’s in Critical Literature, just because you can’t reap some huge financial windfall doesn’t mean the result has no value. If there’s a true research oriented dissertation, than at least the ball of humanity’s knowledge has been pushed forward the tiniest bit.


A Week With Feedly

I’m starting to keep an eye out for good GReader diaspora stories. Evan Dashevsky spent a week with Feedly:

To that end, I decided to try my luck with Feedly, a service that has quickly grown to prominence as the go-to replacement for Reader. After a week of test-driving the service in its Web and app versions, I have found it to be a serviceable—and in many ways, superior—replacement for my soon-to-expire Reader.

The one thing I’m looking for is the cross-client synching capabilities.


Emacs Redux Redux

Okay, Emacs Redux has been better than I expected, with lots of little tips that can greatly improve one’s Emacs utility, such as:

I’m fond of seeing somewhere the full path to the file I’m currently editing(as opposed to just the file name displayed in modeline). Emacs’s frame title seems like a good place to display such information, since by default it doesn’t show anything interesting. Here’s how we can achieve this:

and:

Emacs does not have a command backward-kill-line (which would kill the text from the point to the beginning of the line), but it doesn’t really need one anyways. Why so? Simple enough - invoking kill-line with a prefix argument 0 does exactly the same thing!

At least one good nugget per day.


I

The situation.

Disk A. 95% full with Postgres data.

Disk B. 75% full with archival data.

What to do about Disk A?

Move data from disk B to another drive, getting it down to 20% full. Use Postgres’ CREATE TABLESPACE data definition statement to make a new one on Disk B. Run a series of ALTER TABLEs and ALTER INDEXs to safely move half of the Postgres data to Drive B.

Now both drives are at about 60% full and I’m a happy camper with plenty of disk headroom going forward. Bonus, both A and B are SSDs, so with an hour or so of effort, all my data stays fast and my queries might even get a little boost from disk parallelism to boot.


JZ Spoiled By SSD

JZ would be one Jeremy Zawodny, engineer at Craigslist.

But this particular task involves slurping ALL the data out of that cluster and onto a cluster of sharded Sphinx servers so I can re-index the roughly 3 billion documents. That’s all well and good, but since our MongoDB cluster isn’t terribly performance sensitive, it is built on old-fashioned (am I allowed to use that phrase?) spinning disks. And you know what that means, right?

Yeah, seek time matters. A lot.

If this was hitting our production MySQL clusters, I wouldn’t care nearly as much. Those all use one flavor or another of flash stoarge. In fact, we’ve been using SSDs long enough and in enough places that I’m spoiled at this point. I sort of cringe every time I have to deal with disk seeks. That’s so five years ago.

Zawodny does this at real scale for real money So if Jeremy’s spoiled by SSD performance, the rest of us can start just follow the trend.


Artisanal War

In tweets from @GreatDismal

First the digital came for the fighter pilot, then for the sniper. #artisanalwarfighting

Slouching towards Armageddon, you might say.


A MarsEdit Update

MarsEdit 3 Logo Daniel Jalkut has released a new version of MarsEdit, the tool I’m using at this very moment to post with:

MarsEdit 3.5.9 is now available. This is a free update for licensed MarsEdit customers. The update will be submitted to the Mac App Store today and will be available there when Apple approves the update.

This is quite a significant update, in spite of it being entirely composed of “bug fixes.” I’m still working a major update to MarsEdit that will accommodate the Mac App Store’s sandboxing requirements. Until that is ready, I’ll keep fixing bugs in the app but will not be able to add significant features.

I’m grateful to Red Sweater software for picking up and maintaining MarsEdit. It’s been in my toolbox for years and is coming back into prominence now that I’m using Ye Olde MacBook more. If you’ve noticed more original text here, it’s partially because I’m back to using a keyboard and MarsEdit.


Avoiding Facebook: Part N

Where N is quite large. From Sophos’ NakedSecurity blog

Even if you have rejected particular apps from connecting from your Facebook profile, you have no control over what apps your friends and family have chosen to connect to their profiles.

Your friends and family may not be being as cautious as you are about Facebook apps - and you may not realise that when other Facebook users choose to install apps they can then share the information they can see about you with those apps.

Facebook argues that allowing other people to share your info with third-party apps makes the “experience better and more social”. Your opinion may vary from theirs, however.

Yes, my opinion definitely does. I’d normally just look the other way, but Facebook has become increasingly disturbing. He says with a surly frown, looking askance at Quora and other Facebook login miscreants.


Petrel

At work, I’m being overtaken by the Storm. But I’ll be damned if I get sucked back into Java programming without some kicking and screaming. I’ll definitely be giving Petrel a whirl

Tools for writing, submitting, debugging, and monitoring Storm topologies in pure Python.

Petrel offers some important improvements over the storm.py module provided with Storm:

  • Topologies are implemented in 100% Python
  • Petrel’s packaging support automatically sets up a Python virtual environment for your topology and makes it easy to install additional Python packages.
  • petrel.mock” allows testing of single components or single chains of related components.
  • Petrel automatically sets up logging for every spout or bolt and logs a stack trace on unhandled errors.

And just in case you’re looking for an alternative to Storm, don’t forget Yahoo!’s, now Apache’s, S4. While not as fashionable, S4 is definitely comparable.


Diggin’ On “The Human Division”

The Human Division Cover Considering how much I enjoyed Old Man’s War, you’d figure I’d be a sucker for John Scalzi’s The Human Division.

What does “not strictly a novel” mean here? Well, The Human Division is probably best described as an “episodic narrative” — it’s a collection of individual episodes that each tell a complete story, arranged chronologically, so that if you read them all in sequence you get a larger narrative arc. The closest analogy would be a season of a television show, and indeed The Human Division is arranged into thirteen “episodes,” including a double-length “pilot episode,” entitled “The ‘B’ Team.”

However, I’ve only just now started reading/buying the “episodes”. The question is, can I catch up with the release schedule? Through two and half chapters, so far, so good, although I find it a touch heavy on the expository dialogue, enough to be uncomfortably noticeable. Also, the dialogue in Walk The Plank, was a little too clean for me. If you’re traumatized from a crash landing, injured from an animal bite, and infected with an explosive microbe, I don’t expect you to string together sentences that well.

But they’re well paced with Scalzi’s good old sense of humor, and intriguing from a sci-fi perspective. So I will forge on.


Vega

Vega is a new browser-side visualization toolkit from Jeff Heer. Why?

Vega provides a higher-level visualization specification language on top of D3. By design, D3 will maintain an “expressivity advantage” and in many cases will be better suited for novel, highly interactive graphics. On the other hand, we hope that Vega will be convenient for a wide range of common yet customizable visualizations. Vega’s design builds on concepts we developed in both Protovis and D3, and is informed by multiple years of research at Stanford and our experiences building data-driven applications at Trifacta.

Still waiting for prefuse to rise from the grave and reclaim its rightful place in the visualization firmament.


Saddle Up

Pandas contributor Adam Klein has released a kindred in spirit toolkit, Saddle, for the Scala language:

Saddle is a high-performance data manipulation library for Scala.

Saddle provides array-backed, indexed, one- and two-dimensional data structures; vectorized numerical calculations; automatic data alignment; and robustness to missing values.

Scala, Pandas, Spark. Are you thinking what I’m thinking?


The Tipping Point?

I’ve been holding out on new traditional home computing gear (e.g. laptop or desktop) since I really haven’t had a good need, despite my lust for the finer things. I’ve even gone so far as to jack-up the hard drives in Ye Olde MacBook to good effect. Such good effect that it could easily be my primary personal laptop for at least another year and a half. I mean really, if MS Office 2011 runs decently on this old kit, what more can you ask for?

Except for that pesky desire to run virtual machines. I picked up a copy of Parallels Desktop in a recent MacUpdate promotion. Then I wanted to start kicking around some Hadoop virtual machines from vendors like Cloudera and Hortonworks. Guess what? You really need a free and clear 4GB of RAM to get started with these vms. My poor old machine only has 4GB total.

So Ye Olde MacBook is fine for the standard Ubuntu or CentOS distro, but the heavy duty data sciency type stuff is probably beyond it’s meager capabilities.

Something to chew on.


Towards Production

Another insightful gem from Rafe Colburn on taking a quick “hack” and getting the result into a production system:

Why write this up? It’s to point out that for most projects, getting something to work is just a small, small part of building a production service. Exporting a CSV file from a database query and uploading it to an FTP server takes just a few minutes. Converting that into a service that runs within the standard infrastructure, and handles failure conditions smoothly takes hours.

Echoes of the challenge of building capabilities.

Also, I’ve learned through hard won experience, don’t trust the environment cron provides your script at all. Make everything as explicit as possible. Even then it’s a difficult debugging process. Good luck!


Hedlund on Unlearning

Good personal development bit by Marc Hedlund on leaving behind career tools that have been overtaken by events:

Advancement is not a collection of skills. Advancement is an awesome ability to adapt to a new situation. Experience is a toolbox to help you do that – but any new job, any new role, any environmental change should make you question whether the tool you know and rely on is still the right tool for the job. Think of your skills as disposable, and actively work on unlearning the ones that were right once but aren’t right now.

This also seems like a good feature, maybe even interview question, to seek in candidates to join your team. “Talk about a skill you really relied on in one position but had to give up or adapt as you moved into a new position. Why?”


python-mode.el

Sometimes going back to the basics is the best path. I just grabbed the python-mode.el 6.1.1 release from the python-mode.el launchpad site, which is maintained by some folks who use Python on a frequent basis. Fired up the mode and the current implementation seems much more consistent than some of the current new kids on the block, including Emacs 24.3’s built-in Python mode.

Even better 6.1.1 has support for virtualenvs.


emacsredux

Emacs Logo Link parkin’: emacsredux, tagline: “Return to the Essence of Text Editing”. Subscribed.

Also of note, emacsrocks.


Titan 0.3

Keeping an eye on Titan, the Hadoop friendly graph data repository, they’ve version bumped to 0.3, with some interesting new features:

Titan 0.3.0 has been released and is ready for download. This release provides a complete performance-driven redesign of many core components. Furthermore, the primary outward facing feature is advanced indexing. The new indexing features are itemized below:

  • Geo: Search for elements using shape primitives within a 2D plane.
  • Full-text: Search elements for matching string and text properties.
  • Numeric range: Search for elements with numeric property values using intervals.
  • Edge: Edges can be indexed as well as vertices.

Related discussion over at Hacker News.

Via @gnat


ipython-sql

Neat extension hack of iPython by Catherine Devlin:

RDBMS access via IPython

Introduces a %sql (or %%sql) magic.

Connect to a database, using SQLAlchemy connect strings, then issue SQL commands within IPython or IPython Notebook.

Granted there’s a lot of magic going on, but this speaks to another great feature of iPython, the ability to build up and embed domain specific languages within a nice interactive environment. Knock on effects easily follow, such as rapidly stuffing SQL query results into pandas for data analytics.


Flask Mega-Tutorial

Link parkin’: The Flask Mega-Tutorial

This is the first article in a series where I will be documenting my experience writing web applications in Python using the Flask microframework.

Here is an index of all the articles in the series that have been published to date:

And there’s been 16 to date, which is a heck of a lot better than many of the grass roots tutorial series I’ve seen over the years. Each article looks quite substantive as well.


Python Data Visualization

Interesting post-PyCon take on the state of matplotlib and Python and visualization from one Jake Vanderplas, a core matplotlib developer:

And where does that leave matplotlib? I would not, by any means, discount it just yet. Still, as John Hunter noted last summer, it faces some significant challenges, particularly in the area of client-rendered, dynamic visualizations. Any core matplotlib developers reading this should go back and re-watch John’s SciPy keynote: it was his last public outline of his vision for the project he started and led over the course of a decade. An IPython notebook-compatible client-side matplotlib viewer along the lines of the ideas John mentioned at the end of his talk would be the killer app that would, in all likelihood, allow matlotlib to maintain its position as the de facto standard visualization package for the Scientific Python community.

And all that being said, regardless of what the future brings, you can be assured that in the meantime I and many others will still be doing all our daily work and research using matplotlib. Despite its weaknesses and the challenges it faces, matplotlib is a powerful tool, and I don’t anticipate it withering away any time soon.

Of special interest to me was the callout to NodeBox OpenGL, harkening back to my old generative art in Python noodling days. NodeBox 1 wasn’t a bad analog to processing, but it looks like NodeBox OpenGL might be a major advance beyond pyprocessing, which seems to have stalled out as a project.

Still the stickler was the bit level manipulations that processing did well and I haven’t seen done quite right in any of the Python based parallels.


Hadoop and GIS

Very convenient. I’ve been on the lookout for an approach to integrating geospatial information processing into Hadoop. Looks like ESRI is open sourcing some GIS Tools for Hadoop:

Data that includes location, and that is enhanced with geographic information in a structured form, is often referred to as Spatial Data. Doing Analysis on Spatial data requires an understanding of geometry and operations that can be preformed on it. Enabling Hadoop to include spatial data and spatial analysis is the goal of this Esri Open Source effort.

GIS Tools for Hadoop is an open source toolkit intended for Big Spatial Data Analytics. The toolkit provides different libraries:

The libraries:

Via NoSQL Weekly


Lily

Link parkin’: Lily looks like an interesting mashup of various NoSQL projects:

Lily is a data management platform combining planet-sized data storage, indexing and search with on-line, real-time usage tracking, audience analytics and content recommendations. It’s a one-stop-platform for any organization confronted with Big Data challenges that seeks rapid implementation, rock-solid performance at scale, and efficiency at management.

Lily unifies Apache HBase, Hadoop and Solr into a comprehensively integrated, interactive data platform with easy-to-use access APIs, a high-level data model and schema language, flexible, real-time indexing and the expressive search power of Apache Solr. Best of all, Lily is open source - allowing anyone to explore and learn what Lily can do.


The Cloudera Blog

Speaking of Cloudera, I’m a dumbass for not subscribing to the Cloudera blog. Their posts tend to be quite meaty and well written. Over and above the Cloudera ML announcement I’ve enjoyed:

Problem fixed!

Bonus: TIL about the DEBS 2013 Challenge. Mmmmmmm, data.


Cloudera ML

Cloudera ML, at least making Apache Mahout a bit more usable

Today, I’m pleased to introduce Cloudera ML, an Apache licensed collection of Java libraries and command line tools to aid data scientists in performing common data preparation and model evaluation tasks. Cloudera ML is intended to be an educational resource and reference implementation for new data scientists that want to understand the most effective techniques for building robust and scalable machine learning models on top of Hadoop.

Good on ’ya Mr. Wills.


Robert Wilensky

Sad news from Soda Hall:

Robert Wilensky, professor emeritus of computer science at the University of California, Berkeley, and one of the campus’s first faculty members in artificial intelligence when the field was just taking off, has died at age 61.

During Wilensky’s tenure at UC Berkeley, he served as chair of the Computer Science Division, director of the Berkeley Cognitive Science Program, director of the Berkeley Artificial Intelligence Research Project, and board member of the International Computer Science Institute.

Even though I wasn’t an AI guy, Prof. Wilensky was chair for a significant part of my graduate career. While I didn’t have a plethora of interactions with him, I always found them enjoyable. He was great for the Computer Science Division, presiding over the department during The Great Migration (TM) from Evans Hall, or shortly thereafter (need to confirm). Whatever. I just remember him being one of the earliest occupants of that office on the first floor, and suavely striding out, being one of the few faculty to pull off a suit on a daily basis. Not necessarily business, but definitely a notch up from elbow patches.

Godspeed, kind sir.


Wiz Griz

I’ve always said truly great players often seem to have explosive nights, early in their careers, that really demonstrate their potential. Think Jordan lighting up the Celtics for 63 and juking Larry Bird in a first round playoff loss in Jordan’s rookie season. Not 100% true, took a while for Steve Nash to get going, but I bet there’s a high correlation.

John Wall’s not quite there yet, but 47 points, with 8 assists, in carrying a decimated Wizards to victory over a good Grizzlies team is a solid sign. And that so quickly after torching the Lakers at Staples.

There’s hope here in DC.


The PyData Ecosystem

Ben Lorica posts some observations from the recent PyData conference:

It’s getting easier to use the Python data stack:

There are tools that facilitate the dissemination and sharing of code and programming environments. IPython2 notebooks allow Python code and markup in the same document. Notebooks are used to record and share complex workflows and are used heavily for (conference) tutorials. As the data stack grows, one of the major pain points is getting all the packages to work properly together (version compatibility is a common issue). In particular setting up environments were all the pieces work together can be a pain. There are now a few solutions that address this issue: Anaconda and cloud-based Wakari from Continuum Analytics, and cloud computing platform PiCloud.

One of the things I find most exciting is the quality incorporation of Python into the Hadoop ecosystem and varied spinoffs. While Java will always be on the top of the depth chart, since it’s the implementation language and Java is so enterprisey, Python is a reasonably first class citizen. I’ve gone a decent ways building Hadoop processing pipelines with essentially no Java programming.


Markdown Fieldguide

Like me are you looking to become a more sophisticated Markdown user? You might want to checkout MacSparky’s Markdown Fieldguide. Only 10 bucks!

Markdown started as a clever way to write for the web but has become so much more. This book demystifies Markdown, making it easy for anybody to learn. This book includes 130 pages and 27 screencasts totaling more than one and a half hours of video. There is also an additional hour of audio interviews. This book will take you from zero knowledge of Markdown to being a Markdown pro and change the way you write for the better.

I’ll be checking out the PDF version since I’m a Kindle Store sucke… err, fan.

Update: Decided to go with the iBookstore version just for a little variety.

Via Daring Fireball


Emacs 24.3 and Python

OEmbed Link rot on URL: https://twitter.com/wesmckinn/status/314928646068531201

I’m with you Wes. Python mode in Emacs 24.3 doesn’t feel very polished. May have to fall back to your solution as well.

OEmbed Link rot on URL: https://twitter.com/wesmckinn/status/314932693752242177


Wiz Lakers

C’mon @DidTheWizWin! You can do better than that. The Wiz came from double digits down, at the Staples Center, against a fully loaded Lakers with Pau and Kobe. Plus the Wizards went without Bradley Beal, Emeka Okafor, and AJ Price. Only nine guys got in the box score.

And John Wall showed something with 24 points and 16 assists in 44 minutes under the bright lights.

Weird box score observation. The Wiz totaled only 236 minutes, but by my math every regulation game should have 240. Guessing due to round down of fractional minutes.


Spotify’s Luigi

Been looking around for a flexibly engineered batch scheduling tool that’s Hadoop friendly. Spotify open sourced its Luigi framework which looks like it might fit the bill:

Luigi is a Python package that helps you build complex pipelines of batch jobs. It handles dependency resolution, workflow management, visualization, handling failures, command line integration, and much more.

The purpose of Luigi is to address all the plumbing typically associated with long-running batch processes. You want to chain many tasks, automate them, and failures will happen. These tasks can be anything, but typically long running things like Hadoop jobs, dumping data to/from databases, running machine learning algorithms, or anything else.

There’s also an attendant post on other uses of Python at Spotify.


Iterate Like a Superhero

I enjoyed reading Ned Batchelder’s presentation on idiomatic iteration in Python, even though I knew of everything he presented. Made me feel like I actually knew something about Python! It’s good baseline knowledge any Pythonista should comprehend and internalize.

He also ingeniously made it available in multiple formats.

This is a presentation I gave at PyCon 2013. You can read the slides and text on this page, or open the actual presentation in your browser (use right and left arrows to advance the slides), or watch the video:

© 2008-2024 C. Ross Jam. Built using Pelican. Theme based upon Giulio Fidente’s original svbhack, and slightly modified by crossjam.