2008

2007

2006

2005

2004

Bitbucket has a new issue tracker

▁ aug 07 2008

Read more about it on the Bitbucket blog

After the years of hassling with the BTS at Opera (any Operan will know what I’m talking about), we’ve managed to get some good issue tracking going on Bitbucket, we think. Go check it out.

. o .

Proofreading

▁ jul 31 2008

Just thought I’d give a heads-up to anyone needing a proofreader. I’ve been relying on Barbara from Maple Proofreading for several projects and papers, and I’m very pleased with her work. Rates are very reasonable too.

As the name suggests, she’s Canadian, and for English, it’s always best with a native speaker.

. o .

It's about how you make people feel

▁ jul 28 2008

(Suggested listening music: Philip Glass - Metamorphosis #2)

Recently I’ve been passively analyzing memorable events in my life. I’m not sure what made these specifically stick, but they did. And I’m glad they did; they’ve helped me reach some conclusions now, which to me is an important life lesson, and I’d like to share it with others.

I used to live with a friend of mine, 5 years ago. He’s still a good friend. Hell, those were some of the best years of my life. We lived in a 1 bedroom apartment, where the living room served as my room, and the bedroom was his. We both worked from home for the same company, and we’d spend most of our days just at home. In the spare time, he would download shows for us to watch; we were specifically fond of a show called Scrubs, and we used to have dinner while watching it. The show made me laugh. And my friend would get more, and we would watch it to no end. Thinking back, I remember sensing a certain “satisfaction” radiating from my friend when we watched it. It was almost as if he did it for me. I didn’t give it much thought then.

I have another friend. He’s quite an interesting person. What’s interesting about him is that everybody seems to like him. I like him, a lot. But why? He’s a pretty normal guy, living with his girlfriend and dog. One of the things people like about him, I’ve come to realize, is how he makes them feel. This guy can make you feel good about anything, he’s incredibly agreeing and understanding, and being around him really makes you feel accepted and approved of.

A while ago, out of context, I asked him how he can be like that. He said that he had come to realize that it was not worth worrying about things in life that you couldn’t change. He would smile and laugh with everything, it was just easier that way.

I grew up in a relatively small city, stores closed at the same time, no 7-11’s, and people knew each other. Like many of my fellow nerds, I’m sure, I never felt like the city was for me, and my interests also made it hard to fit in. I didn’t care much about soccer or pop-music, so I guess you could say I was kind of an outsider. I left that city, the country even, early in life, when I moved to Norway to work for Opera, at the age of 18.

Opera—wow! It was a whole company with people just like me. This is also where I met my ubiquitously liked friend mentioned earlier. Now, the culture at Opera was really something. You didn’t need friends outside the company, you had about 350 people there who had the same history as you, and they were all there for the same reason. This was the first time in life I could really relax and be myself. It was an amazing feeling to be around your peers, doing what you loved to do for a living, not having to pretend. I felt really good about myself.

I met my girlfriend there as well. She wasn’t a programmer or even a techie, but there was something about her. Maybe working for this company for years had made her see a different kind of person in us nerds. There aren’t that many women at Opera, and to find one within the company who liked me for who I was, was a one in a million chance, and I’ll be eternally grateful for meeting her. She has no doubt helped me become a better person and learn valuable lessons in life, such as this one.

Like a lot of people who are tired of pretending, I’d imagine, in high-school I made a drastic decision. It went something like this: I’m done pretending. I don’t give a sh*t if people like me or not anymore, I’m going to be myself and the ones who can take it, will probably stick around. This was my mantra for years, and it became largely redundant when I found my peers in Norway. Rather extreme, if I think back, but… helpful. Educating. And as you might imagine, this left me with very little friends.

Some people strive to gain approval of others. Many people are afraid that others won’t like them, and they put up a facade they think others will like. Like the other extreme, this will leave you with very little friends. Friends who truly know you, and accept you for who you are. You might have more acquaintances, but.. Yeah. It’s not real.

Then there’s the confident people who speak their mind and don’t give much priority to making other feel good about themselves. Because they already feel good about themselves by themselves, they don’t need to wear any masks to make others approve of them.

No, this is where I think the life lesson is. I think if you can truly be comfortable with yourself and be “self-sufficient”, then you can begin to make others feel good about themselves, for the purpose of just that. No ulterior motive, no insecurities, no candywrapping, just.. kindness. It’s about helping the ones you care about feel accepted and loved. It’s about putting other peoples feelings before your own, because you want to, for all the right reasons. It’s about being a good person.

It’s about how you make people feel.

. o .

Dexter S03 Teaser

▁ jul 27 2008

I’m a big fan of Dexter, but this trailer doesn’t really do it for me. Please don’t let season 3 be some forced crap due to its success. There were originally two books written, for the first two seasons, and I have a feeling that the third was hastily written per demand rather than anything else.

. o .

S3 is down

▁ jul 20 2008

…as you might’ve heard. I was trying to toss some deltas on there earlier for Bitbucket, but got various internal server errors and what-not; I ended up blaming Net::Amazon::S3. Alas, I’m glad they were down, now I don’t have to worry about downtime for my backups.

. o .

Linus is a git

▁ jul 16 2008
. o .

Bitbucket

▁ jul 12 2008

Today I’m announcing Bitbucket. What is it? It’s a hosting service for Mercurial, which is a DVCS, much like Git or Bazaar.

What does it do? It hosts your mercurial project with,

  • A simple, yet powerful web interface
  • Access control, multiple readers and writers
  • Push/pull over HTTP(s) and SSH
  • Issue tracker
  • Social aspect (following users/repos, events, etc.)
  • Supports OpenID
  • and more…

There are plans for all needs, and a very generous free plan, so you can go right ahead and get started.

This is the project I’ve been working on for the past couple of months, together with my good friend Eirik Stavem, who’s in charge of all things interface and quality control.

http://bitbucket.org/

Any feedback is much appreciated!

. o .

Holy bonkers Batman, ICFP 2008

▁ jul 12 2008

Every year the ICFP issue a programmatic challenge online, usually with some kind of prize involved. Last year it was something about recovering lost artifacts in a JPEG image, interesting and all, but won’t really benefit humanity (much).

This year, the challenge is about real-time control software for a space rover, and I quote:

We are pleased to announce that this year’s winning entry will in fact be used to control the rover on NASA’s very next mission to Mars!

So, crack this one, and you’d be able to write “Wrote the software for the Mars rover” in your resume.

Full description is here.

. o .

Closeup Pussy

▁ jul 10 2008

Merlin

IMG_2845

. o .

Greece

▁ jul 09 2008

I’m going there. Soon, anyway, to meet the in-laws, for the first time, in, uh, 4 years. Exciting!

I must wear this t-shirt:

Greek Mixology

Oh, and an unfortunate domain name: http://www.rim.jobs.

. o .

On Day Care, Google Makes a Rare Fumble

▁ jul 05 2008
. o .

Vacation

▁ jun 18 2008

Since I probably forgot to tell everybody I usually talk to, I’m off on vacation today. Taking trip from Amsterdam -> Copenhagen -> Oslo. Will be back Sunday.

Oh, and I hate early flights.

. o .

Flash Memory

▁ jun 07 2008
. o .

The IT of CSI

▁ jun 01 2008

Usually CSI manages to get its IT-stuff kind-of correct. That’s until I spotted this on reddit:

. o .

GG NO RE

▁ may 31 2008

This is absolutely hilarious. A very excited australian is doing a commentary on a Starcraft replay.

. o .

Online music store Lala hacked

▁ may 28 2008

Recently launched(?) music store Lala.com has been hacked. No, nobody broke into their servers or did any fancy-schmancy SQL injection, someone just figured out a clever way to trick their system into delivering data they would otherwise make money of.

Once again, Slashdot is home to malicious code. Posted by Anonymous Coward, there’s a full perl script that will let you not only search their list of songs from your terminal, but it also constructs the full URL to download it. For free.

An anonymous tip confirms that it works. Just kidding, it was me.

. o .

OpenID theft

▁ may 28 2008
. o .

libmemcache

▁ may 26 2008

When was the last time you compiled this? Never? Well then you missed this:

memcache.c:45:2: warning: #warning "Working around busted-ass Linux header include problems: use FreeBSD instead"
memcache.c:46:2: warning: #warning "http://www.FreeBSD.org/ - you won't regret it"
. o .

OLPC's what?!

▁ may 18 2008

In fact, I quit when Nicholas told me — and not just me — that learning was never part of the mission. The mission was, in his mind, always getting as many laptops as possible out there; to say anything about learning would be presumptuous, and so he doesn’t want OLPC to have a software team, a hardware team, or a deployment team going forward.

In reality, Nicholas wants to ship plain XP desktops. He’s told me so. That he might possibly fund a Sugar effort to the side and pay lip service to the notion of its “availability” as an option to purchasing countries is at best a tepid effort to avert a PR disaster.

I really feel bad for all the people who purchased the OLPC, not only as a neat thing to play with, but more so a charitable act (for each one bought, they give one away to a child in need.) I don’t really know what to say. It was an admirable effort, and something obviously went wrong along the way. Negroponte on my list of people to murder on sight? Check.

Read the full essay

. o .

"Java haters, gtfo"

▁ may 18 2008

“So really, all you dynamic language freaks, all you closure nazis, with your fancy scripts and your typeless nirvana, how fucking hard can it be to get the fuck out of our world, and go try and get a job doing what you asshats actually WANT to do? If your life is so great, why the fuck must you CONSTANTLY hassle us and shit in our coffee?”

Fun, I was never fond of Java for various reasons, but at least I don’t consider myself one that aimlessly disregard Java’s place in todays software engineering.

Read the whole thing

. o .

Easy PB&J Jar

▁ may 16 2008
. o .

Safari Carpet Bombing

▁ may 15 2008
. o .

Arrested Development

▁ may 15 2008
. o .

Thorough introduction to DVCS

▁ may 08 2008
. o .

MySQL: Touche

▁ may 07 2008
. o .

Clarke's Third Law...

▁ may 06 2008

…goes: Any sufficiently advanced technology is indistinguishable from magic. source. He’s dead, by the way. Recently, too.

Yes, so, I’ve kept this quote in the back of my mind for a while now, and I wanted to break it out on a worthy occasion. It’s arguable whether this is that occasion. I’m not sure.

Undoubtably you’ve heard about Amazon S3, or Simple Storage Service. If you haven’t, here’s a sufficient summary:

  • They let you store infinite data
  • They’re always up (well almost)
  • It costs, like, nothing.

People have done several cool things with this, I’m sure you can imagine a few.

One of the things this made possible, was a “virtual file system” via FUSE in the Linux kernel. This means you can have a mount point on your computer that reads and writes directly from S3. So you got infinite storage. Cool, eh? You’re limited to transfer speed, of course, but that’s in the details.

At first, I tried s3fs (courtesy of Google), and it does the job. Horrendously slow, too. Which, makes sense too, if you think about it, kinda. When you write ls it has to connect to S3, get a dir listing, and present it to you. For each operation, it has to connect to S3. Or, well, theoretically. What you can do, and what something like Brackup does, is to use an inventory file. Kind of a “manifest” of who’s on the plane, so to speak.

I haven’t looked in any kind of implementation details, but I’d imagine this is what PersistentFS does. I jacked in to the raw S3, and checked out the files, and they’re divided/sharded in a very non-obvious way. s3fs on the other hand, would just store it verbatim.

Wait, the impact didn’t come across strongly enough there. Lets try again: PersistentFS! Besides the fact that their website marginally resembles that of MSDN a few years back (I think I even saw it on OSWD), their solution is pure-breed magic. It’s fast like a race horse just after it had its vitamins and all your files are right there when you remount it. It’s truly indistinguishable from the black arts.

Don’t go and ruin it by commenting on how it probably has some kind of smart caching going on, just let me enjoy it for a while. Heck, go try it yourself. It’s a lot of fun, if you’re a nerd. Excellent piece of engineering.

. o .

Down for everyone or just me?

▁ may 06 2008
. o .

The best thing since the MacGyver Mythbusters Special

▁ may 04 2008

The fuckin’ MacGyver movie!

Nuff’ said.

And don’t you dare saying anything about Mr. Anderson’s age, Vesty is sixty-fucking-one and he just did a very successful feature film.

*Goes into convulsions mumbling “oh my god” repeatedly*

. o .

Mondrian, Guido's code review tool

▁ may 03 2008

A couple of days ago, Guido posted to the py3k mailinglist about the code review tool that was showed off back in 2006.

Guido being patriotic Dutch named the tool after Dutch painter Piet Mondrian (Cheese Shop, anyone?)

The version he wrote for the G-men has apparently become so integrated with their own infrastructure, so he has written a version in Django that we can all see.

http://codereview.appspot.com/

. o .

Carnivale Score, or beautiful classical music

▁ may 02 2008

Did you happen to catch Carnivale?

Carnivale Soundtrack

The effers over at HBO canceled the show after season 2. They’re in the habit of that, unfortunately.

When watching the season finale (last episode) of season 2, some music played towards the end really caught my attention. The kind of stunningly beautiful classical music that leaves you speechless.

Today I remembered this while having a conversation about the show, and set out to find the track, without being too hopeful. These things are usually composed by people working for the show or the station, and they are usually not released. Even if they are, they’re more often than not really hard to get a hold of.

I have a new hero: Jeff Beal - He also did the score for Rome, Ugly Betty (???) and Monk (remember that show?) — somewhat inconsistent, but hey.

The entire score is freely available on his site!

This piece is breathtaking. Go listen.

Apropos, my good friend Eirik Stavem is still looking for an ID on this track.

. o .

Suds, or: How I stopped worrying and love^Haccept SOAP

▁ may 02 2008

SOAP.. Where do I begin. Citing Wikipedia yields an attempt as good as any:

SOAP once stood for ‘Simple Object Access Protocol’ but this acronym was dropped with Version 1.2 of the standard, as it was considered to be misleading.

If you have ever used SOAP, you will appreciate the misnomer. SOAP is anything but simple, especially down at the very core. It’s meant to be a thing in between CORBA and XML-RPC — not quite as ambitious as the first, not as basic as the latter.

Ideally, SOAP is not so bad. It’s a way to communicate between services, despite of the language they happen to be written in. All communication is happening over a well-tested protocol, and there’s even this cool thing called a WSDL that describes what methods are available (introspection for you RPC people), and allows for definition of entirely arbitrary data types (as long as they are constructed of XSD primitives.)

As SOAP was very early on backed by Microsoft, they are also one of the most thorough adopters. In the .NET framework, there is excellent support for SOAP, and if you’ve ever had to cooperate with a service provided by another company using .NET technology, chances are you’ve had your hands in the SOAP.

So what’s the problem?

In my line of work, and I know I’m not alone in this, we prefer to use open source tools and languages such as Perl, Python and Ruby. While I cannot speak on behalf of the Rubies, I can with much despair say that SOAP is not exactly well represented in neither Perl or Python [A quick Google search reveals that Ruby has support for SOAP at the very core. Good for them.]

Perl has SOAP.pm — it hasn’t been updated since September 2000; SOAP went from draft to “W3C Recommendation” in 2003. I have not undertaken any large endeavors in this personally, but there has been much frustration among former coworkers.

In Python, you have several options. The major players are SOAPpy, ZSI and soaplib, the last one being fairly recent, in my experience is not very mature, and development seems to have come to a halt. Besides, as with ZSI, generating code from a given WSDL is not the way to go, IMHO.

Even in Mark Pilgrim’s book on Python, the chapter on SOAP uses SOAPpy. Unfortunately the simple example on that page does not adequately express the poor API you are given.

Enter suds. This small ambitious project came out of necessity. Spearheaded by Jeff Ortel from Redhat, this project approaches the problem in a way I feel is “right”. There is no code generation, or other “patch” solutions like that. It takes a WSDL, gives you everything you need from that, and behaves as smooth as XML-RPC, without imposing the verbose overhead on you, the developer.

Personally I’ve been following the project closely over the past weeks, and even contributed a few patches. A client has hired me/us for an assignment heavily involving SOAP, and so far it has been smooth sailing with suds. As with any new technology, especially as rumored as this one, the approach has been cautious. Slowly we’ve put down our guards, and started to embrace it.

Does SOAP deserve a place in our hearts? No. I still don’t like it, it feels like foreign territory and is under-represented in even the most mature of development environments — it’s still a painful beast.

But at least now it hurts a little less.

Link again.

. o .

Frustration, thy name is iSolitaire

▁ apr 30 2008

As per this,

iSolataire is a game for the iPhone/iPod Touch. I must’ve been playing ~50 games by now, and haven’t won a single one. I have decided that this game is unbeatable and that this is a hoax designed to delude you into thinking you can win. Which you can’t. Ever. ‘Kay?

*sigh*.

The thing about this one is that it won’t allow you to ever turn all the cards. Especially towards the right, at least 3 or 4 of the cards will always remain unturned. It happily gives you all the aces, but it always keeps back the 2 in one of the colors, so you can’t go a go-home-rampage to try and mix and match. Or it’ll keep at least one king out of your reach.

If anyone has beat this, let me know.

. o .

Microsoft hands law-enforcement the key to the city

▁ apr 29 2008

Where by “city” I mean the computers of everybody running Windows.

Feel free to to post the CPIO when it’s leaked in the comments here.

Link - no “via” as this is something you can comment on.

. o .

What I'd look like if I was in Southpark

▁ apr 28 2008

Like this, apparently:

jesper-sp.png

. o .

Impressive Canvas

▁ apr 27 2008

Mathieu Henri, or p01 as he prefers, has done something really impressive with javascript and canvas.

Check it out here.

If you don’t see anything fancy, try another browser, like Opera 9.5 or the latest Firefox. It doesn’t work in Safari 3.1 for me.

I worked with Mathieu at Opera for a bit over a year, and even though he’s absolutely terrible at tabletennis, he’s pretty awesome at graphics and demos.

. o .

Robert Zubek: Clojure webserver in sub-hundred LOC

▁ apr 27 2008

Robert Zubek wrote a blogpost on how to write a webserver in Clojure in less than 100 lines of code. Interestingly, he uses Jetty for the actual serving part — interesting because Clojure has an excellent bridge to Java (as it runs on the JVM itself.)

It’s nice to see how you can tie in a Lisp-1 with something as shoddy and sordid as Java itself, and still keep it somewhat elegant.

You have to admit this is darn cute:

user=> (import '(org.mortbay.jetty Server))
nil
user=> (new Server)
Server@1f0f8ff
user=>

Clojure was previously mentioned here.

. o .

Obscure reference

▁ apr 25 2008

From Adium:

10:57 Vetle
you made me google for "wesley snipes house boat"

Obscure reference

3 comments — category: reference
. o .

Pretty cool django app: django-photologue

▁ apr 25 2008

There are a lot of promising Django applications surfacing lately. I think there’s even a site where they group ‘em all. There are some for tagging things, some for communities, and some for images. Specifically the lovely django-photologue.

Citing the source:

Photologue is a Django application, more specifically, it’s a complete image management solution for your Django site. Photologue replaces the ImageField in Django with a powerful system that supports resizing and image effects as well as providing a turn-key photo gallery solution. Photologue embraces the Django admin and smoothly integrates with photo thumbnails and effect previews.

I found myself writing a bunch of code the other day, hooking up signals to a Photo model, creating thumbnails when images were uploaded and what-not. It worked, sorta, kinda, until it broke today. Thankfully it wasn’t live. Anyway, so I google for “django photo resize” to see if someone has simplified the process (by subclassing a model or a field, e.g.), and lo and behold, up comes this photologue thingie.

Now I’m usually the biggest skeptic when it comes to out-of-the-box-just-works code stuff (I’m looking in your direction, RoR-camp. Phooey.) Couldn’t hurt to give it a whirl, though. Guess what, it turned out to be pretty cool.

photologue comes with some flimsy-dimsy automagic gallery stuff, and has its own urlmappings. I don’t want those, and I was a little scared that they would be hard to cut from the core. They weren’t. I easily integrated it into my already running app, without using any of its functionality beyond image resizing, pre-caching and some image enhancements (which is brilliant, wish I had thought of it.)

There were a few bugs, but I found a way to work around them, and since only I will be adjusting the settings, that’s OK. It’s developed by one guy, and it’s just in 1.0b now, so I’m sure it has a bright future.

If you’re doing any kind of photo/gallery/resize in Django, photologue is highly recommended.

. o .

Another vile bug report

▁ apr 24 2008

Continuing todays earlier mention of a somewhat disturbing bug report, this one takes the cake.

Scroll towards to the bottom for full effect. Ouch.

. o .

"Insulting source code"

▁ apr 24 2008
===================================================================
--- player.py (Revision 4026)
+++ player.py (Revision 4027)
@@ -287,7 +287,9 @@

  def init(pipeline, librarian):
      gst.debug_set_default_threshold(gst.LEVEL_ERROR)
 - if gst.element_make_from_uri(gst.URI_SRC, "file://", ""):
 + if gst.element_make_from_uri(
 + gst.URI_SRC,
 + "file:///Sebastian/Droge/please/choke/on/a/bucket/of/cocks", ""):
          global playlist
          playlist = PlaylistPlayer(pipeline or "gconfaudiosink",
 librarian)
          return playlist
 daniel@bert:~/1/quodlibet-1.x$ svn log -r 4026:4027
 ------------------------------------------------------------------------
 r4027 | piman | 2007-04-27 05:17:05 +0200 (Fr, 27 Apr 2007) | 1 line

 player.init: Give a fake filename to trick GStreamer 0.10.12's filesrc.
 ------------------------------------------------------------------------

Woah.

Bug report here.

. o .

Closing MySQL: Marten Mickos Responds

▁ apr 24 2008
. o .

Optimus Maximus keyboards - out now, costs more than your car

▁ apr 23 2008

OK, maybe not, but remember those shiny keyboards that were debated to death the past 2-3 years? The one with the OLED keys? Well it was rumored to arrive Real Soon Now for years, and now it’s finally here. It’s by those darn Russians, Art Lebedev, too!

Oh yeah, and it’s $1600. Yep. It is cool, though.

$1600

Buy it here.

. o .

Desperate business idea of the day

▁ apr 21 2008
  1. Make an identical copy of Donkey Kong (the game), but replace the monkey with a donkey.
  2. Call the game Monkey Kong.
  3. Stand back and let your consumers appreciate the irony.
  4. ???
  5. Profit!
. o .

MySQL closing some of its doors

▁ apr 17 2008

MySQL will start offering some features (specifically ones related to online backups) only in MySQL Enterprise. This represents a substantive change to their development model — previously they have been developing features in both MySQL Community and MySQL Enterprise. However, with a shift to offering some features only in MySQL Enterprise, this means a shift to development of those features occurring (and thus code being tested) only in MySQL Enterprise.

(Shameless citation from jcole.us)

Hm. When Sun first bought MySQL, most of us thought that was a Good Thing™ — apparently not so much. This seems to be the old story retold; A friendly company with a good track record, doing things mainly open source, gets acquired by a larger company with intentions of monetizing it. Bad Sun. Bad.

Oracle bought Innobase a couple of years ago, effectively taking over ownership of the InnoDB storage engine (the only real engine in MySQL supporting near-ACID capabilities). This had all of us trembling in our shorts, I suppose the somewhat seamless non-evil merger back then had us more calm this time.

I wonder how long it will be before the LAMP stack will go out of fashion. I remember the days where web development meant mastering PHP and phpMyAdmin. *shudder*.

Seems like my earlier post, Migrating from MySQL to PostgreSQL, will come in handy.

3 comments — category: databases
. o .

Our eco system rocks!

▁ apr 17 2008

In case you haven’t seen it yet, I feel it necessary to direct your devout attention to this:

Even though it’s (hopefully) fake, I still wonder who took the time to make this.

(With thanks to Brad Choate)

. o .

App Engine ported to EC2

▁ apr 16 2008
. o .

On Clojure (and concurrency in general)

▁ apr 15 2008

I just finished watching Clojure Concurrency, a presentation given by the ever-talented Rich Hickey. It’s almost 2 hours, so don’t just watch it if you’re bored.

Now Rich is a really smart guy. He does a talk on this language he wrote called Clojure (pronounced ‘closure’), which is a Lisp-1 running on top of the JVM. I had previously spotted this some time ago on proggit, but it was still in a very early stage (pre-alpha), and I was more infatuated with Erlang at the moment, while reading Armstrong’s Programming Erlang: Software for a Concurrent World.

Concurrency is a very hot topic these days. The big-shots say it’s a new paradigm, and I’m with them on that one. Well, sorta. In his talk, Rich says at one point that “we’ve been doing it wrong.” If you ever tried creating a multithreaded application, ending up in a living hell acquiring locks and having more mutex’es than normal variables, you know the problem at hand.

The “new” proposed way of doing things, tie in directly with the also-hyped functional languages (I’m sure you’ve seen Haskell or F# mentioned, no?) — the gist of this being immutability. That’s a big word that just means “you can’t change it.” Once you’ve assigned a value to something, you can’t change it. There’s a section in the aforementioned video that talks about “Persistent Datastructures” which offers some great insight on how this works beyond simple strings or integers (but on stuff like vectors or hashes.) Once you take the mutable part out of the equation, there’s no need to lock anything. You still need transactions every once in a while, but we’ve been using those in databases for years, so they’re not so scary anymore.

Clojure does not yet have a “platform” for seamlessly distributing computing over a network (only via threads running on the CPU, running on your OS, like Haskell), unlike Erlang who offers “green threads”—that is, threads running in the VM, and not on the operating system. This allows for creating and communicating between threads while keeping it extremely cheap. While it may be argued that distributed computing over a network right in the VM is pretty cool, it might not be a very good indicator when choosing your next programming language.

If you want to read more about concurrency and the languages prevailing on the subject these days, I suggest you read Concurrency (computer science) - Wikipedia, the free encyclopedia) which debates the infamous “Dining Philosophers” problem, and definitely Joe Armstrong’s essay “Concurrency is easy”.

. o .

More App Engine stuff

▁ apr 14 2008

Todays word is “Bum Rush”.

The act of attacking someone or something (usually by a group) with the reckless abandon and fervor of one who has nothing to loose.

The children bum rushed the home baked cookies as they were brought out.

or

The kids bum rushed double-G with “feature requests” the second it came out.

Earlier today I had a few minutes to kill, and I figured the App Engine issue tracker would be a great source of amusement.

There’s plenty more.

In other news, gu...@python.org (fijne dag, Guido!) has commented on the continuing issue of breaking urllib/urllib2 in the SDK, as discussed earlier. If anyone has the time and is in the know on how to implement this properly, go do it.

. o .

Office 2008 invaluable feature

▁ apr 10 2008

“Dude, check out this call I just found in the Cocoa animation API”

“It’s, like, a ripple. Woah. Show the project manager!”

“I did, he pre-approved it already.”

. o .

Stupid Programming Tricks: Abusing Exceptions

▁ apr 10 2008

So I’m reading The Daily WTF and they have this horror story. I’m paraphrasing in pseudocode:

if not customer.isActive():
    throw RedirectException("/support/accountdisabled/")
else if ...

OK, see, what happens here is that the programmer raises an exception to control the flow of the code. Exceptions are meant to be errors and shit like that.

“This is not really a big deal,” I think to myself. Go through the comments, and people are in shock and awe. Uh. Let me explain to you why this has absolute merit and why I do this myself several times a day.

When you return something from your method, that obviously gets returned to whatever was calling you. Crucial piece of programming logic, there. Well, what if I’m building a web framework where I have some code sitting in my core to handle headers and what-not, and to deal with actual content and requests, I outsource that to, like, handlers, that the developer can write, if they use my awesome framework. Now if I want to redirect, I have to return a special object back from my handler, call it HttpRedirect, or something.

Now this is where “correct code” really steals my peach. Say that I do some elaborate magic in my handlers, and the redirection might—in fact—be handled by another method called by my handler. What then? “Oh, just return the result of the call to that method,” you say. Like this:

function myhandler():
    return somefunc_thatmightreturnaredir()

O…kay. Uh. Well. I guess I have to make sure that somefunc_ doesn’t .. wait, no. I don’t want to return if it’s not a redirect. So lets just check whether the type of the returned value is a HttpRedirect! Well, what if somefunc_ calls another method that might potentially redirect? Then I have to move all my logic into somefunc_ as well, right? Or do a return-loop all through that flow, and I basically end up moving the step up one from the core web framework to my own handler. I guess you could quickly whip up a method named maybeRedirectIfReturnValueFromTheThingIJustCalledHasTheCorrectType and reuse this throughout your code, but that’s just fucking stupid.

What if my web framework comes with some authentication kit you can use, and this framework happens to do some redirection on its own? If this is not the correct behavior for your app and you want to intercept it, you’re out of luck.

You startin’ to see where I’m getting at?

Here’s the stupid programming trick: Exceptions are like a chain reaction. They burn through the fuse you’ve laid out through all your method calls and your code has every opportunity to catch it before it reaches the gunpowder barrel and your program explodes—it raises an exception and displays that to the user, or something. Not what you want, anyway.

Now why is this so god damn immensely useful to you as a programmer? Because you don’t have to return-link anything, no race conditions, no repetitive logic throughout your code.

In my example from before, in my core web framework, I’d simply do this:

try:
    result = handler(request)
    print result
except HttpRredirect, redir:
    print "Location:", redir.url

Cool, eh? This is more stable functionality in your app than any kind of return-linking, type-checking hell you can come up with. I do this all the fucking time, and it works really well.

Oh, this is common practice in CherryPy and you should also read Pylons FAQ: Why do redirect_to and abort raise exceptions, instead of returning a Response?.

But then that’s just me. What about you, do you think exceptions have legitimate use outside traditional error handling?

. o .

Joyeur: Joyent's Garden of Eden for Python Web Applications

▁ apr 09 2008
. o .

suds 0.1.7

▁ apr 09 2008
. o .

On App Engines custom HTTP implementation

▁ apr 09 2008

James from B-List writes:

I understand that they need to sandbox things for safety, but cutting off the standard Python modules for doing URL retriveal and speaking HTTP throws out an unbelievably large amount of software that you’ll now either have to rewrite or fork:

  • Want to use Akismet to filter spam submissions? Better come up with a wrapper that uses Google’s fetch API.
  • Want to sync to popular services like Flickr or del.icio.us? Yup, gonna have to put that together yourself.
  • Want to use the API of the hot new Web 2.0 property? You guessed it: existing Python wrappers aren’t going to work.

The list just goes on and on; all this stuff needs to either be rewritten to use Google’s API, or needs to be forked and patched. And it seems you can just forget about anything that isn’t doing HTTP. And that’s just the tip of the iceberg: it looks like a simply vast amount of useful Python software is going to be verboten on App Engine.

I must say that I agree with James (and the rest of the community) on this one; the decision to to cripple Pythons stdlib is half-baked. Hey, G-Men, you do realize that most of Pythons library is written in… Python? Instead of providing your own from google.half.baked.solution import handicap, write your own version of urllib/urllib2. Whatever magic you had in your own solution, you can move to there.

Ramin has posted a bug report on this very issue.

. o .

First roundup of the double-G paranoia

▁ apr 08 2008

Speaking of which, I love SafariStand‘s “Copy Link as Markdown”-feature more than buttered pancakes.

markdownme-20080320-150922.png

. o .

Book of Shadows

▁ apr 08 2008

Or..? I don’t know. I got this lovely journal as a delayed birthday present.

il_430xN.22608510.jpg

Looks like something out of Pirates of the Caribbean, doesn’t it? Not really sure what to write in there; seems kind of a waste to keep my TODO- or shopping lists in it. Maybe I can rent it out as a movie prop, this is the kind of place you’d expect to find a an evil spell or whatever’d make you gasp.

More pictures from lapaperie.

. o .

Opera BTS, bug 320859

▁ apr 08 2008

Let it be clear as day that I did not report this, I’m merely re-posting it for you people without access to the Opera bug tracker.

Bug 320859 Reported: 2008-04-01 13:52:14, author censored

In order to remain competitive in the browser market, it is necessary that we provide webmasters with extra features unavailable in other browsers. It is true that we offer nearly complete support for <blink> and <marquee>, but neither of these offers features that make Opera unique.

We should offer proprietary extensions to the <blink> tag, which currently offers way too few parameters. Here are the proposed extensions…

The first issue with <blink> is that it does not provide the flexibility that <marquee> does in terms of timing, events, etc. Here are some attributes to alleviate that:

  • INTERVAL: Control the blinking interval
  • TRUESPEED: Actually control the blinking interval
  • ONBLINK/ONUNBLINK: Events that fire when the text is made visible/invisible

One issue with <blink> is accessibility. Webmasters may be concerned that it is difficult to convey the semantic meaning of the <blink> tag to users with low or no vision. These attributes allow webmasters to make <blink> more accessible to those users by providing enhanced audio/visual cues to the blinking behavior:

  • STROBE: Make the entire screen flash the text in 72 point font, 60 times a second
  • BGSOUND: Play a sound each time the text blinks
  • ONPIEZO: Plays a beep (using the PC speaker) at a specified frequency (Hz) when the text is visible
  • OFFPIEZO: Plays a beep at the specified frequency (Hz) when the text is no longer visible
  • GLITTER: Prints the text using glitter on future printers that may have this useful capability

It is critical that the underlying semantic content of these attributes be conveyed to users of browsers that do not support these extensions to the <blink> element. For this reason, we will introduce a <noblink> element to provide fallback content, like this: <noblink>Please blink your eyes at 23Hz while loudly singing “Never Gonna Give You Up” by Rick Astley when reading the following text: </noblink><blink interval="23" bgsound="rickroll.wav"><font size="100" color="blue"><b><i><u>NEVER GONNA GIVE YOU UP, NEVER GONNA LET YOU DOWN, NEVER GONNA RUN AROUND, AND DESERT YOU!!!<marquee></u></marquee></b></blink></i> This way, users of other browsers won’t be missing any important content.

The funny thing is that in my blogging client (MarsEdit), the damn thing is actually marquee’ing a rickroll on me.

. o .

Double-G reinvents Django/RoR/Pylons/ORM

▁ apr 08 2008

Google has released App Engine. They have a video too (TextMate gets some free advertisement, like in the infamous RoR videos.)

gql.png

At first, I lol’d. GQL? Come on. But then I read the documentation. It has some fancy ANCESTOR IS stuff, so it would appear as if they’re actually using Bigtable for this; that also explains the seamless schema evolution they do in the video.

I didn’t make the first 10,000 signups, so I’ll have to wait and see how it is. They say that you can deploy your app with almost any Python framework, and they even include Django 0.96.1 in the SDK, so that’s pretty awesome. I hope they allow you to use SQLAlchemy or any of the other big ORMs that people have come to love these days. It shouldn’t be any harder than adding a Bigtable backend (bigtable://?). HDFS wold be cool here too, guys. Hint.

What App Engine needs for my further praise:

  • Ability to deploy on your own domain (perhaps via CNAME DNS, like they are doing with enterprise hosted email on gmail?) — It might even add credibility to your product if you’re obviously hosted by the big G.
  • Openness. So far it sounds really cool, with the “almost any framework” and all that.
  • Some kind of clever deployment. For now it seems to be using appcfg to package up your code and ship it over. Perhaps some kind of clever SCM-integration? Tag something for release and tell appcfg to deploy that tag? Forcing people to use SCM is not bad practice either, IMHO.

Personally, I’m very happy to see the continued adoption of Python and all things pythonic. Several other players on the market has gotten all the attention, but I feel times are a’changin’.

. o .

Why I hate the Ruby folks

▁ apr 03 2008

First of, I don’t consider myself a bigot. I have a fine habit of evaluating my tools before I choose them. As of this morning, the Rails camp have chosen Git as their SCM. Now there’s nothing wrong with this choice on its own, DVCS is great in almost all its shapes and sizes.

What really gets to me is this:

So now both our repository and ticket tracking will be powered by Rails applications, which is a nice bonus treat.

They couldn’t possibly have chosen Git over, say, Mercurial because Github and Lighthouse is written in Rails, and hg is written in Python, could they?

. o .

Changes.app + Mercurial + extdiff = Awesome

▁ apr 02 2008

Use version control? Hate reviewing merge conflicts manually, scouring through <<<<<<<<‘s? I do. If you’re lucky, you know of FileMerge.app, which sort of simplifies things, but it doesn’t allow you to edit either of the columns.

Things just got a whole lot easier; Use Changes to review your changes. It’s $40, but so far I’ve found it well worth the price. It features integration with all the big players — TextMate, BBEdit, TextWrangler, has a Terminal utility (/usr/bin/chdiff), and it has a nifty wiki for how to integrate with your favorite SCM (works with every SCM I know of, perhaps with the exception of RCS.)

. o .

No way.

▁ apr 01 2008
. o .

Mix: Mrs. Thibodeau

▁ mar 30 2008

It’s been ages — literally — since I mixed together any sort of music. This weekend there was some time to kill, so I mixed together some tracks.

Download MP3

  • Martin Eyerer & Gui Boratto - The Beach
  • Andrea Doria & LXR - Beauty of Silence (Inpetto)
  • Wolfgang Gartner - Front To Back
  • Junkie XL - Cities in Dust (Glimmer)
  • Deadmau5 - Complications
  • Quivver - Surin
  • Morgan Page ft. Lissie - Longest Road (Deadmau5)
  • Hybrid - Finished Symphony (Deadmau5)
  • D. Ramirez ft. Tocadisco - With Me Or Against Me
  • Plastikman - Spastik (Dubfire)
  • Sydney Blu - Give It Up For Me
  • Thomas Schwartz - Jupiter Calling
  • Lens - Beyond the Shadows (Moonbeam)
  • Adam K. & Soha - Give It Up (Alex Gold)
  • Wardt - Show My Shuffle
  • Ricardo Tobar - El Sunset
  • Sander van Doorn - Sushi
  • Marcus Schossow - Chase My Rabbit
  • DJ Preach - Transatlantic
  • Joop - Prominent
  • Nick Larson - Barock

Total length: 1:57:42

It’s ranging from progressive and techy house to trance, to some harder stuff towards the end. Enjoy!

0 comments — category: mix
. o .

WideMail

▁ mar 29 2008
. o .

New grinder!

▁ mar 27 2008

Ah, what a beautiful morning. I was woken up by a hot steaming cup of joe, served by the wonderful Greek (who apparently knows me better than myself — go figure.) With that, I also got a big heavy present (it’s my birthday today.) In it was this:

Demoka Grinder

The Demoka M203 home-pro grinder. Yes sir, yes ma’am. Prior to this one, I had this one, and let me tell’ya, it’s a piece of shit. The beans don’t come in in a constant stream, so you have to shake the b-jesus out of it when it runs idle, which loses track of the amount you’ve chosen with the fancy dial. It’s fine for filter coffee, but not for espresso.

I’m very excited about this, and I’ve been grinding beans all morning, which is more work than I’ve ever done before breakfast. I’m a very happy camper! :-)

. o .

Everybody hates Graham

▁ mar 25 2008
. o .

Diner in the Dark

▁ mar 22 2008

I just came back from ctaste. It’s a small restaurant, on the Amsteldijk, De Pijp, in Amsterdam. My good friend Remco B. had his birthday dinner there (conveniently, his birthday is also my birthday.)

You are placed in a pitch black room, and you are served a three course meal, by visually impaired people. They can find their way around in the dark — you can’t. It’s literally pitch black; if you wave your hand just in front of your eyes, you can’t see it. We tried.

At first it’s quite strange, almost uncomfortable. I guess that’s your body getting used to the whole no-light scenario. Once you’ve gotten used to it though, it’s a very cool experience! The lack of visual aid, coerces you into really tasting things more than you are used to — a pleasant experience to sit through when you are being served a decent course.

I’d give it 4 out of 5 stars as the experience was unique, alas the food wasn’t mind blowing.

Oh, and to our delight, as the waiter kindly pointed out before the dining began, the menu was very non-fearfactor. Thank God.

. o .

Economist: Copyright is dead

▁ mar 22 2008
. o .

Etsy API in Python

▁ mar 22 2008

Currently brewing a small website for my girlfriend and I needed an API to access Etsy. Not knowing much about their policies, I do know that they use Python and PostgreSQL, so that makes them A-OK in my book.

Here’s a quick API that I wrote, and you’re free to grab it. After reading the horror story over on etsytools.com, I’m releasing this bad boy into the public domain; this means that I offer absolutely no guarantee that this continues to work, or anything of the sort. It depends on BeautifulSoup, which is an excellent library, so you should get it anyway.

Sample use:

from pyetsy import Etsy
e = Etsy(5531346) # User ID can be found in your store URI

for item in e.items:
    print item.item_name
    print item.price
    print item.get_image_url("small") # tiny, small, huge

NB: For a while I contemplated having an item.get_url() that would return the URL to the item, alas, those addresses are not mysteriously constructed, as they are just http://www.etsy.com/view_listing.php?listing_id=XXX. Also, note that .items has lazy evaluation, that means that no data will be coming in until you iterate it; it is also cached indefinitely within the object.

Comments are open, have fun.

. o .

django-sqlalchemy

▁ mar 22 2008
. o .

mod_wsgi 2.0 out

▁ mar 21 2008
. o .

Safari 3.1 review

▁ mar 20 2008

Apple released Safari 3.1 on March 17, 2008. I had some issues with the copy that shipped with Leopard, so I’m pleased. There’s a lot of new features in here, especially related to web development—an area where Safari has been lacking for quite some time now. On the Firefox side, they’ve had Firebug, an immensely useful debugging console. Luckily, Apple has given us the “web inspector” (which looks a helluvalot like firebug, but that’ll ease the transition even more.)

s31-safaribug.png

More after the break.

Read more »

. o .

Git GUI

▁ mar 20 2008
. o .

SOAP in Python

▁ mar 19 2008
. o .

Exploring Erlang

▁ mar 10 2008
. o .

Tropical Thunder

▁ mar 06 2008

OK, OK, this post is not laced with code or recipes, but it’s noteworthy at least. In the morning drive-by reading of various news sources, I stumbled upon an upcoming movie, Tropical Thunder. Supposedly, it’s a satire with Ben Stiller, Robert Downey Jr and Jack Black, to name a few. Here’s the major outline: These actors tumble around in the jungle, and somehow—freak occurances as IMDB will have us know—they end up playing some of the roles. And somehow Downey Jr. ends up playing the role that was originally cast for a black man. Yeah, a black guy. Seriously, take a look at this:

tropic-thunder01.jpg

This guy: tropic-thunder02.jpg

I don’t know why, but the whole idea of having Robert play a black guy makes me giggle on the inside. I can’t wait to see this movie.

. o .

So my Macbook died

▁ feb 27 2008

Right, so, in the middle of merging a branch in subversion, which in itself is daunting enough, all of a sudden I get the dreaded “bezel of death” on my screen. The computer reboots and by the time I get to login, it tosses me out. “Filevault is broken,” it says. There’s a repair button, but that doesn’t do anything. It just comes up and tells me that I can’t log in at this time. This time I only get an “OK” button, which merely discards the dialog and leaves me sitting there. That last dialog also has that standard “Xcode no-icon-has-been-set” icon, which probably indicates that this is not supposed to happen. Well, I fixed it in the end. Read on for instructions if you care, lest this happens to you.

Read more »

. o .

From idea to profitable .com in 24 hours

▁ feb 19 2008

Picture 8.png

A while ago, I read an article called something like “Setting up a business in 24 hours”, alas my 30 second google search reveals nothing. Anyway, it was a fun read then, and over the weekend, I had a chance of giving it a whirl myself. Lets see how it went.

Read more »

. o .

What's this?

▁ feb 12 2008

DSC02128

More after the break.

Read more »

. o .

PostreSQL client in D

▁ feb 12 2008

I’m sick of MySQL. Like, really.

I have some production code written in D that connects to a MySQL server, and it does a fine job at it. Now I’m using PostgreSQL and I need a new client library for that. It doesn’t exist. Well lets write one, shall we?

Read more »

. o .

Sick Puppies

▁ jan 22 2008

Watched this youtube video yesterday; it’s great. I don’t know the story behind it, and don’t really care, but it’s nice, nonetheless.

The music is by some guys called “Sick Puppies” and the track is “All the same”, from the album “Dressed up as life.” It’s really a great track. Go buy it.

Edit: Turns out I do indeed care about the story behind this. You can read it here. I nearly cried.

. o .

"Hey sorry, your rent bounced, but here's a picture of Homer Simpson"

▁ jan 16 2008

That pretty much summarizes what happened over at Dreamhost today. Noticed how that’s not a link? I wouldn’t want you to click it and somehow get into using their services. Why?

Read more »

. o .

Chicken Oscar

▁ jan 11 2008
. o .

Beans

▁ jan 09 2008

My coffee pusher made me an offer I couldn’t refuse.

Beans

Pun is Copyright (c) 2008 Joen P. Olsen, All Rights Reserved.

. o .

Tagged again

▁ jan 07 2008

Yes, Mr. Stavem tagged me in some random meme (again). Here goes:

  • Where is your cellphone? Desk
  • Describe your girlfriend? Wonderful
  • Your hair? Longer
  • Your mother? Deserves a lot more credit than she thinks
  • Your father? Honest
  • What is your favorite gadget? Girlfriend
  • What did you dream last night? Forgot
  • What do you prefer to drink? Espresso
  • Dream car? Audi A8
  • What room are you currently in? Office
  • Your ex? Who?
  • Your biggest fear? Insignificance
  • What do you want to be in 10 years? 32
  • Who did you spend last night with? Katie
  • What are you not? Sloppy
  • The last thing you did? Kissed
  • What are you wearing? Clothes
  • Favorite book? “The Fall”
  • The last thing you ate? Cereal
  • Your life? Great
  • Your mood? ;)
  • Your best friends? Know
  • What are you thinking about right now? Work
  • Your car? Who?
  • What are you doing right now? Relaxing
  • Your summer? Who?
  • Marital status? Happy
  • What is on your TV right now? Commercials
  • When did you last laugh? Today
  • When did you last cry? December 7th, 2007
  • School? Ha.

Katie, Vetle & Joen, you’re up.

. o .

More useless Fibonacci

▁ jan 06 2008

I’m looking into various programming languages these days. Today I took a quick look at a guide to Io. Io is a small language, which has some pretty cool concepts, aggregated from other powerful languages (Lisp, Smalltalk, the list goes on.)

So here’s the mandatory fibonacci 0->36 code:

Io> fib := method(n, if(n < 2, 1, fib(n - 1) + fib(n - 2)))
Io> Date cpuSecondsToRun(fib(36))
==> 455.8999999999999773

Meh. Python did faster than that; of course none of them are a match for D. Also, monitoring the memory usage of the VM as this ran, it became obvious that there’s no tail recursion here.

Seriously though, Io is a fun language, and with things such as coroutines and a nice standard library, it has a good chance of making it.

. o .

N = C + {fb(cm) · fb(tc)} + fb(Ts) + fc · ta

▁ jan 04 2008

We make the best bacon. And yeah, the article is so last year. Link

. o .

Experimenting with pizzas (again)

▁ jan 03 2008

So, after the move, I haven’t had much time to buzz around with my pizzas. I even forgot the recipe I used in Oslo.

Our oven here is some piece of shit electrical monster, so it won’t bake my stuff evenly. So I bought a dedicated pizza oven. It too, is a piece of unknown-korean-brand-crap, but at least it hits 250C fairly quickly, and it even came with its own stone (hooray for not having to find a matching size elsewhere.)

I upped a set to flickr. Here’s my favorite:

DSC01841

. o .

Coffee @ home

▁ jan 02 2008

My setup at home.

DSC01807

KitchenAid Artisan espresso machine, Krups burr grinder, Dreamfarm knockbin, 1883 syrups, cool sign I got for xmas, from Katie :-)

