Simply Jonathan

Archive for 2007

Monkeypatching Beautiful Soup

Since html2css is built upon Beautiful Soup, it is relatively easy to monkeypatch it. (Especially since there is a shortcut in the code, that lets Soup objects be used directly, achieving greater speed.)

Monkeypatching BS to use html2css is as easy as this:

>>> from beautifulsoup import BeautifulSoup
>>> from html2css import html2css
>>> setattr(BeautifulSoup, 'toCss', lambda soup: html2css(soup).display())
>>> soup = BeautifulSoup('<html id="foo"><body></body></html>')
>>> print soup.toCss()
html {}

body {}

html#foo {}

 html#foo body {}

There you go. (This also illustrates an advantage of Python’s explicit self declaration, in that toCss actually takes an argument (soup), which is then used as a self-declaration, meaning that toCss can be called without arguments — otherwise, it would have been soup.toCss(soup), which really isn’t optimal.)

Karl Marx – Wikiquote 

Permanent location of 'Karl Marx – Wikiquote'

Marx quotes. Great stuff.

Karl Marx quote

“Catch a man a fish, and you can sell it to him. Teach a man to fish, and you ruin a wonderful business opportunity.”

lalit dot lab 

Permanent location of 'lalit dot lab'

Brilliant. Potentially very dangerous, but indeed genious.

Extending classes in Python

I tested today, and found that you can actually extend a class, on itself. Not just by using setattr(), but also by creating a new class:

>>> class bar:
...  def monkey(self):
...   print 'neat'
...
>>> class bar(bar):
...  def horse(self):
...   print 'sweet'
...
>>> bar().monkey()
neat
>>> bar().horse()
sweet

Again, this might be in the manual, I just didn’t know of it until some ten minutes ago.

Rolling Stones – Sweet Neo Con

It’s liberty for all
‘Cause democracy’s our style
Unless you are against us
Then it’s prison without trial.

No /osx/

It worked for Zeldman, so I’ll have a shot: Why isn’t apple.com/osx/ pointing to a relevant page? I mean, sure, apple.com/macosx/ works, but it would make sense that /osx/ did so as well.

But that’s just my opinion.

Placebo – Pure Morning

A friend in need’s a friend indeed,
A friend with weed is better.

html2css

I just started my first project at Google code: html2css, a project I’ve been working on for some weeks now.

html2css has one simple function: Turn an HTML file into a CSS file. This is a functionality I’ve become increasingly aware that I need; I often find myself in a situation where I’ve mocked up the entire HTML document, and then have to perform the tedious task of applying it all in my CSS file, which often leads to a disorganized mess.

It uses the incredible Beautiful Soup library, meaning that it can tolerate even the worst piece of HTML — it manages to produce a valid representation of a Google search.

There are two files of interest in the project (discarding the bundled beautifulsoup.py). The first one is html2css.py where most of the magic happens. The other is writecss.py which is a useful extension of html2css. It allows you to turn your HTML into CSS, respecting earlier generations from html2css. This means you can generate a CSS file for one HTML structure, add some CSS rules, modify the HTML, regenerate the CSS, and your rules will still be present, given that you haven’t modified the element they’re attached to.

This is a 0.1 release, but it should be pretty stable. Comments appreciated.

System of a Down – P.L.U.C.K.

Revolution, the only solution.

This is Simply Jonathan, a blog written by Jonathan Holst. It's mostly about technical topics (and mainly the Web at that), but an occasional post on clothing, sports, and general personal life topics can be found.

Jonathan Holst is a programmer, language enthusiast, sports fan, and appreciator of good design, living in Copenhagen, Denmark, Europe. He is also someone pretentious enough to call himself the 'author' of a blog. And talk about himself in the third person.