tag:blogger.com,1999:blog-48445923519720480322024-03-17T01:49:54.267-06:00OverthinkingEric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.comBlogger14125tag:blogger.com,1999:blog-4844592351972048032.post-78573309302974513472017-04-28T11:39:00.000-06:002017-04-28T11:39:26.915-06:00My Python Rumspringa, or There and Back Again<span style="font-family: Arial, Helvetica, sans-serif;">tl;dr In 2014 I started an unexpected journey into a foreign land fraught with peril. Now I'm back and have a thing or two to share about both Go and Python.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> The Journey</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span><span style="font-family: "arial" , "helvetica" , sans-serif;">Building A Home: My Python History</span></span><br />
<div style="font-family: "Times New Roman";">
<span style="font-family: Arial, Helvetica, sans-serif;"> A New Adventure: Go</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;">Coming Home</span></span></div>
<div>
<div style="font-family: "Times New Roman";">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"> The Spoils (What I Brought Back)</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;">The Good</span></span></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;">
</span>
</span><br />
<div style="font-family: "Times New Roman";">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"> The Bad</span></span></div>
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
<div style="font-family: "Times New Roman";">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;">The Ugly</span></span></div>
<span style="font-family: Arial, Helvetica, sans-serif;">
</span></div>
<div>
<div style="font-family: "Times New Roman";">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"> Summary</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;">What Python Can Learn from Go</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> Appendix: Raw Go Observations</span></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;">
</span>
</span><br />
<div style="font-family: "Times New Roman";">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"></span></span></span></div>
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
<a name='more'></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">(Note: I started writing this post nearly a year ago, not long after I left Juju.)</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
</span><br />
<h2>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-large;">The Journey</span></h2>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
</span><br />
<h3>
<span style="font-family: Arial, Helvetica, sans-serif;">Building A Home: My Python History</span></h3>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">In 2006 I started my first programming job, working on a system that migrated accounts between web hosting platforms. It was written in Python (for which I have Van Lindberg to thank). Over time, my curious nature led me to delve deep into the language. Within a couple years I started following the Python mailing lists and bug tracker. In 2008 I went to my first PyCon, but only attended the talks.</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Everything accelerated in 2011. I was more confident about participating and had even contributed both ideas and feedback. At PyCon that year I somehow managed to get a seat at the language summit and most nights hung out with the core devs who I knew from the lists but had never met in person. In a few short days my Python world was shifting. Most importantly, I stayed for the sprints.</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">On the first day of the sprints I actively participated in the in-person discussions with Guido et al. that resolved the fate of namespace packages. There were two competing PEPs. In the months prior I had been involved in email threads about those PEPs on the import-sig list. In the discussion at the sprints I was able to have a concrete impact on the decisions being made. It was amazing! That marked my serious commitment to the project and the language.</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></span>
</span><br />
<h3>
<span style="font-family: Arial, Helvetica, sans-serif;">A New Adventure: Go</span></h3>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">In 2014, right after PyCon, I started looking for a new job. Until then I had been lucky enough to have worked in Python full-time. However, deep down I knew that I needed to expose myself to new things and different perspectives. In order to keep growing I needed to broaden my view. In the midst of the decision on which opportunity to pursue, I chose a job at Canonical working on a project called Juju. Among other new things (to me), I'd be working exclusively in the Go language.</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Typically it is best to know what you are getting yourself into. Consequently I took some time while preparing for interviews to get a feel for Go. Within a few hours I had a pretty good sense of the language. To be honest, in 2+ years my initial impression has stayed relatively true: Go is a fine language with a few things that bug me. I knew it would be good for me and I could tell it wasn't what I'd want in the long term. I even promised myself that I'd stay with Juju for at least two years, just in case I started having doubts before I'd truly benefited from the experience.</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">For two years I enjoyed my work. Juju is a great project with a unique and effective approach to the hard problem of managing many interoperating services in the cloud. The folks I worked with were solid. The work was both challenging and rewarding. Above all, I got what I was after. After two years my perspective on writing software had broadened significantly, particularly thanks to Go. At the same time I was longing for my metaphorical home.</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></span>
</span><br />
<h3>
<span style="font-family: Arial, Helvetica, sans-serif;">Coming Home</span></h3>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">I came to realize something at that point; I was in a figurative long-distance relationship with Python. At first I would visit often. I'd write. I'd call. However, without even realizing it at first, I'd begun to be less involved. In fact, after the first year of working in Go I finally noticed that I was contributing less to CPython. I was on the mailing lists less. I wasn't on the issue tracker as much. I'd started to build up a backlog of things I needed to fix. As hard as it was for me to believe, I was becoming less excited about working on Python!</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">As with nearly all long-distance relationships, I had to make a decision: to move back or to end the relationship. It wasn't hard for me. In fact, I has already been looking into an opportunity with some Python friends (which ultimately didn't pan out). My two years was almost up. An unexpected opportunity appeared (which ultimately *did* pan out). PyCon came around in 2016 and I started putting out feelers.</span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">In the end I chose to get back to Python. I'm now working on the Landscape team at Canonical. <strike>I'm still in that awkward phase where Python and I are adjusting to being around one another again, but I can feel it all returning.</strike> Was it worth it? Absolutely! The experience taught me a lot and I'm glad I did it.</span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></span></span>
</span><br />
<h2>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-large;">The Spoils (What I Brought Back)</span></h2>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Here are some observations rooted in my experience working full-time in Go for two years. Keep in mind that my work on Juju specifically has heavily influenced my point of view here. Some observations are about Go, some about Python, and some about software in general. Note that I'm not going to talk much about things that aren't more than a different flavor (e.g. curly braces, defer). At the bottom of this post I've included an appendix that outlines my observations a bit more in depth but without elaboration.</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">I'll take some time in later blog posts to elaborate on some of the points. I'll also update this post if I think of any other points or with more detail.</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
</span><br />
<h3>
<span style="font-family: Arial, Helvetica, sans-serif;">The Good</span></h3>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">These are things that I appreciated about Go.</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Go's Concurrency Story</span></h4>
<div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">based in CSP</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">dedicated syntax (go, select, <- [channel send, receive])</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">built-in primitives (goroutines, channels)</span></li>
</ul>
</div>
<ul>
</ul>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Parts of Go's Type System</span></h4>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">interfaces (i.e. declarative duck typing)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">composition instead of inheritance</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">embedding</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">explicit collision resolution</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">reverse template pattern</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">structs</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">fixed set of fields</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">methods</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">slices</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">(sort of) first-class functions</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">function param structs (in lieu of keyword arguments)</span></li>
</ul>
<ul></ul>
<ul>
</ul>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">"Anonymous" Type Support</span></h4>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">in-line types and functions (i.e. literals)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">multi-line function literals</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">anonymous blocks (scoping)</span></li>
</ul>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Some of Go's Syntax</span></h4>
<div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">type-after-name variable declarations</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">switch, type switch</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">struct field tags</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">multiple return values (vs. C)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">"ok" returns from maps, etc.</span></li>
</ul>
<div>
</div>
</div>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Tooling</span></h4>
<div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">go * (esp. fmt)</span></li>
</ul>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<h3>
<span style="font-family: Arial, Helvetica, sans-serif;">The Bad</span></h3>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">These are things that I wished were different/better, but could live with. Mostly these actually either aren't that bad or aren't a big deal in practice. Some of these may improve in time.</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Parts of Go's Type System</span></h4>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">type incompatibility</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">converting []interface{} to []Spam</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">compatible signatures</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">the need for compatibility shims</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">pointers</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">builtin types vs. user-defined types</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">types are not first-class</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">packages are not first-class</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no generics (yet?)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no enums</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no "magic" methods</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">inference (weak for a "modern" language)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">nil, interface{}</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">nil vs. underlying nil</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">namespaces</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">exported vs. unexported (incl. internal packages)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">function comparison</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no keyword arguments</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no function argument (or struct field) defaults</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no anonymous tuples</span></li>
</ul>
<ul>
</ul>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Parts of Go's Memory Model</span></h4>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">nil</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">immutability</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">value ownership</span></li>
</ul>
<div>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Some of Go's Syntax</span></h4>
</div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">methods harder to visually associate with struct</span></li>
</ul>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Tooling</span></h4>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">go * (esp. fmt)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">dependency versioning</span></li>
</ul>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Standard Library</span></h4>
<div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">stdlib hard to customize</span></li>
</ul>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Philosophy</span></h4>
</div>
<div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">minimalist (reminds me a little of Lua)</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">few stdlib helpers in most areas</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">designed to address Google's problems, not necessarily everyone else's</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">trying hard to be a systems programming language (feels like the 70s)</span></li>
</ul>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<h3>
<span style="font-family: Arial, Helvetica, sans-serif;">The Ugly</span></h3>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">These are things that constantly either bothered me or significantly impacted my productivity.</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Multi-file Packages</span></h4>
</div>
<div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">makes it a pain to figure out which source file a package member is in</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">too easy to split up a struct's methods across multiple files</span></li>
</ul>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Error Returns (vs. Exceptions)</span></h4>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">a lot has been said about this already elsewhere on the internet -- I'm on the side of exceptions (the Python kind anyway)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">a step up from C, but that's about it</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">introduce a ton of superfluous boilerplate (if you're using them properly)</span></li>
</ul>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Boilerplate</span></h4>
</div>
<div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no generics</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">error returns</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">type/signature compatibility shims</span></li>
</ul>
<h4>
<span style="font-family: Arial, Helvetica, sans-serif;">Testing</span></h4>
</div>
<div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">full-stack</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">white-box testing</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">immature</span></li>
</ul>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<h2>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-large;">Summary</span></h2>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">My experience on Juju was a valuable one. I'm glad I did it. Go is a fine language, but not one I'd want to use full-time, long-term. At one point I built a spreadsheet comparing Python, Go, and Rust. Perhaps I'll write up a post about that comparison some day.</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
</span><br />
<h3>
<span style="font-family: Arial, Helvetica, sans-serif;">What Python Can Learn from Go</span></h3>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Everything above surely betrays my bias toward Python. That said, I think there are quite a few lessons Python can take from Go. That includes both how Python can improve and how Python gets many things right. Most notably, Go's concurrency story is a step up from Python's, which I'm working to improve. Here are a few other things I'd like to see in Python:</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">anonymous code blocks</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">multi-line anonymous functions</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">a switch statement</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">a clear, simple approach to declare simple classes</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">namedtuple and types.SimpleNamespace are a weaker alternative</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">class declaration syntax is already so overloaded in roles it plays</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">make class composition a more obvious option</span></li>
</ul>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-large;">Appendix: Raw Go Observations</span></span></h2>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">Type System</span></div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">statically-typed (multi-pass)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">compile-time resolution</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">types are not first-class (effectively compiler instructions)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">all data mutable</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">exported vs. unexported</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">user-defined types</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">functions</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">sort of first class</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">are pointer types</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">can only be compared with nil</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">structs</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">sometimes used to hold keyword args</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">default serialization</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">sometimes used as "data transfer object" or "value object"</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">equality unsupported in some cases (has function/map fields)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">copy vs. deepcopy</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">methods</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">defined separately in same package (usually same file) as struct</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">harder to distinguish when reading code</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">receiver type matches struct (incl. at run-time)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">receiver is passed to local scope as implicit call argument</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">may be called from type, but receiver is passed explicitly</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">value receivers are copies</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">pointer receivers are required for mutation</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">struct initializers</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">struct literals</span></li>
</ul>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">fields default to zero values</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">interfaces</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">nil vs. underlying nil value</span></li>
</ul>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">methods-only</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">supports polymorphism</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">statically-typed ducktyping</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">everything matches the zero interface ("interface{}")</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">use type assertion to get underlying value</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">aliasing</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">unlike embedding, an aliased type loses access to methods</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">(generics)</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">lack of generics leads to rampant duplication of code</span></li>
</ul>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">may happen eventually</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">(enums)</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">not part of the language</span></li>
</ul>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">rough equivalent through type alias (or embedding)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">easy to accidentally expose aliased/embedded type</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">supported value range not enforced by type system</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">explicit run-time checking required</span></li>
</ul>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">(namespaces)</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no simple way to declare a namespace</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">embedding (incl. -> composition)</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">structs may embed interfaces structs and interfaces</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">interfaces may embed only interfaces</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">refer to embedded type as attribute with that name</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">multiple embedding supported</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">manually resolve calling embedded methods when overridden</span></li>
</ul>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">builtin types</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">numeric (int, float)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">string/[]byte, rune</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">containers (map, slice, array, channel)</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">are pointer types</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">equality unsupported for maps</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">nil and empty not the same, though len() is</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no set type</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">slice vs. array</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">almost never use array</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">slices auto-resize up to max</span></li>
</ul>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">type-related builtin functions</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">slice-only</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">append()</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">may or may not return a new slice</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">copy()</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">channel-only</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">close()</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">map-only</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">delete()</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">builtin-container-only</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">len()</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">make()</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">cap()</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">new()</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">value vs. pointer</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">nil pointers</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">auto-dereferencing in function calls</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">type compatibility</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">matching struct values may be used for interface variables</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">types in signatures must match exactly for functions to match</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">...even if compatible</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">applies to function types and interfaces</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">this strict compatibility forces use of adapter types</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">methods may be used for vars of a matching function type/signature</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no implicit coercion (except for type alias args and interface vars)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">explicit coercion through "type conversion" (i.e. type casting)</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">inference</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">only in function bodies</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">only through RHS of :=</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">signature/struct type declaration</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">exact types for fields/params</span></li>
</ul>
</ul>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">Concurrency</span></div>
<div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">CSP-inspired model</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">goroutines</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">created by "go func()" syntax</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">not directly exposed as values in run-time</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">channels</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">select</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">simplifies concurrency but inherent challenges remain</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">deadlocks</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">leaks</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">still shared-memory (no "process"-isolation like CSP)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">locks and other tools in stdlib</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no direct thread management (concept is hidden away)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">multi-processing</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no process forking</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">exec.Command for starting a new process</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">panic() and recover()</span></li>
</ul>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">Memory Model</span></div>
</div>
<div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">nil</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">leads to segfaults</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">new vs. make</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">new() returns a pointer to a newly allocated value of any type</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">make() for builtin container types only</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">mutability (incl. default)</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">all data is mutable (no const, etc.)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">hide data access by not exporting it</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">auto garbage collection</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no constructors/finalizers</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">auto-promotion from stack to heap at compile-time</span></li>
</ul>
</div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">Syntax</span></div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">declarations: types, functions, vars, consts</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">may be in any scope, not just top-level</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">all but const may be in function signature</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">var declaration: type after name</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">easier to read/write than C-style (type before name)</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">switch</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">implicit break at end of each case</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">type switch</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">sugar for a switch with a bunch of type assertions</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">no semi-colons</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">multi-line statements (e.g. signatures)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">curly braces</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">struct field tags</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">multi-line function literals (i.e. lambdas)</span></li>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">may be in-lined</span></li>
</ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">in-lined struct/interface definitions</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">const only for simple literals (e.g. string, numeric)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">compiler instructions vs. run-time code</span></li>
</ul>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">Standard Library</span></div>
<div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">fairly well populated</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">often hard to customize</span></li>
</ul>
</div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">Testing</span><br />
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">still a mess</span></li>
</ul>
</div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">Other</span></div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">block scope</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">:( storing a pointer to the loop variable each iteration</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">defer</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">error returns/(exceptions)</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">optional "ok" return for maps, channels, coercion</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">encourages copy/paste-then-adjust</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">multi-file packages</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">internal packages</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">per-file init()</span></li>
</ul>
</div>
Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com0tag:blogger.com,1999:blog-4844592351972048032.post-38197046735868255842016-09-06T17:49:00.002-06:002018-08-17T13:35:26.662-06:00Solving Multi-Core Python<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">tl;dr I proposed a solution for Python's weak multi-core <i>story</i> (note I didn't say "support"), but didn't have time to follow through. I still have hope, both for the project as a whole and for several standalone parts.</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></span>
<span style="font-family: arial, helvetica, sans-serif;">[Update 8/2018] I picked this back up after a break and am aiming for Python 3.8. See <a href="https://github.com/ericsnowcurrently/multi-core-python/wiki" target="_blank">this project</a> and <a href="https://www.python.org/dev/peps/pep-0554/" target="_blank">PEP 554</a>. <fingers_crossed/></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Contents:</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><b> Backstory</b></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b> The Proposal</b></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b> The Outcome</b></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><b> The Details</b></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"></span></span><br />
<a name='more'></a><br />
<h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Backstory</span></h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;">For the longest time I've heard the argument that multi-processing is the Pythonic way to get multi-core. Threads are an anti-pattern, some say. They are a thing only because Microsoft made them a thing, some say. I've heard anecdotal evidence from people that actually do</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">parallel (not just concurrent) computing (e.g. scientific, render farms) that they favor multi-processing approaches, especially because they typically go multi-host anyway.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">You could also argue that in practice nearly all concurrent programming is IO-bound and that asyncio solves that for us. Recent-ish discussions (e.g. PEP 492) lead me to believe that it's not nearly that simple.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Ultimately the merits of multi-processing and asyncio over multi-core threading, regardless of whether or not a valid or sufficient argument, do not mitigate the popular and pervading *sentiment* that Python is weak when it comes to leveraging multi-core and handling concurrency (or more accurately computational parallelism). And perception ""is 9/10th of the law"" (or arguably higher).</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Folks looking for a solution are going to search for one that matches the model in their brain. Much like with organic molecules, if the conceptual bind points don't line up they aren't going to connect with what Python is offering. The power of Python is that it maps well onto our brains. Though concurrency/parallelism isn't very suited to our brains, it is one key place where Python doesn't do a good job of matching conceptual expectations at large.</span><br />
<h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The Proposal</span></h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;">In short, Python's multi-core story is murky at best. Not only can we be more </span><span style="font-family: "arial" , "helvetica" , sans-serif;">clear on the matter, we can improve Python's support. The result of any </span><span style="font-family: "arial" , "helvetica" , sans-serif;">effort must make multi-core (and concurrency/parallelism) support in Python obvious, </span><span style="font-family: "arial" , "helvetica" , sans-serif;">unmistakable, and undeniable (and keep it Pythonic).</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Early in 2015 I'd reached my limits with all the criticisms and misunderstandings. So in the spirit of open source I resolved to do something about it. Since this was not an area of expertise for me I did a lot of reading and reached out to experts I know (thanks to Guido, Nick, Sarah, Graham, and others). In a few months I felt like I had a good enough understanding and a good solution.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">In June of 2015 <a href="https://mail.python.org/pipermail/python-ideas/2015-June/034177.html" target="_blank">I introduced my solution on the python-ideas mailing list</a>. The gist is to use CPython's existing subinterpreters to isolate GIL-free execution threads with a CSP front end. My hope was to finish the first stage of work in time for Python 3.6 (i.e. right about now). The reception was generally positive. There was even <a href="https://www.reddit.com/r/programming/comments/3crxzm/solving_multicore_python/" target="_blank">discussion on reddit</a>. I was encouraged.</span><br />
<h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The Outcome</span></h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Going in I knew it would be a challenging project. However, the solution I proposed was tractable in the desired time frame, building on a lot of existing parts and decomposing into manageable stages. The blockers were well understood, mainly involving subinterpreter bugs and PEP 432. I also received several solid offers for help. In October I even went to PyCon UK to coordinate some of the efforts.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">At the same time it became clear that my life was getting too busy to make much progress. In early 2016 I decided to table the project. I wasn't giving up yet and hoped to get back to it. Furthermore, there were also many parts of the project that stand on there own as useful features. That's about where things are at right now.</span><br />
<h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The Details</span></h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;">This is where I try to summarize my proposal and relevant information.</span><br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Summary</span></h3>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">expose subinterpreters in Python (a low-level stdlib module)</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">support passing objects between subinterpreters</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">add subinterpreter serial-execution mode</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">add a high-level <a href="https://en.wikipedia.org/wiki/Communicating_sequential_processes" target="_blank">CSP</a> module to the stdlib</span></li>
</ul>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Phases</span></h3>
<div>
<ol>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">resolve blockers</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">add "interpreters" module</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">minimal multi-core solution</span></li>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">subinterpreter "serial execution mode" (no GIL )</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">channels supporting immutable objects</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">no extension modules</span></li>
</ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">csp module</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">expanded support</span></li>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">support more types in channels</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">performance optimization</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">extension module support (PEP 489 compliant only)</span></li>
</ul>
</ol>
</div>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Requirements</span></h3>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">"</span><span style="font-family: "arial" , "helvetica" , sans-serif;">make multi-core support in Python obvious, </span><span style="font-family: "arial" , "helvetica" , sans-serif;">unmistakable, and undeniable (and keep it Pythonic)"</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">no significant impact on single-threaded performance</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">maintain backward compatibility (C-API, etc.)</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">(pseudo-)compatibility with multiprocessing/threading/concurrent.futures APIs</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">a multi-core concurrency model/approach that fits our brains</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Python APIs</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">supportable on other Python implementations</span></li>
</ul>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Blockers</span></h3>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://www.python.org/dev/peps/pep-0432/" target="_blank">PEP 432</a> ("Simplifying the CPython startup sequence")</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">improved interpreter isolation</span></li>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">(mostly) eliminate process globals</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">handling of process state (env vars, etc.)</span></li>
</ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">subinterpreter bugs:</span></li>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="http://bugs.python.org/issue4202">http://bugs.python.org/issue4202</a></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="http://bugs.python.org/issue6531">http://bugs.python.org/issue6531</a></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="http://bugs.python.org/issue10915">http://bugs.python.org/issue10915</a></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="http://bugs.python.org/issue15751">http://bugs.python.org/issue15751</a></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="http://bugs.python.org/issue21387">http://bugs.python.org/issue21387</a></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="http://bugs.python.org/issue24553">http://bugs.python.org/issue24553</a></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="http://bugs.python.org/issue24554">http://bugs.python.org/issue24554</a></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="http://bugs.python.org/issue24932">http://bugs.python.org/issue24932</a></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://github.com/pyca/cryptography/issues/2299">https://github.com/pyca/cryptography/issues/2299</a></span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><a class="in-cell-link" href="https://github.com/GrahamDumpleton/mod_wsgi/issues/43" target="_blank">https://github.com/GrahamDumpleton/mod_wsgi/issues/43</a></span></li>
</ul>
</ul>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Standalone Improvements</span></h3>
<div>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">faster/cleaner interpreter startup?</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">better multiple-interpreters-per-process support</span></li>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">named subinterpreters</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">interpreters module (a la threading)</span></li>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">_interpreters module (a la _threading)</span></li>
</ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">more efficient sharing between interpreters (e.g. builtins)</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">faster/cleaner subinterpreter startup</span></li>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">share some modules</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">leverage object sharing</span></li>
</ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">refactor C-API to take interpreter arg</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">leaner subinterpreters?</span></li>
</ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">refcounts in own memory page</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">factor out pickle-independent parts of multiprocessing</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">better object immutability</span></li>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">truer immutability?</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">immutable mode?</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">frozen objects</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">issue #24991: Define instance mutability explicitly on type objects</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">several PEPs</span></li>
</ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">isolated object graphs</span></li>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">"isolated" object</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">memory model (all in same page)</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">related to RDM project</span></li>
</ul>
</ul>
</div>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Specific Additions</span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"></span><br />
<div>
<ul><span style="font-family: "arial" , "helvetica" , sans-serif;">
<li>channels (a la queue)</li>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">object sharing between interpreters</span></li>
<ul>
<li>"immutable objects: int, float, str, tuple, bool, frozenset, complex, bytes, None</li>
<li> - containers (tuple, frozenset) must hold only immutable objects"</li>
<li>types that implement __shared__</li>
<li>"frozen" objects</li>
<li>read-only views</li>
<li>"owned" objects (transfer ownership)</li>
</ul>
<li>C channels</li>
<li>in own module?</li>
</ul>
<li>PEP-489 slot for subinterpreter support?</li>
<li>subinterpreter "serial execution mode"<span class="Apple-tab-span" style="white-space: pre;"> </span></li>
<ul>
<li>add mode management</li>
<li>start each in own thread</li>
<li>disallow threading</li>
<li>disallow forking</li>
<li>eliminate GIL within each subinterpreter</li>
</ul>
<li>csp module</li>
<ul>
<li><i>inspired</i> by <a href="http://python-csp.readthedocs.io/en/latest/" target="_blank">python-csp</a></li>
<li>shared-nothing "thread" concurrency model</li>
<li>uses subinterpreters in serial execution mode by default</li>
</ul>
<li>object ownership</li>
<li>"Local Interpreter Lock"</li>
</span></ul>
</div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span>
<br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Specific Changes</span></span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span>
<ul><span style="font-family: "arial" , "helvetica" , sans-serif;">
<li>drop GIL between interpreters?</li>
</span></ul>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span><br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Python Alternatives</span></h3>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">threading</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">multiprocessing</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">asyncio</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">STM (Armin Rigo, PyPy)</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">pyparallel (Trent Nelson)</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">dask</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">gilectomy (Larry Hastings, CPython)</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">otherwise remove the GIL</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">better concurrency primitives for threaded programming</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">add multi-core support to the asyncio event loop</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">better documentation</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Jython</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">IronPython</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">other Python implementations</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">fibers</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">do nothing</span></li>
</ul>
Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com16tag:blogger.com,1999:blog-4844592351972048032.post-14827186228198307552013-12-19T14:26:00.001-07:002014-04-09T12:41:25.073-06:00Goals for Python 3.5Python 3.4 is in its first beta and the release is just around the corner. Hurray! That means we are in feature freeze. While I am finishing up odds and ends for the <a href="http://www.python.org/dev/peps/pep-0451/">PEP 451</a> (module specs) implementation, I'm also starting to think seriously about what I hope to accomplish for the next Python version, 3.5.<br />
<br />
The following are lists of things I'd like to make happen for Python 3.5. Most of them are things I wanted to do for 3.4 but ran out of time (go figure). I'll be adding to this list as I run across things I missed. I'm sure I've missed a thing or three that I promised myself or someone else that I'd work on.<br />
<br />
Inspired in part by <a href="https://ncoghlan_devs-python-notes.readthedocs.org/en/latest/pep_ideas/index.html">Nick Coghlan</a>, I've categorized this 3.5 wishlist in descending order of likelihood.<br />
<br />
[<span style="color: red;">WARNING</span>: Realistically, a bunch of this will not happen.]<br />
<br />
<h2>
Must-haves</h2>
<br />
These things are my main priorities. Barring rejection in python-dev, I will work to push these through.<br />
<br />
1. a C implementation of OrderedDict (<a href="http://bugs.python.org/issue16991">basically done</a>)<br />
2. OrderedDict as the default class <u>definition</u> namespace [<a href="https://mail.python.org/pipermail/python-ideas/2013-February/019704.html">guido</a>]<br />
3. a __definition_order__ attribute on classes that preserves the order of keys (or at least the keys) [<a href="https://mail.python.org/pipermail/python-dev/2013-June/127103.html">me</a>]<br />
4. a __kwargs_order__ attribute in function locals that preserves the order of keys from **kwargs in calls (in lieu of making kwargs an OrderedDict) [link]<br />
5. a new type that abstracts the full import system (similar to <a href="http://www.python.org/dev/peps/pep-0406/">PEP 406</a>)<br />
- incl. <a href="http://bugs.python.org/issue15600">exposing suffix->loader mapping</a><br />
- context manager support<br />
6. add statement local namespaces [<a href="http://www.python.org/dev/peps/pep-3150/">PEP 3150</a>][<a href="http://www.python.org/dev/peps/pep-0403/">PEP 403</a>][<a href="http://www.python.org/dev/peps/pep-0340/">PEP 340</a>][<a href="http://www.python.org/dev/peps/pep-0359/">PEP 359</a>][<a href="http://www.curiousefficiency.org/posts/2011/10/correcting-ignorance-learning-bit-about.html">Nick</a>]<br />
<div>
<br /></div>
<div>
#1-4 are all related, though 4 probably won't involve OrderedDict when all is said and done. They shouldn't require all that much work to take across the finish line.<br />
<br /></div>
<h2>
Helping Out</h2>
<br />
These are things that I expect others will be targeting for 3.5 and with which I plan on helping.<br />
<br />
* refactor <a href="http://hg.python.org/cpython/file/default/Python/pythonrun.c">pythonrun.c</a> [<a href="http://www.python.org/dev/peps/pep-0432/">PEP 432</a>]<br />
* refactor the C extension module API to take advantage of the PEP 451 loader APIs [import-sig link][issue16421][issue13429][issue16392?]<br />
- incl. <a href="http://bugs.python.org/issue19698">implement exec_module()</a> for BuiltinImporter and ExtensionFileLoader<br />
* a successor to <a href="http://www.python.org/dev/peps/pep-0395/">PEP 395</a><br />
* "speed up" interpreter start-up, import [<a href="http://bugs.python.org/issue16101">issue16101</a>][link][link]<br />
* [subinterpreters] (incl. using them to circumvent GIL? [link], interpreter-per-thread)<br />
* <strike>a pure python zip importer [link]</strike><br />
* <strike>a lazy importer [link]</strike><br />
* <a href="http://bugs.python.org/issue2292">missing *-unpacking generalizations</a> [<a href="http://www.python.org/dev/peps/pep-0448/">PEP 448</a>]<br />
* add <a href="http://bugs.python.org/issue13475">--path0/--no-path0 cmdline options</a> (also issue15716)<br />
* add __locallookup__ method to metaclass [<a href="http://www.python.org/dev/peps/pep-0447/">PEP 447</a>]?<br />
<div>
* address the hacky uses of function parameter defaults [link] (Jan K.)<br />
<br /></div>
<h2>
Smaller Tasks</h2>
<br />
These are things that I hope to get done for 3.5, but won't require a lot of work.<br />
<br />
* a new frame attribute, f_func, which is a weakref to the function object that was actually called (<a href="http://bugs.python.org/issue12857">basically done</a>)<br />
* give the sys module a custom type and add descriptors [link]<br />
* <strike>add <a href="http://bugs.python.org/issue17373">inspect.Signature.from_callable()</a></strike><br />
* change setup.py (the main one) to not rely on imp.load_dynamic() [imp => _imp?] (may be done already)<br />
* update pickle to use __spec__ (in the __main__ case)<br />
<br />
<h2>
Would be Nice</h2>
<br />
Stuff that I'd like to see in 3.5 but that I likely won't have time to work on.<br />
<br />
* interpreter startup hook (via cmdline option) [link] (for coverage.py, etc.)<br />
* <a href="http://bugs.python.org/issue11339">allow classes to be referenced in the class body</a><br />
* extension/plugin framework for unittest a la nose [link]<br />
<div>
<br /></div>
<h2>
<i>May</i> Be a Good Idea...</h2>
<br />
Other things that may or may not be worth doing.<br />
<br />
* expose _SpecMethods (or something like it) publicly<br />
* add importlib.util.load_from_spec()?<br />
* .ref files [link]<br />
<div>
<div>
* find a non-hacky replacement for a module replacing itself in sys.modules [link]<br />
* re-organize the sys module with sub-namespaces along the lines of the config categories listed in PEP 432 (similar to but more extensive than <a href="http://www.python.org/dev/peps/pep-3139/">PEP 3139</a>)</div>
<div>
</div>
* parser hooks<br />
* tokenizer hooks<br />
* traceback hooks<br />
* API for excluding functions/methods from tracebacks like importlib and unittest do [<a href="http://bugs.python.org/issue1705520">issue1705520</a>?]</div>
<div>
* spec.data (a wrapper for the data-related API of loaders) [<a href="http://bugs.python.org/issue14982#msg162238">issue14982</a>?]</div>
<div>
* add a classonlymethod decorator (not necessarily as a builtin) [link]<br />
* support positional-only parameters (via decorator?) [link][<a href="http://www.python.org/dev/peps/pep-0457/">PEP 457</a>]<br />
* add a listproxy type to parallel dictproxy?<br />
* improve re-import of builtin modules, extension modules (see above in Helping Out) [<a href="http://bugs.python.org/issue14715#msg160972">issue14715</a>?]<br />
* generic context API (incl. Context, ThreadLocalContext), a la decimal (email policy?) (asyncio concerns [link])<br />
* post-import hooks (a la <a href="http://www.python.org/dev/peps/pep-0369/">PEP 369</a>)<br />
* abc.implements(obj, *<ABC>) that ensures the object has all the appropriate attributes<br />
* ABCMeta.implements(decorated) that registers the decorated class on an ABC and wraps the decorated class's __init__() with an abc.implements() call after it runs [<a href="http://bugs.python.org/issue12128">issue12128</a>]<br />
* some mechanism to inherit docstrings [issue15582][issue15731]<br />
* expose PyArg_ParseTuple, etc. in Python<br />
* function to resolve __qualname__ (or provide func.__origin__)<br />
<br /></div>
<h2>
More Radical Ideas</h2>
<br />
* always import from <module.py> and set __path__ if there is a directory by the same name (obviates __init__.py) [link] (related to <a href="http://www.python.org/dev/peps/pep-0402/">PEP 402</a> discussions) -- at least provide an import hook<br />
* provide a safe mode for ImportSystem (see #5 above) that prevents leaking import side effects outside a context<br />
<div>
* replace "if __name__ == '__main__'" [link][<a href="http://www.python.org/dev/peps/pep-0299/">PEP 299</a>][<a href="http://www.python.org/dev/peps/pep-3122/">PEP 3122</a>] (__spec__.is_main + builtin is_main?)</div>
<div>
* a reverse name binding protocol (the object being bound/unbound to the name is notified) [link]</div>
<div>
* expose key metaclass operations via special class methods (a la <a href="http://www.python.org/dev/peps/pep-0422/">PEP 422</a>)<br />
* attribute docstrings [link]<br />
* a hook to process a docstring after its corresponding object is created (but before decorators are applied)</div>
<div>
* revisit <a href="http://www.python.org/dev/peps/pep-0224/">PEP 224</a>, <a href="http://www.python.org/dev/peps/pep-0329/">PEP 329</a>, <a href="http://www.python.org/dev/peps/pep-0351/">PEP 351</a>, <a href="http://www.python.org/dev/peps/pep-0363/">PEP 363</a>, <a href="http://www.python.org/dev/peps/pep-0377/">PEP 377</a> (Kristjan)<br />
<br /></div>
<h2>
Random Off-the-cuff Ideas</h2>
<br />
* a decorator for type hints (optional static typing)<br />
* a decorator that supports all sorts of *args/**kwargs handling<br />
* define a standard API for object (modules included) to "install" themselves; provide installer helpers (a la install_importhook() or an Installer base class + ImportHookInstaller base subclass)<br />
* generic Registry class (register() method, etc.)<br />
* spec.open() for locatable specs<br />
* expose an easy way to make some module-global read-only (make use of loader.create_module()?) [<a href="http://bugs.python.org/issue15941#msg170468">issue15031</a>]<br />
* break or return in global module code to stop early (instead of delegating skipped code to submodule)<br />
* ...<br />
<br />
This list is as endless as the sea! :-)Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com5tag:blogger.com,1999:blog-4844592351972048032.post-78442424793880781712013-06-19T07:45:00.000-06:002013-06-19T07:45:18.355-06:00PyCon 2014 Talks Wishlist<br />
Last year I posted <a href="http://ericsnowcurrently.blogspot.com/2012/07/pycon-2013-talks-i-would-like-to-see.html">a list of talks I wished someone would give at PyCon 2013</a>. This is the <a href="https://us.pycon.org/2014/">PyCon 2014</a> version. From my wishlist last year 2 of the talks actually happened. The rest I'd still like to see so I'll include them here. Feel free to take any of the ideas and run with them. I'll gladly help anyone write a proposal, whether from my list or not, and see it through the process--I'm on the program selection committee. FYI, the CFP isn't that far away!<br />
<br />
Here are the repeats from last year:<br />
<ul>
<li>Python in Chrome's NativeClient (PyPy anyone?)</li>
<li>Python in Android (and I don't mean SL4A) (kivy?)</li>
<li>Using Salt States for dev ops</li>
<li>Using Salt to control a host of hosts</li>
<li>Python internals (take your pick)</li>
<li>"Java (hordes of libraries) + Python (duh) = Jython (awesome)"</li>
<li>something similar for IronPython and .NET</li>
<li>something about Cython's <a href="http://docs.cython.org/src/tutorial/pure.html">"Pure Python Mode"</a></li>
<li>security: what Python does and doesn't do well</li>
<li>threads vs. processes: how to decide between them for the job at hand</li>
</ul>
<div>
And the new ones:</div>
<div>
<ul>
<li>CPython's dict and set type implementations</li>
<li>CPython's list and tuple type implementations</li>
<li>CPython's memory management implementation</li>
<li>why the future looks bright for Python packaging</li>
<li>contributing to Python--it's not as hard as you think</li>
</ul>
</div>
<div>
<span style="background-color: white;">I'll try to keep this updated at time marches on. Feel free to make suggestions in the comments.</span></div>
<span style="background-color: white;"><br /></span><span style="background-color: white;">Also, here are PyCon 2014 wishlists from others:</span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;"><none yet></span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;">Resources:</span><br />
<span style="background-color: white;"><br /></span>
<a href="https://us.pycon.org/2014/speaking/cfp/">https://us.pycon.org/2014/speaking/cfp/</a> (not active yet)<br />
Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com0tag:blogger.com,1999:blog-4844592351972048032.post-9857417090275538242012-07-12T22:55:00.001-06:002012-09-18T21:37:26.326-06:00PyCon 2013 Talks I Would Like to SeeThis year I hope to encourage people to propose talks for <a href="https://us.pycon.org/2013/">PyCon 2013</a>. Here are some ideas if you need some encouragement:<br />
<ul>
<li>Python in Chrome's NativeClient (PyPy anyone?)</li>
<li>Python in Android (and I don't mean SL4A)</li>
<li>Why Python 3.3 means you really want to move to Python 3</li>
<li>Using Salt States for dev ops</li>
<li>Using Salt to control a host of hosts</li>
<li>Python internals (take your pick)</li>
<li>"Java (hordes of libraries) + Python (duh) = Jython (awesome)"</li>
<li>something similar for IronPython and .NET</li>
<li>something about Cython's "Pure Python Mode"</li>
<li>security: what Python does and doesn't do well</li>
<li>threads vs. processes: how to decide between them for the job at hand</li>
<li>panel: packaging in Python</li>
</ul>
<span style="background-color: white;">More as they come to me. Feel free to make suggestions in the comments.</span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;">Also, here are PyCon 2013 wishlists from others:</span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;"><a href="https://us.pycon.org/2013/speaking/cfp/">https://us.pycon.org/2013/speaking/cfp/</a></span><br />
<a href="http://pycon.blogspot.com/2012/08/what-talks-do-you-want-to-see-at-pycon.html">http://pycon.blogspot.com/2012/08/what-talks-do-you-want-to-see-at-pycon.html</a><br />
<span style="background-color: white;"><a href="http://www.reddit.com/r/Python/comments/ymy1f/what_pycon_talks_would_you_like_to_see/">http://www.reddit.com/r/Python/comments/ymy1f/what_pycon_talks_would_you_like_to_see/</a></span><br />
<a href="http://pydanny.com/pycon-2013-talkstutorials-i-want-to-see.html">http://pydanny.com/pycon-2013-talkstutorials-i-want-to-see.html</a><br />
<a href="http://annaraven.blogspot.com/2012/08/pycon-proposals-id-like-to-see.html">http://annaraven.blogspot.com/2012/08/pycon-proposals-id-like-to-see.html</a><br />
<a href="http://third-bit.com/blog/archives/4511.html">http://third-bit.com/blog/archives/4511.html</a><br />
<a href="http://techblog.ironfroggy.com/2012/08/pycon-2013-posts-i-want-to-see.html">http://techblog.ironfroggy.com/2012/08/pycon-2013-posts-i-want-to-see.html</a><br />
<a href="http://littlegreenriver.com/weblog/2012/08/23/pycon-2013-talks-i-would-like/">http://littlegreenriver.com/weblog/2012/08/23/pycon-2013-talks-i-would-like/</a>
Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com0tag:blogger.com,1999:blog-4844592351972048032.post-32272554591495091912012-04-09T22:21:00.001-06:002012-04-30T10:47:39.383-06:00My PyCon Experience, 2012PyCon 2008 in Chicago was my first one. I attended the main conference with some co-workers and it was nice. Last year I had the chance to go again (Atlanta), this time alone and for the full length of the conference. Every part of that conference exposed something new and remarkable to me, from the tutorials and the sweet community vibe on those days, to the awesomeness that is the sprints. My experience at PyCon last year was a revelation.<br />
<br />
This year built on last year, and then some. I was able to go for the length of the conference, and participated in several new things. Here's where I tell you all about it.<br />
<a name='more'></a><br />
<span style="font-family: inherit;"><a href="#experienced">Cool Things I Experienced at PyCon</a></span><br />
<a href="#learned">Cool Things I Learned About at PyCon</a><br />
<a href="#attended">Talks I Attended</a><br />
<a href="#watch">Talks I'm Going to Watch</a><br />
<a href="#other">Other Activities at PyCon</a><br />
<a href="#involved">Getting Involved</a><br />
<div>
<span style="font-family: inherit;"><br /></span></div>
<h2>
<span style="font-family: inherit;"><a href="#experienced" name="experienced">Cool Things I Experienced at PyCon</a></span></h2>
<div>
<span style="font-family: inherit;"><br /></span></div>
<h3>
<span style="font-family: inherit;">Talk Proposals</span></h3>
<div>
<br /></div>
During PyCon last year I got an idea for a project that I've been working on since then. I resolved to speak about it at PyCon, but figured it wouldn't be ready for 2012, instead aiming for 2013. In the interest of getting a feel for the proposal and review process, I submitted several talk proposals. All of them were serious, but some would have been a lot of work if they'd been accepted.<br />
<br />
The proposal interface on the PyCon site worked great. I put up a summary and an outline for each of the talks. I got good feedback from reviewers on the Program Committee. In the end I killed several of the proposals before the committee meetings started, had several make it through, and had two accepted. All in all, I learned that a good proposal is one that doesn't try to do too much, still covers something interesting, and is backed by solid knowledge.<br />
<div>
<br />
<h3>
<span style="font-family: inherit;">Program Committee</span></h3>
<div>
<br /></div>
This year I wanted to get more involved in the conference organization. So the first step I took is to join the program committee and participate there. As a bonus, it gave me lots of insight that will help me make solid proposals for 2013. The first phase was to review proposals through the web interface. Of the (give or take) 400 proposals, I was able to review over 100. It was mind-blowing how many great proposals there were.<br />
<br />
After a while the committee started the first round of review meetings. We met in IRC at designated times, and discussed each proposal for several minutes before everyone voted yea/nay. At the beginning of the discussion anyone could volunteer as a champion for a proposal and would have the floor for a couple minutes to make a case for accepting the proposal. A few proposals were easy to eliminate. Most were good, however. A few proposals spawned lengthy or heated discussions. Several required the committee chair to make a decision when voting was close. It was a fascinating process and I attended as many meetings as I could.<br />
<br />
After several two-a-day weeks we moved into the next round, thunderdome. The committe chair, Jacob Kaplan-Moss, grouped the remaining talks by subject, with groups of 2 to 5 proposals. We had similar review meetings, but this time we'd indicate which talks in the group we thought should be accepted, instead of just saying yea/nay. For small groupings we'd select 0-1 proposals. For some large groupings we'd select as many as 3. This also went on for weeks.<br />
<br />
The experience here was fantastic. The committee was run well. The committee members were great. I got to know quite a few people in the community this way, and put faces to names when I got to Santa Clara.<br />
<br />
Our schedule was grueling due to the massive volume of great proposals. We could have had double the tracks and still filled them all with great talks. All things considered, I think it turned out really well.<br />
<div>
<br />
<h3>
<span style="font-family: inherit;">PyCon Organizers</span></h3>
<div>
<br /></div>
While working on my proposals I found that there wasn't a lot out there to guide a conference-speaking-newbie like myself. So I started to put together something along those lines. At one point I had collected enough that I offered it to the PyCon organizers. As a result, I came to be aware that anyone can join the PyCon organizing committee and get involved really easily.<br />
<br />
I moved forward with my speaking advice page, got access to put it up on the PyCon site, and helped organize a Q&A for speakers the night before the sessions started. Everyone in the community was really helpful in all of it and the meeting was a success because of that. It just reaffirmed my conviction that the Python community is amazing.<br />
<div>
<br />
<h3>
<span style="font-family: inherit;">Language Summit</span></h3>
<div>
<br /></div>
Last year I got to know a bunch of the CPython core developers during the sprints. I worked hard to stay involved on the mailing list since then. As a result, I was able to go to the language summit, and take notes that were compiled into the official report.<br />
<br />
The language summit is where all the core developers that can make it get together in one big room during one of the tutorial days. They discuss current issues for the language that need decisions. One of the core developers chairs the meeting and conducts the discussion through an agenda that they've prepared ahead of time. It was great to be there, contribute to a small part of the discussion, and help with some extensive note-taking.<br />
<div>
<br />
<h3>
<span style="font-family: inherit;">Speaking at PyCon</span></h3>
<div>
<br /></div>
This year I gave two talks, one on imports and one on interfaces. Even though I'd been preparing for many months, I felt really under-prepared. This was my first time speaking at a technical conference, though I've been speaking publicly for most of my life, so I wasn't sure what to expect. <br />
<br />
My interfaces talk was on Friday and I went in expecting to get through my slides too quickly, so I made an effort to slow it down. Unfortunately this had the wrong effect. I ended up having to cut my talk about 10 slides short and lost my Q&A time. As disappointing as that was, it was a good experience that paid off the next day.<br />
<br />
My imports talk on Saturday went much better. Between my experience the day before, and my higher expertise with the subject matter, the talk went off great. I covered the material, finished right on time, and had good Q&A time. I also got a lot of positive feedback, which was encouraging. If I've lucky enough to get a proposal accepted, this year's experience will make a big difference.<br />
<div>
<br />
<h3>
<span style="font-family: inherit;">Inaugural PyCon 5k</span></h3>
<div>
<br /></div>
This year was the first PyCon 5k and I participated. Where there were around 150 who came, there were only a handful of us that walked it. I was nervous about doing anything that might adversely impact my talk that day, so I took it easy. As a result, I spent the next 45 minutes chatting about Jython with Jim Baker, one of the Jython core developers. An awesome turn of events!<br />
<div>
<br />
<h3>
<span style="font-family: inherit;">Sprinting on CPython</span></h3>
<div>
<br /></div>
Like last year, this year I sprinted with the CPython core developers. Unlike last year, I had specific objectives, centered on the import system. The first day a number of us met together to come to some decision about PEPs 382 and 402. It was a fruitful and insightful day, and I was able to be heavily involved in the discussion.<br />
<br />
Guido was able to come the next day too, and he and I had a nice talk about imports and language transformations. The rest of the sprints I worked on the import system, particularly with things related to the importlib bootstrap (issue 2377), with most of my working going into issue 13959. Brett Cannon could only stay for one day of the sprints, but it was enough to talk about what needed to get done with the work surrounding importlib.<br />
<div>
<br />
<h3>
<span style="font-family: inherit;">Getting to Know People</span></h3>
<div>
<br /></div>
One of the best things about PyCon is that it's your one chance each year to talk face-to-face with people with whom you interact online the rest of the time. A lot of stuff gets done. But you get to know people a lot better too. Throughout the conference I was able to spend most of my evenings with core developers, going out to dinner and the like. Last year I met a few of them, but I hadn't really gotten very involved yet, so it wasn't the same thing. This part of PyCon makes attending worth it.<span style="font-family: inherit;"><br /></span><br />
<br />
<h2>
<span style="font-family: inherit;"><a href="#learned" name="learned">Cool Things I Learned About at PyCon</a></span></h2>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<div>
<ul>
<li><a href="http://pypi.python.org/pypi/e/"><span style="font-family: inherit;">"e" module</span></a></li>
<li><a href="http://pypi.python.org/pypi/pycscope/"><span style="font-family: inherit;">pycscope</span></a></li>
<li><a href="http://cython.org/" style="font-family: inherit;">cython</a><span style="font-family: inherit;"> (</span><a href="http://docs.cython.org/src/tutorial/pure.html" style="font-family: inherit;">w/ decorators</a><span style="font-family: inherit;">)</span></li>
<li><a href="http://alfven.org/wp/hdf5-for-python/" style="font-family: inherit;">HDF5</a><span style="font-family: inherit;">/</span><a href="http://sourceforge.net/apps/mediawiki/fuse/" style="font-family: inherit;">Fuse</a><span style="font-family: inherit;">/</span><a href="http://code.google.com/p/pyfilesystem/" style="font-family: inherit;">pyfilesystem</a></li>
<li><a href="https://fedorahosted.org/pyrasite/"><span style="font-family: inherit;">pyrasite</span></a></li>
<li><a href="https://fedorahosted.org/gcc-python-plugin/"><span style="font-family: inherit;">Python extension for gcc</span></a></li>
<li><a href="https://fedoraproject.org/wiki/Features/EasierPythonDebugging"><span style="font-family: inherit;">Python extension for gdb</span></a></li>
<li><a href="http://www.python.org/dev/peps/pep-0405/"><span style="font-family: inherit;">pyvenv</span></a></li>
<li><a href="http://code.google.com/p/shedskin/"><span style="font-family: inherit;">shedskin</span></a></li>
<li><a href="http://bpython-interpreter.org/"><span style="font-family: inherit;">bpython</span></a></li>
<li><a href="http://ipython.org/ipython-doc/dev/interactive/htmlnotebook.html"><span style="font-family: inherit;">ipython notebook</span></a></li>
</ul>
</div>
</div>
<br />
<h2>
<span style="font-family: inherit;"><a href="#attended" name="attended">Talks I Attended</a></span></h2>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<ul>
<li style="text-align: left;"><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/399/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: center; text-decoration: none; vertical-align: baseline;">The Art of Subclassing</a> Raymond Hettinger (video)</span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/352/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">Stop Writing Classes</a> Jack Diederich<span style="text-align: left;"> </span><span style="text-align: left;">(video)</span></span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/126/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: center; text-decoration: none; vertical-align: baseline;">Interfaces and Python</a><span style="color: #222222; line-height: 12px; text-align: left;"> Eric Snow</span><span style="text-align: left;"> </span><span style="text-align: left;">(video)</span></span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/78/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">Static analysis of Python extension modules using GCC</a><span style="color: #222222; line-height: 12px; text-align: left;"> Dave Malcolm</span><span style="color: #222222; line-height: 12px; text-align: left;"> (video)</span></span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/144/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">Permission or Forgiveness?</a><span style="color: #222222; line-height: 12px; text-align: left;"> Alex Martelli</span><span style="color: #222222; line-height: 12px; text-align: left;"> (video)</span></span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/210/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">A resume-based WSGI Load Balancer</a><span style="color: #222222; line-height: 12px; text-align: left;"> Jim Fulton</span><span style="color: #222222; line-height: 12px; text-align: left;"> (video)</span></span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/244/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">Why PyPy by example</a><span style="color: #222222; line-height: 12px; text-align: left;"> Maciej Fijalkowski (video)</span></span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/58/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">How the PyPy JIT works</a><span style="color: #222222; line-height: 12px; text-align: left;"> Benjamin Peterson (video)</span></span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/446/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">Making Jython Faster and Better</a> <span style="color: #222222; line-height: 12px; text-align: left;">Jim Baker (video)</span></span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/17/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">Getting the Most Out of Python Imports</a><span style="color: #222222; line-height: 12px; text-align: left;"> Eric Snow (video)</span></span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/378/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">The Email Package: Past, Present, and Future</a><span style="color: #222222; line-height: 12px; text-align: left;"> R. David Murray (video)</span></span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/196/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">Mailman 3</a><span style="color: #222222; line-height: 12px; text-align: left;"> Barry Warsaw (video)</span></span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/153/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">Patterns for building large Pyramid applications</a><span style="color: #222222; line-height: 12px; text-align: left;"> Carlos de la Guardia (video)</span></span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/455/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">Python, Linkers, and Virtual Memory</a><span style="color: #222222; line-height: 12px; text-align: left;"> Brandon Rhodes (video)</span></span></li>
</ul>
<div style="text-align: left;">
<span style="color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica;"><span style="font-size: 11px; line-height: 12px;"><br /></span></span></div>
</div>
<h2>
<span style="font-family: inherit;"><a href="#watch" name="watch">Talks I'm Going to Watch</a></span></h2>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<ul>
<li><div class="title" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;">
<span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/315/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">Stop Mocking, Start Testing</a> Augie Fackler</span> (video)</div>
<span style="font-family: inherit;"><div class="title" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;">
</div>
</span></li>
<li><span style="font-family: inherit;"><a href="https://us.pycon.org/2012/schedule/presentation/429/" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #409cc1; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">Fast Test, Slow Test</a> <span style="color: #222222; line-height: 12px; text-align: left;">Gary Bernhardt</span></span><span style="text-align: left;"> (video)</span></li>
<li style="text-align: left;"><br /></li>
<li><span style="text-align: left;"><br /></span></li>
<li><span style="text-align: left;"><br /></span></li>
<li><span style="text-align: left;">...</span></li>
</ul>
</div>
<br />
<h2>
<span style="font-family: inherit;"><a href="#other" name="other">Other Activities at PyCon</a></span></h2>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">There's so much more to PyCon than the little that I've covered. Every bit of it is awesome!</span></div>
<br />
<ul>
<li><span style="font-family: inherit;">Tutorials</span></li>
<li><span style="font-family: inherit;">Web Summit</span></li>
<li><span style="font-family: inherit;">Open Spaces</span></li>
<li><span style="font-family: inherit;">Expo Hall</span></li>
<li><span style="font-family: inherit;">Keynotes</span></li>
<li><span style="font-family: inherit;">BoFs (Birds of a Feather)</span></li>
<li><span style="font-family: inherit;">Lightning Talks</span></li>
<li><span style="font-family: inherit;">Poster Session</span></li>
<li><span style="font-family: inherit;">Job Fair</span></li>
<li><span style="font-family: inherit;">Startup Row</span></li>
</ul>
<br />
<h2>
<span style="font-family: inherit;"><a href="#involved" name="involved">Getting Involved</a></span></h2>
<div>
<span style="font-family: inherit;"><br /></span></div>
<span style="font-family: inherit;">Here are things you can do to get more involved with PyCon:</span><br />
<br />
<ul>
<li><span style="font-family: inherit;">join the program committee -
<a href="http://mail.python.org/mailman/listinfo/pycon-pc">http://mail.python.org/mailman/listinfo/pycon-pc</a></span></li>
<li><span style="font-family: inherit;">join the organizers -
<a href="http://mail.python.org/mailman/listinfo/pycon-organizers">http://mail.python.org/mailman/listinfo/pycon-organizers</a></span></li>
<li><span style="font-family: inherit;">propose a talk - CFP later this year (last year's CFP:
<a href="https://us.pycon.org/2012/cfp/">https://us.pycon.org/2012/cfp/</a>)</span></li>
<li><span style="font-family: inherit;">on-site - <a href="https://us.pycon.org/2012/community/volunteer/onsite/">https://us.pycon.org/2012/community/volunteer/onsite/</a></span></li>
<li><span style="font-family: inherit;">bag stuffing - one of the seven wonders of PyCon</span></li>
</ul>
<div>
<span style="font-family: inherit;">A more complete list:</span></div>
<br />
<a href="https://us.pycon.org/2012/community/volunteer/"><span style="font-family: inherit;">https://us.pycon.org/2012/community/volunteer/</span></a></div>
</div>
</div>
</div>
</div>
</div>
</div>Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com0tag:blogger.com,1999:blog-4844592351972048032.post-57811916182730814722012-01-10T22:58:00.001-07:002012-01-10T22:58:10.569-07:00Speaking at PyConBy some fluke I'm presenting 2 talks at PyCon:<br />
<br />
<ul>
<li><a href="https://us.pycon.org/2012/schedule/presentation/126/">Interfaces and Python</a> - Friday 2:15 (Track IV)</li>
<li><a href="https://us.pycon.org/2012/schedule/presentation/17/">Getting the Most Out of Python Imports</a> - Saturday 2:15 (Track II)</li>
</ul>
<br />
Here's a page I've put together with advice for speakers at PyCon:<br />
<br />
<a href="http://reference-pages.rtfd.org/pycon_speaker">http://reference-pages.rtfd.org/pycon_speaker</a>Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com0tag:blogger.com,1999:blog-4844592351972048032.post-82748785905776416222011-10-27T19:01:00.001-06:002011-10-27T19:06:26.095-06:00My PyCon 2012 Talk Proposals<div>
<div>
<span class="Apple-style-span" style="color: #222222; font-family: Arial, Helvetica, sans-serif;">For the first time I have actually submitted a talk proposal for PyCon. Well, actually I submitted 8. It'll help my odds! <wink> I figured I would post the proposals here, so people would know what's been eating a lot of my time for the last little while.</span></div>
<div>
<span class="Apple-style-span" style="color: #222222; font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #222222;">I'm showing the proposals in my order of preference. I really hope that one of my top three gets in, but any of them would be awesome. Regardless of how it goes with the proposals, I'll see about presenting each of these at the <a href="http://utahpython.org/">Utah Python Users Group</a>.</span><br /><br />If you have any thoughts or questions, simply leave a comment. :)<br /><br />Here's the list:<br /><br /> * Getting the Most Out of Python Imports</span></div>
<span class="Apple-style-span" style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif;">* The Future of Python's Imports</span><br />
<span class="Apple-style-span" style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif;">* Explicit Handlers to Python Language Features</span><br />
<span class="Apple-style-span" style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif;">* Interfaces and Python</span><br />
<span class="Apple-style-span" style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif;">* AST Transformations using PEP 302</span><br />
<span class="Apple-style-span" style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif;">* Code Archaeology and Repository Spelunking</span><br />
<span class="Apple-style-span" style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif;">* Running Python in Your Browser with Chrome's NativeClient</span><br />
<span class="Apple-style-span" style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif;">* Python on Android</span><br />
<span class="Apple-style-span" style="color: #222222; font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<h1 style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 25px; font-weight: normal; line-height: 1.4em; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Getting the Most Out of Python Imports</h1>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
To really take advantage of Python you must understand how imports work and how to use them effectively. In this talk we'll discuss both of these. After a short introduction to imports, we'll dive right and show how you can put PEP 302 import hooks to work for you.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Type</b>: Talk</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Python's import statement has been a powerful feature since the first release, and only gotten better with age. Understanding how imports work under the hood will let you take advantage of that power.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
The key to customizing Python's imports is the importers introduced by PEP 302. That's a tool that you want in your belt!</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<strong style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Talk Outline</strong></div>
<ol style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: circle; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Python's imports (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">the evolution of the import machinery</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">the gears in the machine</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">motivation for PEP 302</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Finder Objects (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">what they're for</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">how to write one</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">what to do with it</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Loader Objects (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">what they're for</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">how to write one</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">what to do with it</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">sys.meta_path vs. sys.path_hooks (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">when and how to use them</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">example of putting it all together</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Real-life Examples of Import Hooks (7 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Python/import.c</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">importlib module</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">PyPy</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">PyFilesystem</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Other Import Customizations (3 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><code style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">builtins.__import__</code></li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">.pth files</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">PEP 402</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">import engine</li>
</ul>
</li>
</ol>
</div>
</div>
<div>
<span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"><br /></span></div>
<div>
<h1 style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 25px; font-weight: normal; line-height: 1.4em; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
The Future of Python's Imports</h1>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
The history of Python's import machinery is one of evolving power since its humble beginnings in the original Python release. That trend is continuing with efforts to make Python's imports even more useful. Come hear about the current and upcoming project, and learn why it matters to you.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Type</b>: Talk</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Here's an outline of the talk:</div>
<ol style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: circle; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Imports in Python (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">the evolution of the import machinery</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">the gears in the machine</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">importlib (7 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">its introduction in the stdlib</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">as the default <code style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">builtins.__import__</code></li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">status</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">PEP 382/402 (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">why "namespace" packages matter</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">how it would work</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">status</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">The Import Engine (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">consolidating the import state</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">how it could help you</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">status</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Other PEPs (3 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">PEP 369 -- Post import hooks</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">PEP 395 -- Module Aliasing</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">And Beyond... (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Armin's Rant</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">exocet, mercurial, and PEAK</li>
</ul>
</li>
</ol>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Much more information on Python imports may be found at my <a href="http://ericsnowcurrently.blogspot.com/p/python-imports.html" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">Python Imports</a> page.</div>
</div>
</div>
<div>
<span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"><br /></span></div>
<div>
<h1 style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 25px; font-weight: normal; line-height: 1.4em; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Explicit Handlers to Python Language Features</h1>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Come learn all about how Python's language features are handled and how some of that behavior can be customized. We'll go from the grammar to AST and on to the functions that handle the behavior.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Type</b>: Talk</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Like all programming languages, Python can be described by the language features it has and how it handles those features. One of Python's strengths is how some of these handlers, like <code style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">__import__</code> or <code style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">__len__</code>, can be explicitly customized to extend the language.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
In this talk we'll look at Python's language features and how it handles them. We'll trace the path from syntax through AST and beyond. We'll also look at the handlers that you can override and what implicit handlers are candidates to be exposed. This talk will be partly CPython-specific, but the analytic process applies equally to alternate implementations.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Talk Outline:</div>
<ol style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: circle; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Language Features and Handlers (3 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">what is a language feature?</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">what is a handler?</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">a comparison across languages of a feature subset</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Python Language Features (7 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Python's language feature catalog</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">a handler for each feature</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examples of implicit handlers</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examples of explicit handlers (special methods)</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">From Grammar to AST (6 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">mapping features to grammar</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">mapping grammar to AST</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">some concrete examples</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examining the transformation</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">From AST to Handler (9 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">via opcodes in CPython</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">mapping AST to opcodes (compiler)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">mapping opcodes to handlers</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">implicit handlers as an implementation detail</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">some concrete examples</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examining the transformation</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Current Implicit Handlers (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">a look at the handlers that are not customizable</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">which ones could be turned into explicit handlers</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">the impact of doing so</li>
</ul>
</li>
</ol>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
More information on Language Feature Handlers see my <a href="http://ericsnowcurrently.blogspot.com/p/python-language-feature-handlers.html" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">Python Language Feature Handlers</a> page.</div>
</div>
</div>
<div>
<span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"><br /></span></div>
<div>
<h1 style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 25px; font-weight: normal; line-height: 1.4em; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Interfaces and Python</h1>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
In 2.6, Python introduced the Abstract Base Classes. Before that we had "protocols" (and we still do). In this talk we'll look at the how the general concept of interfaces fits into today's Python. We'll also look at some of the alternate proposals of the past, some of the controversies around ABCs, and the direction interfaces might go in the future.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Type</b>: Talk</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Talk Outline:</div>
<ol style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: circle; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">What are Interfaces? (3 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">modeling strict abstraction</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">precedents in other languages</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Interfaces in Python (6 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">duck-typing</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Python "protocols"</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">past proposals (PEP 245)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">how Python "interfaces" are different</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Newer Interface Support (11 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">annotations</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Abstract Base Classes</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">why run-time validation?</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">ABC vs. duck-typing</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Third-party Libraries (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Peak's PyProtocols</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">zope.interface</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Twisted</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">What Next? (3 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">strict interfaces</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">compile-time validation</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">an example interface library</li>
</ul>
</li>
</ol>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
For more comprehensive coverage of interfaces in Python, check out <a href="http://ericsnowcurrently.blogspot.com/p/interfaces-in-python.html" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">this reference</a>.</div>
</div>
</div>
<div>
<span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"><br /></span></div>
<div>
<h1 style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 25px; font-weight: normal; line-height: 1.4em; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
AST Transformations using PEP 302</h1>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Python's stdlib offers the ast module, which exposes the AST portion of the compiler. It's a powerful tool for manipulating code before compilation. Combine this with a PEP 302 import hook and you are ready to do some pretty neat stuff. We'll use domain-specific languages to demonstrate the power of this technique.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Type</b>: Talk</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
AST + PEP 302 == awesome</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
First of all, if you want an introduction to the stdlib ast module or PEP 302 importers, this talk has a lot to offer. If you are interested in domain-specific languages, we'll be talking about those too.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
The magic of combining the ast module with import hooks is in the that ability to transform a seemingly invalid module into a valid one. The end result is compiled python code, as though you had written the module in legal Python in the first place.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Talk Outline:</div>
<ol style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: circle; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">the stdlib ast module (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">briefly cover CPython's <a href="http://docs.python.org/devguide/compiler.html" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">compiler</a></li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">look at the interface of the AST module</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">a quick example of using the AST module to modify partially compiled code</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">PEP 302 importers (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">customizing imports and the problem with builtins.<strong style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">import</strong></li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">what goes into an importer (finders and loaders)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">the default importers</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">sys.meta_path vs. sys.path_hooks</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">two examples of custom importers</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">an example of a domain-specific language (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">what is a DSL?</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">a simple DSL for SQL</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">putting it all together (15 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">an AST transformer for the DSL</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">an importer that intelligently applies the AST transformer</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">actually using it with a real database</li>
</ul>
</li>
</ol>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
For more information, go to my pages on <a href="http://ericsnowcurrently.blogspot.com/p/code-transformations-in-python.html" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">Code Transformations in Python</a>, <a href="http://ericsnowcurrently.blogspot.com/p/python-imports.html" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">Python Imports</a>, and <a href="http://ericsnowcurrently.blogspot.com/p/domain-specific-languages-in-python.html" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">Domain-Specific Languages in Python</a>.</div>
</div>
</div>
<div>
<span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"><br /></span></div>
<div>
<h1 style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 25px; font-weight: normal; line-height: 1.4em; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Code Archaeology and Repository Spelunking</h1>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Come learn about the tools I used and experience I had while peeling back the layers of CPython's full repository. We'll also talk about how these relate to "code archaeology" in general.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Type</b>: Talk</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
The power of version control lies partly in the history it offers. However, for a large project digging down into the repository to gather historical artifacts is no trivial matter.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
While working on a project related to Python's history, I needed to look at commit history and to search through commits/patches. Thankfully CPython's repository goes back almost to the beginning (1990). In early 2011 the CPython repository moved to Mercurial, which factors in to the tools I was able to use in my spelunking.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
In this talk we'll look at the tools and methods I used in my "archaeology", with a focus on Mercurial and CPython. However, the material should be applicable to most VCSs and most projects.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Talk Outline:</div>
<ol style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: circle; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">What is Code Archaeology? (3 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">motivation (understanding what brought us here)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">why does it matter?</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">The Tools (2 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">VCS</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">mail archives</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Investigating CPython (2 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">CPython resources</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">mercurial repos</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">mail archives</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">The Evolution of a Code Base (3 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">how projects evolve</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examples from CPython</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">The Players (3 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">personalities and community play a part</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examples from CPython</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Preparing to Dive In (3 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">determine what you care about</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">know what to look for (get familiar with the topic)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examples from CPython</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Extracting Timelines (7 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">take a focused approach</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">search permutations on the VCS</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">supplement with other resources</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examples from CPython</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">The Story Behind the Commits (4 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">lingering questions (like "why?!?")</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">searching in the mail archives</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">timeline offers a target</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examples from CPython</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">What Might Have Been (3 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">alternate outcomes mostly fade into obscurity</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">lessons learned from them</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examples from CPython</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">What I learned about the CPython Core Developers (2 min)</li>
</ol>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
For more information go to my <a href="http://ericsnowcurrently.blogspot.com/p/code-archaeology-and-repository.html" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">Code Archaeology and Repository Spelunking</a> page.</div>
</div>
</div>
<div>
<span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"><br /></span></div>
<div>
<h1 style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 25px; font-weight: normal; line-height: 1.4em; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Running Python in Your Browser with Chrome's NativeClient</h1>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Chrome's Native Client has gotten a lot of press in the last year. It's a tool for compiling C/C++ to native code and running it sandboxed in your browser. This is a talk about porting Python to run in the Native Client, and why you'd like that.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Type</b>: Talk</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<a href="http://lackingrhoticity.blogspot.com/" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">Mark Seaborn</a> from the Chromium project has done a lot of work on getting CPython to run inside Chrome's <a href="http://code.google.com/p/nativeclient/" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">Native Client</a>. In this talk we'll look at the work he's done, what's left to do, and how you can help.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
We'll also talk about why Python in the NaCl sandbox matters and we'll wrap up by discussing the idea of PyPy on Native Client.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Talk Outline:</div>
<ol style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: circle; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">What is Native Client? (5 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">virtual machine for C/C++</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">released on Chrome in 2011</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">continued work to port libraries</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">uses Python 2.x for a number of tools</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Porting CPython to Native Client (10 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">initial work by Mark Seaborn (Jun. 2009)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">trouble with <a href="http://code.google.com/p/nativeclient/wiki/DynamicLoadingOptions" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">dynamic linking</a> and build tools (Dec. 2010)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">upcoming dynamic linking support and Python bindings in NaCl</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">current roadblocks and options</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Possibilities with PyPy (15 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">using PyPy's RPython toolchain to port Python to NaCl</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">is a NaCl backend for PyPy pointless?</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">porting the toolchain to NaCl</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examples</li>
</ul>
</li>
</ol>
</div>
</div>
<div>
<span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"><br /></span></div>
<div>
<h1 style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 25px; font-weight: normal; line-height: 1.4em; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Python on Android</h1>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Come learn about the present and future of writing Android apps in Python. We'll cover SL4A and efforts to port both Jython and PyPy.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Type</b>: Talk</div>
<div style="background-attachment: initial; background-clip: initial; background-color: #eae7df; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 24px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
The Android mobile operating system is a great target for developers. However, when you write apps for the dalvik virtual machine, you have to write in Java. Personally, I would rather not. Instead, wouldn't it be nice to write Android apps in Python? This has certainly crossed every Python programmer's mind who has even thought about Android. So what are the options?</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
First of all, in 2008 there was a project called <a href="http://code.google.com/p/jythonroid/" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">jythonroid</a> that tried to port Jython to Android. We'll talk about why it didn't pan out.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Secondly, in 2010 Google released the <a href="http://code.google.com/p/android-scripting/" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">"Scripting Layer for Android" (SL4A) project</a> with Python support; and in 2011 they spun off the Python portion into its own <a href="http://code.google.com/p/python-for-android/" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">project</a>. It's neat to be able to write Python on my phone. We'll talk about why this currently isn't a good solution for writing Android Apps; and what could make it work better (i.e. a tool for building wrappers around SL4A scripts).</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Finally, two of the Python implementations have already been involved in discussions on porting Python to Android: <a href="http://www.jython.org/" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">Jython</a> and <a href="http://morepypy.blogspot.com/2011/01/jit-backend-for-arm-processors.html" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; color: #409cc1; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">PyPy</a>. We'll talk about what happened with past (official) porting efforts for Jython and where efforts are headed for both projects.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
The idea of writing Android apps in Python is both appealing and elusive. It invites your imagination. So, let's tap into that! To wrap up the talk we'll look at what it would be like to write for Android in Python and what you can do to help make that a reality.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
Talk Outline:</div>
<ol style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; list-style-type: circle; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Programming for Android (3 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Java</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Android API</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">an example</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Dalvik is not JVM</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Python on Android: SL4A (6 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">summary</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examples</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">difference from native Android apps</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">why SL4A Isn't Good Enough</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">making it a little better</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Current Efforts in Jython (13 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">jythonroid (2009)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">jython-for-android (2011)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">early optimism (2008/2009)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">hints of Android support for 2.5.1 (2009)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">The challenge of dynamic code generation on Android</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">PBC (Python bytcode) and Java PBC VM</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">performance implications</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examples (theoretical)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">future availability</li>
</ul>
</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Current Efforts in PyPy (8 min)<ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; margin-left: 34px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">acknowledged early (2009)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">JIT backend for ARM (2011)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">examples (theoretical)</li>
<li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">future availability</li>
</ul>
</li>
</ol>
</div>
</div>
<div>
<span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"><br /></span></div>
<div>
<span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"><br /></span></div>Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com0tag:blogger.com,1999:blog-4844592351972048032.post-70065301508997618062011-08-13T23:50:00.000-06:002011-08-14T12:51:22.505-06:00Reining in Unruly SystemsAt work we have a variety of critical systems that have grown pretty organically over the last 15 years. They have all sorts of deficiencies that directly impact maintenance and new releases. Thinking about how to improve the situation, I worked out some major objectives and the steps to get there.<br />
<a name='more'></a><br />
While a lot's been written on the subject and undoubtedly everyone thinks about this stuff, I'm just winging it here; so cut me some slack if any of this seems obvious. If you have any specific suggestions for good reads on this topic, feel free to let me know!<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">We Reap What We Sow</span></b><br />
<br />
Organic growth is sometimes the right thing, particularly if you are just getting started. However, once you get any semblance of size or maturity, your APIs, libraries and systems ought to be pretty solid. For the systems with which I interact at work we no longer have any excuses. Here are some characteristics of the situation:<br />
<br />
* poor documentation,<br />
* terrible API <i>design</i>,<br />
* tight coupling between even disparate components in any given system,<br />
* poor interoperability between systems,<br />
* high dependence on individuals,<br />
* a LOT of duplication of effort,<br />
* focus on systems rather than services,<br />
* weak processes surrounding the management of the systems (especially the release process).<br />
<br />
A few years back we made a push to implement ITIL v3, but we didn't really have any top-level vision on how to accomplish this past our customer support. Poor tool implementation has hampered even that effort. That's a shame because I think ITIL's a great approach that would have put us on the path to recovery.<br />
<br />
Ultimately we are sleeping in a bed that we made for ourselves. We have more problems than just the technical ones, particularly with regard to leadership, communication and accountability; real people problems. So any solution to our trouble will involve more than technology. I could go on and on, but for now I'll just focus on a mostly technical approach.<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>What to Do About It</b></span><br />
<br />
To get out of our mess would would need to get a better understanding of our systems, both internal and external, and how they are used. With that in hand we would build a central system that exposes all the old functionality in a well designed API. At first the API would simply wrap calls to the old system. However, since the new API would be loosely coupled, with high cohesion, we could go component-by-component and slowly replace the old systems as needed. Apparently the timbot agrees with me:<br />
<blockquote>The most successful projects I've seen and been on *did* rewrite all the code routinely, but one subsystem at a time. This happens when you're tempted to add a hack, realize it wouldn't be needed if an entire area were reworked, and mgmt is bright enough to realize that hacks compound in fatal ways over time. The "ain't broke, don't fix" philosophy is a good guide here, provided you've got a very low threshold for insisting "it's broke" <0.4 wink>. </blockquote><blockquote><a href="http://mail.python.org/pipermail/python-dev/2000-October/010108.html">Tim Peters, 25 Oct 2000</a></blockquote><div><br />
</div><div><b>How to Get a Clue</b></div><div><br />
</div><div>So first off we would have to figure out what we already have. I'm not talking about a fine description of inputs and outputs on functions or a breakdown of service level agreements. Rather, we need to get a broad view of <i>all </i>our systems (internal and external): what they are supposed to do, who manages them and especially <i>how they are used</i>. What interfaces do they provide to people? What remote APIs do they expose to the network? How are both of those actually used? We need a high level view of everything.</div><div><br />
</div><div>How would we do this? With hard work! We'd have to talk to <i>everybody </i>to find out what they work on and what systems they know about. We would find out at a high level what they know about the different systems and what those systems do. Then we'd cross-reference everything to make sure the details lines up. The result would be a list of systems with all that detail. </div><div><br />
</div><div>In addition, the whole time we'd have been building a rudimentary tree of classifications for system functionality, and a graph of system interactions. The classifications would likely not correspond to any particular system, but would often overlap across many existing systems. The graph would be a one to many mapping of system to system for the classifications in our hierarchy. At this point we would finish up our initial effort, filling in as much info as we can from the interviews.</div><div><br />
</div><div>Next we would go to all the systems we found and look at their logs to see who/what's accessing them, how, and for what. If the logs don't tell enough we'll have to get creative. This information should be enough to fill in any gaps in our functionality classification hierarchy and our system interaction graph.</div><div><br />
</div><div>Finally, with the hierarchy and the graph, we would design an API that would provide all the same functionality. The classifications hierarchy would map directly to the API components. The guiding principle here would be high cohesion and low coupling. That means it probably won't look at lot like the old systems. And that would be just fine.</div><div><br />
</div><div>Here's a summary of the above process:</div><div><ol><li>Perform interviews</li>
<li>Cross-reference and verify</li>
<li>Compose rough functionality classifications and graph of system interactions</li>
<li>Inspect logs</li>
<li>Finalize the graph of system interactions and validate the classifications</li>
<li>Design an API component/subcomponent per classification/subclassification</li>
</ol></div><div><br />
<b>The New Hotness</b><br />
<br />
So, the effort of getting a clear understanding of our systems is nothing to sneeze at. However, the critical pieces here are the new API and the system that will provide it. That's why I'll spend less words on it. <wink><br />
<br />
The system would have to be kept simple. It's only purpose is to expose the new API. Here's a stab at a feature list:<br />
<br />
<ul><li>fast enough,</li>
<li>load balancing with failover,</li>
<li>one team to be exclusively in charge of the system,</li>
<li>a central access control system,</li>
<li>easy to manage security,</li>
<li>hard to give the wrong person the wrong access,</li>
<li>pluggable API component framework,</li>
<li>easy to build new API components for the system,</li>
<li>easy to install new API components into the system</li>
</ul><div><br />
</div><div>Having completed our new API design and our new API system, we would now get to work implementing the API as pluggable components as wrappers around the old systems. Once those were done and released, we could start looking at rebuilding the functionality of the old systems, one API component at a time.</div><div><br />
</div><div><br />
</div><div><b><span class="Apple-style-span" style="font-size: large;">Conclusion</span></b></div><div><br />
</div><div>Naturally there is a lot more I could have said, but I'll stop here. However, here are some tidbits that I think would be feasible given the above API system:</div><ul><li>With regards to the new API and the API framework, it would probably be best to get in everything that matters, make it work, and then boil it down to trim the fat. Only then release it. It's a lot easier to add on to an API then to take away!</li>
<li>Some systems fill a supporting role to other systems. This includes security, logging and notifications. These supporting systems could be provided special treatment in the API framework such that other API components could more easily plug into them.</li>
<li>Separate instance of the system for our internal systems.</li>
<li>This single system would also host a repo for client libraries to interface with the new API, written for a variety languages.</li>
<li>URLs to the API would look like: https://remote.<company>.com/component/...</li>
<li>For global locations: https://<location>.remote.<company>.com/component/...</li>
<li>A lot could be done to let ITIL drive the efforts, design and API system I have described here.</li>
<li>A separate effort would be to model internal processes in the company and build effective tools around those processes. These would be done as API components for the system. Ideally those processes would be as automated as possible.</li>
</ul>When I get a chance, I'll be following up with a description of a model for modeling systems, services and processes (I like to call it SSP). Stay tuned.</div>Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com0tag:blogger.com,1999:blog-4844592351972048032.post-27610843762135129462011-04-11T16:53:00.000-06:002011-04-11T16:53:10.876-06:00patiencepatience == active waiting<br />
<br />
impatience is a symptom of selfishnessEric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com0tag:blogger.com,1999:blog-4844592351972048032.post-84104072969232946052011-04-11T16:51:00.000-06:002011-04-11T16:51:22.534-06:00TrainingOne thing I've noticed is that most of the behaviors people exhibit either stem from or respond to training. That training takes two forms. First, we get better at stuff by practicing. Secondly, we pick behaviors up by seeing/hearing them.<br />
<br />
Regarding practice, it goes without saying that athletes train rigorously to be the best. Muscle memory facilitates accuracy and consistency. The same goes for behavior in general, and extends to thoughts. The more we do something the better we get. The more we think something the more we believe it.<br />
<br />
That leads into the second form of training, observation. We are social creatures. The more we see others do something, the more prone we are to acquire that behavior. We take advantage of this in education. However, we tend to not realize the effect that television and movies have on us. By watching shows we are practicing the behaviors we see there.<br />
<br />
In both forms we must consider all the influences in our lives. Being in charge of oneself includes being aware of the training we are taking in just by being somewhere. It includes knowing that saying or even just thinking something makes you better at saying or thinking it. If you don't want to get good at saying mean things to people, avoid even thinking mean things.Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com0tag:blogger.com,1999:blog-4844592351972048032.post-60793064267303183822011-04-11T14:52:00.002-06:002011-08-06T17:49:16.220-06:00[idea] Data BubbleThis is an idea I had a year or two ago. Basically take a powerful-enough computer and shrink it down to about the size of a cell phone. Make it really power-efficient. Only put a tiny battery in it (using external battery back for power). Don't put a display on it. Really it would be like a high-end cell phone without a display. People would simply keep it close (belt or whatever) just like they do their phone.<br />
<br />
Have IO be wireless and go over a low-power, high-bandwidth signal that only extends out 3-6 feet (hence the bubble). This should be low enough power that it would not need to be regulated by the FCC. All peripheral functionality would be provided by external devices that communicate via the wireless. This includes touchscreens (ala phones), earpieces, keyboard, mouse. You could even have your watch tie in, or your car, or whatever.<br />
<br />
The point is that you take your computer with you everywhere. The IO spec is open, so anyone can build any kind of peripheral they like. <br />
<br />
Some neat things could happen result from this. For instance, you walk into the range of someone else's data bubble and suddenly you are able to be involved in certain transactions with that person. You sit down at your desk and suddenly your monitor comes to life with the output from your computer that is now in range.Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com0tag:blogger.com,1999:blog-4844592351972048032.post-55962114259116297792011-04-07T14:08:00.001-06:002011-08-06T17:40:58.781-06:00PrioritizingGood or bad?<br />
<br />
In order of priority<br />
1. Do the minimum to make sure your needs are met.<br />
2. Minimize your needs.<br />
3. Get enough understanding of the world around you to make good decisions about your goals.<br />
4. Ensure that your goals are ideal relative to your understanding.<br />
5. Work toward your goals with all your effort.<br />
<br />
needs == requirements<br />
goals == deliverables<br />
<br />
At some point your understanding is good enough (at #3) and you have to act. If you aren't happy with your goals then perhaps your understanding is not good enough and your goal should be to improve your understanding enough to make good enough goals. But as soon as you can make concrete goals that are good enough then move on to #4 and #5.<br />
<br />
For any of the activities, the preceding activities will be happening continually. For instance, as you work on your goals you will still be taking the time to meet your needs. Even more important to recognize, as you work on your goals (and really as you simply live your life) you will be increasing your understanding (#3).<br />
<br />
So as you live your understanding will be increasing and you have to take the time to use that understanding in all your other activities. However, taking care of your needs takes precedence over any active pursuit of understanding. The nice thing is that the more you understand, the more effective you will be at acting within the context of that understanding.Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com0tag:blogger.com,1999:blog-4844592351972048032.post-25186741616384919842011-04-06T14:10:00.000-06:002011-08-06T17:40:58.782-06:00doingThere is great value in understanding the world around us, including how our bodies (and particularly our brains) work. However, the reality of life is that you have to act. <br />
<br />
We live in a dynamic world. We do the best we can to understand it enough to improve our lives, at least most people do. We have to eat, sleep, go to the bathroom, avoid injury, and keep out of the elements. We have to take care of dependents, particularly children. We communicate and interact with others (a major component of our reality, if only a small part of the world we live in). These actions are often driven by impulses in our brains and bodies, and are subject to manipulation by ourselves, others, and our environment.<br />
<br />
Yet, regardless of why we act, reality dictates that we do so. So if we spend all our time growing in understanding, but never finish anything, it seems like we are just throwing away our lives. I suppose there is much to be said for the influence we have on others that then go on to finish things, but I don't have a feel for that idea.<br />
<br />
So is it better to finish something poorly than to not finish it at all? The short term would dictate yes. And business in general struggles to justify focusing on anything but the short term. I understand that. Businesses have to cover their expenses now. I suppose businesses that can accommodate the short term with "good enough", while working toward a [more than abstract] long term (where uncertainty compounds across time into higher risks) are going to find more success. However, I expect that is a hard problem.<br />
<br />
Business drives a lot of what happens in our communities, so the focus on the short term propagates to all of us in communities that are ultimately driven by business or people who live in business. But perhaps we need to work harder on developing strategies for progressing toward concrete long-term targets, while not sacrificing our short-term status.<br />
<br />
Building understanding is great, but periodically you need something to show for it. Hopefully it is something that improves the lives of everyone.Eric Snowhttp://www.blogger.com/profile/08350673518584116742noreply@blogger.com0