. o .

SQLAlchemy caching (second level)

▁ jan 01 2008

SQLAlchemy is an Object Relational Mapper (ORM) for Python, supporting a wide variety of databases.

As per the 0.4 documentation, it mentions that:

Is the Session a cache? Yeee…no. It’s somewhat used as a cache, in that it implements the identity map pattern, and stores objects keyed to their primary key. However, it doesn’t do any kind of query caching.

Admittedly, it would be an extremely daunting and challenging task to write a caching framework that would work well for all use cases. Yesterday, after some googling, I decided to write my own cache. As of version 0.4.1, there are some features that makes it possible to do this rather easily; you can write a MapperExtension that overwrites the ‘get()’ method that SQLAlchemy usually uses to fetch data. There you can cache your things. I’m doing this in memcached.

It’s built heavily on this thread from the SQLAlchemy mailinglist.

Oh, here’s the code.

How to use? Like this:

mapper(Foo, t_foo, extension=MemCachedMapper(mc, timeout=35))

Easy, eh? Now just use the session.query(Foo).get(xyz), and you’ll be caching results for 35 seconds (the second named argument to MemCachedMapper.) ‘mc’ is an instance of memcached or cmemcached, that is already connected.

This is in semi-production on my own pet-project, but I’d really appreciate some feedback from anyone who attempts to use this in their own code. If/when you run into a bug, write me here, and I’ll do my best to fix it.

. o .

Adaptive Replacement Cache in Python

▁ jan 01 2008

Today we’re going to talk about ARCs, or Adaptive Replacement Caches.

So what is it? Well, lets talk about some other caching algorithms first.

  • LRU: Last Recently Used. This means that you have a cache with a fixed size. For each “hit” on an entry, you increase the hit count (or the timestamp of access time) on the entry, and you keep the cache sorted sequentially. Once the cache “overflows”, you expunge the least used entry.
  • MRU: Most Recently Used. This is used when your entries are mostly unpredictable. You keep the most recent items in the beginning of the list, and you expunge from the end once you hit the fixed size.

So what’s an ARC? Well, it’s basically a more sophisticated caching algorithm, which sort of, kind of, looks like a MRU/LRU. We’ll try to explain it in further detail here, and also provide a Python implementation.

Read more »

powered by