My first look at Python was an accident, and I didn't much like what I saw at the time. It was early 1997, and Mark Lutz's book Programming Python from O'Reilly & Associates had recently come out. O'Reilly books occasionally land on my doorstep, selected from among the new releases by some mysterious benefactor inside the organization using a random process I've given up trying to understand.
One of them was Programming Python. I found this somewhat interesting, as I collect computer languages. I know over two dozen general-purpose languages, write compilers and interpreters for fun, and have designed any number of special-purpose languages and markup formalisms myself. My most recently completed project, as I write this, is a special-purpose language called SNG for manipulating PNG (Portable Network Graphics) images. Interested readers can surf to the SNG home page at http://www.tuxedo.org/~esr/sng/. I have also written implementations of several odd general-purpose languages on my Retrocomputing Museum page, http://www.tuxedo.org/retro/.
I had already heard just enough about Python to know that it is what is nowadays called a "scripting language", an interpretive language with its own built-in memory management and good facilities for calling and cooperating with other programs. So I dived into Programming Python with one question uppermost in my mind: what has this got that Perl does not?
Perl, of course, is the 800-pound gorilla of modern scripting languages. It has largely replaced shell as the scripting language of choice for system administrators, thanks partly to its comprehensive set of UNIX library and system calls, and partly to the huge collection of Perl modules built by a very active Perl community. The language is commonly estimated to be the CGI language behind about 85% of the "live" content on the Net. Larry Wall, its creator, is rightly considered one of the most important leaders in the Open Source community, and often ranks third behind Linus Torvalds and Richard Stallman in the current pantheon of hacker demigods.
Name:
Anonymous2009-03-24 8:56
At that time, I had used Perl for a number of small projects. I'd found it quite powerful, even if the syntax and some other aspects of the language seemed rather ad hoc and prone to bite one if not used with care. It seemed to me that Python would have quite a hill to climb as yet another scripting language, so as I read, I looked first for what seemed to set it apart from Perl.
I immediately tripped over the first odd feature of Python that everyone notices: the fact that whitespace (indentation) is actually significant in the language syntax. The language has no analog of the C and Perl brace syntax; instead, changes in indentation delimit statement groups. And, like most hackers on first realizing this fact, I recoiled in reflexive disgust.
I am just barely old enough to have programmed in batch FORTRAN for a few months back in the 1970s. Most hackers aren't these days, but somehow our culture seems to have retained a pretty accurate folk memory of how nasty those old-style fixed-field languages were. Indeed, the term "free format", used back then to describe the newer style of token-oriented syntax in Pascal and C, has almost been forgotten; all languages have been designed that way for decades now. Or almost all, anyway. It's hard to blame anyone, on seeing this Python feature, for initially reacting as though they had unexpectedly stepped in a steaming pile of dinosaur dung.
That's certainly how I felt. I skimmed through the rest of the language description without much interest. I didn't see much else to recommend Python, except maybe that the syntax seemed rather cleaner than Perl's and the facilities for doing basic GUI elements like buttons and menus looked fairly good.
I put the book back on the shelf, making a mental note that I should code some kind of small GUI-centered project in Python sometime, just to make sure I really understood the language. But I didn't believe what I'd seen would ever compete effectively with Perl.
A lot of other things conspired to keep that note way down on my priority list for many months. The rest of 1997 was eventful for me; it was, among other things, the year I wrote and published the original version of "The Cathedral and the Bazaar". But I did find time to write several Perl programs, including two of significant size and complexity. One of them, keeper, is the assistant still used to file incoming submissions at the Metalab software archive. It generates the web pages you see at http://metalab.unc.edu/pub/Linux/!INDEX.html. The other, anthologize, was used to automatically generate the PostScript for the sixth edition of Linux from the Linux Documentation Project's archive of HOWTOs. Both programs are available at Metalab.
Writing these programs left me progressively less satisfied with Perl. Larger project size seemed to magnify some of Perl's annoyances into serious, continuing problems. The syntax that had seemed merely eccentric at a hundred lines began to seem like a nigh-impenetrable hedge of thorns at a thousand. " More than one way to do it" lent flavor and expressiveness at a small scale, but made it significantly harder to maintain consistent style across a wider code base. And many of the features that were later patched into Perl to address the complexity-control needs of bigger programs (objects, lexical scoping, "use strict", etc.) had a fragile, jerry-rigged feel about them.
These problems combined to make large volumes of Perl code seem unreasonably difficult to read and grasp as a whole after only a few days' absence. Also, I found I was spending more and more time wrestling with artifacts of the language rather than my application problems. And, most damning of all, the resulting code was ugly--this matters. Ugly programs are like ugly suspension bridges: they're much more liable to collapse than pretty ones, because the way humans (especially engineer-humans) perceive beauty is intimately related to our ability to process and understand complexity. A language that makes it hard to write elegant code makes it hard to write good code.
With a baseline of two dozen languages under my belt, I could detect all the telltale signs of a language design that had been pushed to the edge of its functional envelope. By mid-1997, I was thinking "there has to be a better way" and began casting about for a more elegant scripting language.
One course I did not consider was going back to C as a default language. The days when it made sense to do your own memory management in a new program are long over, outside of a few specialty areas like kernel hacking, scientific computing and 3-D graphics--places where you absolutely must get maximum speed and tight control of memory usage, because you need to push the hardware as hard as possible.
For most other situations, accepting the debugging overhead of buffer overruns, pointer-aliasing problems, malloc/free memory leaks and all the other associated ills is just crazy on today's machines. Far better to trade a few cycles and a few kilobytes of memory for the overhead of a scripting language's memory manager and economize on far more valuable human time. Indeed, the advantages of this strategy are precisely what has driven the explosive growth of Perl since the mid-1990s.
Name:
Anonymous2009-03-24 8:56
I flirted with Tcl, only to discover quickly that it scales up even more poorly than Perl. Old LISPer that I am, I also looked at various current dialects of Lisp and Scheme--but, as is historically usual for Lisp, lots of clever design was rendered almost useless by scanty or nonexistent documentation, incomplete access to POSIX/UNIX facilities, and a small but nevertheless deeply fragmented user community. Perl's popularity is not an accident; most of its competitors are either worse than Perl for large projects or somehow nowhere near as useful as their theoretically superior designs ought to make them.
My second look at Python was almost as accidental as my first. In October 1997, a series of questions on the fetchmail-friends mailing list made it clear that end users were having increasing trouble generating configuration files for my fetchmail utility. The file uses a simple, classically UNIX free-format syntax, but can become forbiddingly complicated when a user has POP3 and IMAP accounts at multiple sites. As an example, see Listing 1for a somewhat simplified version of mine.
Listing 1
I decided to attack the problem by writing an end-user-friendly configuration editor, fetchmailconf. The design objective of fetchmailconf was clear: to completely hide the control file syntax behind a fashionable, ergonomically correct GUI interface replete with selection buttons, slider bars and fill-out forms.
The thought of implementing this in Perl did not thrill me. I had seen GUI code in Perl, and it was a spiky mixture of Perl and Tcl that looked even uglier than my own pure-Perl code. It was at this point I remembered the bit I had set more than six months earlier. This could be an opportunity to get some hands-on experience with Python.
Of course, this brought me face to face once again with Python's pons asinorum, the significance of whitespace. This time, however, I charged ahead and roughed out some code for a handful of sample GUI elements. Oddly enough, Python's use of whitespace stopped feeling unnatural after about twenty minutes. I just indented code, pretty much as I would have done in a C program anyway, and it worked.
Name:
Anonymous2009-03-24 8:56
That was my first surprise. My second came a couple of hours into the project, when I noticed (allowing for pauses needed to look up new features in Programming Python) I was generating working code nearly as fast as I could type. When I realized this, I was quite startled. An important measure of effort in coding is the frequency with which you write something that doesn't actually match your mental representation of the problem, and have to backtrack on realizing that what you just typed won't actually tell the language to do what you're thinking. An important measure of good language design is how rapidly the percentage of missteps of this kind falls as you gain experience with the language.
When you're writing working code nearly as fast as you can type and your misstep rate is near zero, it generally means you've achieved mastery of the language. But that didn't make sense, because it was still day one and I was regularly pausing to look up new language and library features!
This was my first clue that, in Python, I was actually dealing with an exceptionally good design. Most languages have so much friction and awkwardness built into their design that you learn most of their feature set long before your misstep rate drops anywhere near zero. Python was the first general-purpose language I'd ever used that reversed this process.
Not that it took me very long to learn the feature set. I wrote a working, usable fetchmailconf, with GUI, in six working days, of which perhaps the equivalent of two days were spent learning Python itself. This reflects another useful property of the language: it is compact--you can hold its entire feature set (and at least a concept index of its libraries) in your head. C is a famously compact language. Perl is notoriously not; one of the things the notion "There's more than one way to do it!" costs Perl is the possibility of compactness.
But my most dramatic moment of discovery lay ahead. My design had a problem: I could easily generate configuration files from the user's GUI actions, but editing them was a much harder problem. Or, rather, reading them into an editable form was a problem.
The parser for fetchmail's configuration file syntax is rather elaborate. It's actually written in YACC and Lex, two classic UNIX tools for generating language-parsing code in C. In order for fetchmailconf to be able to edit existing configuration files, I thought it would have to replicate that elaborate parser in Python. I was very reluctant to do this, partly because of the amount of work involved and partly because I wasn't sure how to ascertain that two parsers in two different languages accept the same. The last thing I needed was the extra labor of keeping the two parsers in synchronization as the configuration language evolved!
This problem stumped me for a while. Then I had an inspiration: I'd let fetchmailconf use fetchmail's own parser! I added a --configdump option to fetchmail that would parse .fetchmailrc and dump the result to standard output in the format of a Python initializer. For the file above, the result would look roughly like Listing 2 (to save space, some data not relevant to the example is omitted).
Listing 2
Python could then evaluate the fetchmail --configdump output and have the configuration available as the value of the variable "fetchmail".
This wasn't quite the last step in the dance. What I really wanted wasn't just for fetchmailconf to have the existing configuration, but to turn it into a linked tree of live objects. There would be three kinds of objects in this tree: Configuration (the top-level object representing the entire configuration), Site (representing one of the sites to be polled) and User (representing user data attached to a site). The example file describes five site objects, each with one user object attached to it.
I had already designed and written the three object classes (that's what took four days, most of it spent getting the layout of the widgets just right). Each had a method that caused it to pop up a GUI edit panel to modify its instance data. My last remaining problem was somehow to transform the dead data in this Python initializer into live objects.
I considered writing code that would explicitly know about the structure of all three classes and use that knowledge to grovel through the initializer creating matching objects, but rejected that idea because new class members were likely to be added over time as the configuration language grew new features. If I wrote the object-creation code in the obvious way, it would be fragile and tend to fall out of sync when either the class definitions or the initializer structure changed.
What I really wanted was code that would analyze the shape and members of the initializer, query the class definitions themselves about their members, and then adjust itself to impedance-match the two sets.
This kind of thing is called metaclass hacking and is generally considered fearsomely esoteric--deep black magic. Most object-oriented languages don't support it at all; in those that do (Perl being one), it tends to be a complicated and fragile undertaking. I had been impressed by Python's low coefficient of friction so far, but here was a real test. How hard would I have to wrestle with the language to get it to do this? I knew from previous experience that the bout was likely to be painful, even assuming I won, but I dived into the book and read up on Python's metaclass facilities. The resulting function is shown in Listing 3, and the code that calls it is in Listing 4.
Listing 3
Listing 4
That doesn't look too bad for deep black magic, does it? Thirty-two lines, counting comments. Just from knowing what I've said about the class structure, the calling code is even readable. But the size of this code isn't the real shocker. Brace yourself: this code only took me about ninety minutes to write--and it worked correctly the first time I ran it.
To say I was astonished would have been positively wallowing in understatement. It's remarkable enough when implementations of simple techniques work exactly as expected the first time; but my first metaclass hack in a new language, six days from a cold standing start? Even if we stipulate that I am a fairly talented hacker, this is an amazing testament to Python's clarity and elegance of design.
There was simply no way I could have pulled off a coup like this in Perl, even with my vastly greater experience level in that language. It was at this point I realized I was probably leaving Perl behind.
This was my most dramatic Python moment. But, when all is said and done, it was just a clever hack. The long-term usefulness of a language comes not in its ability to support clever hacks, but from how well and how unobtrusively it supports the day-to-day work of programming. The day-to-day work of programming consists not of writing new programs, but mostly reading and modifying existing ones.
So the real punchline of the story is this: weeks and months after writing fetchmailconf, I could still read the fetchmailconf code and grok what it was doing without serious mental effort. And the true reason I no longer write Perl for anything but tiny projects is that was never true when I was writing large masses of Perl code. I fear the prospect of ever having to modify keeper or anthologize again--but fetchmailconf gives me no qualms at all.
Perl still has its uses. For tiny projects (100 lines or fewer) that involve a lot of text pattern matching, I am still more likely to tinker up a Perl-regexp-based solution than to reach for Python. For good recent examples of such things, see the timeseries and growthplot scripts in the fetchmail distribution. Actually, these are much like the things Perl did in its original role as a sort of combination awk/sed/grep/sh, before it had functions and direct access to the operating system API. For anything larger or more complex, I have come to prefer the subtle virtues of Python--and I think you will, too.
Name:
Anonymous2009-03-24 9:06
do you really expect us to read all this huge blogpost?
The first anime I ever saw was "Revolutionary Girl Utena" the movie. I was attracted to it because it was bizarre and new. It hit me at a vulnerable time; my father and mother had just been murdered. I became obsessed with the "emptiness inside" theme of the movie, and felt that this related to my life somehow. I watched Evangelion next, and absolutely loved the depressing feeling both of these shows left me with. I am a person who loves depressions; I feel that I am at my most creative and "raw" when utterly depressed. The empty feeling these shows gave me filled me with emotions I wanted to recapture.
Like an addict seeking another hit, I kept downloading more and more programs, watching tons of shows. At one point, I had two shoeboxes full of CD-r's packed with Anime programs. I had a library of just about every show ever made. I became obsessive, but I wasn't finding that feeling that was originally there. Sure, I could recapture it with great stuff like Serial Experiments: Lain and Millenium actress, but that was only for a moment.
Eventually, I stopped watching the shows I was downloading, but just grabbed them for the sake of having them. I had to have more. I bought DVD's and didn't watch them. Gradually, over time, I felt my aesthetic become warped. What once was strange and bizarre looking character design became familiar; I sought it out. If I caught a glimpse of an anime style character in real life, I felt a rush; almost as if my hindbrain saw it before I was aware of it. I was visiting a Japanese tea Garden and saw real life schoolgirls in the familiar navy blue fuku uniforms. I was fascinated by them; I was drawn, attracted, but not in a sexual way; it blew my mind to see something in real life that I had before seen only in the abstract.
A familiar feeling came through me when I saw them. I felt the same at that moment as when I had first seen Utena, when I had first finished Evangelion. My obsession took a new direction.
I bought several sailor fuku uniforms from online retailers. J-list was too expensive and didn't sell in the size I desired. I had to have the legitimate stuff. At first it was satisfying to just look at the uniforms. I would keep them clean, iron them, and hang them up every day. The ritual was soothing to me.
Sooner or later I had to do it. I had to wear the uniforms I had treasured. I am proud to report that it took me a few months to break down, to really cross the threshold into utter depravity. After that line had been crossed, though, there was no going back. Tentatively, I started by simply wearing the uniforms around the house. I would wake up very early, before anyone could glimpse at me from outside on the street, and simply do my cleaning and cooking wearing the various uniforms I purchased. I got a matching apron. I would pretend I was getting ready for Japanese High school.
Soon, though, wearing the uniform in private was not enough. I purchased a duster trenchcoat and began walking through town wearing my outfit. Nobody knew, and this made me comfortable. But, again, this soon became insufficient to satisfy my obsession.
I began stalking this girl I knew, Sarah. I checked out her routines; when she left for work, when she got back, what time she went to bed. At first I furtively ventured into her place with my uniform under my trench coat while she was away. I knew where her spare key was because I had helped her move earlier. Speaking of this, I'm a pretty beefy guy. I weigh around 240-260 pounds, but I'm not that tall. A great friend to have if you need to move.
Anyway, gradually, I became more comfortable in her apartment. I started doing stuff like rolling around in her bed, stealing her underwear and putting it in little plastic bags, soforth. As you would expect, I became more and more comfortable doing this, and crossed a line. She came home unexpectedly one day, early from work. Panicked, I hid under the bed in my uniform. Immediately, as she came through the door, she spotted my trench coat. Lying under her bed, the sound of my heavy breathing seemed a thousand times louder than it actually was. I could hear her rooting through the trench coat, and could hear the wrinkling of celophane as she found my empty plastic bags. Thank god they didn't yet have her used underwear in them.
I put my sweaty, meaty hands together and prayed.
I heard her walking around the apartment. Thankfully, she didn't bring anyone with her. My mind was flashing; the excitement had triggered my epilepsy. Suddenly, I was barraged with memories from my first anime program, revolutionary girl utena. I heard her walking around some more, and then sit down on the bed. I saw her clothes come off and hit the floor in front of me. During this time I was controlling myself and having a minor epileptic fit. I could see transformation sequences from anime programs I had watched. It was all coming together; the near hallucinations, the girl in the bed above me, and most of all, my sweaty fuku uniform.
She approached the bathroom and got into the shower. She turned on the water. I was convinced that this was the one moment I had been searching for. This was my chance to cross over into the other world described in Utena; the fabric of reality was thin. I could taste it. In many of my anime programs I had seen the seemingly normal characters, like me, enter into a world of magic and joy.
I rolled out from under the bed and bounded into the bathroom. She saw my large form approaching through the glass of the shower and started screaming. I was having epileptic flashes; the screaming sounded just like "KYAAAAAAAAAAAAAAAH" I was having trouble walking, my steps staggered. I couldn't feel the floor. My meaty hands slammed the shower door open, but she sprayed me with a jet of water. The water triggered another fit and I seized, falling into the bath. She tripped and fell on top of me. As she was screaming and my blood filled the bath, it swirled around reality, and intermingled in my mind. Her screams, the blood, my sweat, the uniform, Japan, schoolgirls, magic, tragedy, terror, and hope all become one to me. For one moment, I could taste it. The anime reality. It was here, like a precious jewel perched between my meaty, sweaty pectorals. And then, gone.
>>8
It's a private post, you have to be in his friends list.
Well, not anymore.
Name:
Anonymous2009-03-24 13:49
Pythons are heavy-bodied constrictors, meaning they rely on their size and strength to capture and kill prey by crushing. All python species are non-venomous. They are for the most part terrestrial, and of brown, black or green colour (for camouflage). A notable exception is the green tree python (Morelia viridis), which is considerably more slender than it's con-generics, arboreal and of a truly striking green colour.
The Burmese (Python molurus) and Reticulated pythons (P. reticulatus) are truly gigantic snakes, measuring up to 32 feet in length and weighing more than 300 pounds. They are not, however, the largest snakes on the planet. That honour falls to the Anaconda (which is a member of the boa sub-family, Boinae), which has been measured at 37 feet in length and must have weighed well over 500 pounds (Anacondas are considerably more robust than pythons). Despite their large sizes, these two species are often kept in captivity quite successfully, given their relaxed temperament and the fact that they only feed two to four times per year.
Not all python species are as large as these giants, however. The Anthill python (Antaresia perthensis) remains under two feet in total length as an adult, and the common Ball python rarely exceeds four feet in length. This latter species is very often kept as a pet, and is particularly well known for its docile character and tendancy to curl into a ball when held (thus the name).
Some pythons, like the Reticulated, display unusual reproductive behaviour for snakes. While other oviparous snakes lay their eggs and then depart, the female of this species will remain on her nest, without eating, to protect the eggs from predators during incubation. Some have hypothesized that this is due to the slow growth rate of the species and their low lifetime reproductive output. By remaining on the nest, a female Reticulated python, which will only have a couple of clutches in her lifetime, increases the odds that one of her offspring survive to reproductive age (biologists call this her fitness).
Finally, it should be noted that the wonderful and horrific stories often heard about savage, human killing snakes are urban myths and have little basis in reality. I say little basis because there are documented cases of pythons attacking humans, but in suburbia rather than the jungle. Almost all attacks can be considered due to poor husbandry or frightful stupidity on the part of the Homo sp. rather than the Python sp. And, if you ever see a picture of a boy ingested by a python circulating on the internet, know that it is a fake.
Taxonomic information
The genera Antaresia, Apodora, Aspidites, Bothrochilus, Leiopython, Liasis and Morelia are restricted to Australia, New Guinea and Indonesia, while the genera Calabria, Python, are found in Africa and Asia. The monospecific genus Loxocemus is native to Mexico, and is only tentatively placed in the Pythoninae.
Species list1
* Genus Anataresia, the children's python2:
o A. childreni, Children's python
o A. maculosa, Spotted python
o A. perthensis, Anthill python
o A. stimsoni, Stimson's python
* Genus Apodora:
o A. papuanus, Papuan python
* Genus Aspidites
o A. melanocephalus, Black-headed python
o A. ramsayi, Woma
* Genus Bothrochilus:
o B. boa, Bismarck ringed python
* Genus Calabria:
o C. reinhardtii, West-African burrowing python
* Genus Leiopython
o L. albertisii, White-lipped python
* Genus Liasis, the water pythons:
o L. fuscus, Brown water python
o L. mackloti, Macklot's python
o L. olivaceous, Olive python
o L. sawuensis, Sawu python
* Genus Loxocemus:
o L. bicolor, New world python
* Genus Morelia
o M. amethystina, Scrub python
o M. boeleni, Boelen's python
o M. Bredli, Centralian python
o M. carinata, Rough-scaled python
o M. clastolepis
o M. kinghorni, Australian scrub python
o M. nauta
o M. oenpelliensis, Rock python
o M. spilota, Carpet python
o M. tracyae
o M. viridis, Green tree python
* Genus Python
o P. anchietae, Angolan python
o P. curtus, Blood python
o P. molurus, Burmese python
o P. natalensis, South African rock python
o P. regius, Royal, or Ball, python
o P. reticulatus, Reticulated python
o P. sebae, Central African rock python
o P. timorensis, Timor python
I had a strange dream the other day. I was riding the bus when all of a sudden this huge black snake head with retarded-looking eyes pops through the window and screams loudly "HAVE YOU READ YOUR SICP TODAY?" The bus had just stopped beside the library, and I ran inside as quickly as possible; the snake head was now chasing me around as I frantically searched for the legendary book among the shelves. I spotted the distinctive blue cover and ran toward it, the huge head inches from my ass. With great force I pulled the book from the shelf and instinctively directed it at the black head which by now was dripping with saliva at the mouth. It disappeared as it made contact with the book, disintegrating into a flurry of glowing parentheses.
I just sat there dazed for a few seconds, watching the feathery parehtneses slowly become smaller and fade away into nothingness. Slowly, I stood up, still clutching the purple book. I wondered about what I should do with it, then decided to put it back on the shelf. After doing so, I walked back out to the exit and boarded a bus, for where I did not know. The bus driver looked strangely familiar as I dropped the coins into the farebox;
"HAVE YOU READ YOUR SICP TODAY?" he suddenly yelled at me. Oh fuck, I thought to myself. Now I knew why he looked so familiar: He was The Sussman!
"Umm... no," I responded weakly. Suddenly his head looked a lot darker than it was a moment ago, and an evil grin appeared across his face. The bus's doors slammed shut and The Sussman's face turned an almost negroid black. His left hand shot at me and I could see that it was not a hand, but the head of a snake which protruded from its end. I turned around and ran towards the back of the articulated bus.
"Let me show you the power of Satori," The Sussman said in a deep hiss. His snakelike arm extended from his body towards me as I continued to run for what seemed like eternity towards the longbus's rear door.
"Longbus is loooooooooooooooooooooong", I thought to myself as I continued to run, the snake's head fast approaching. The bus seemed to go on forever. After a while, I passed the driver's seat. WTF, I thought. Ahead of me was The Sussman, standing in the aisle facing the same direction as me, with his left arm pointed forward.
I looked behind me, and saw the snake head was still approaching; I had managed to outrun it for a bit, and it was racing towards me. RECURSION! I jumped into the stepwell just as the head gained a sudden burst of speed, piercing through The Sussman and sending bright glowing parentheses everywhere. I watched first his body, then his hands disintegrate in the same manner that the head had earlier. The long black arm, floating in mid-air, slowly disappeared into a cloud of these glowing parentheses, and the snake's head, which I now noticed had come through the windscreen along with me, did the same after a few moments.
I stepped over to the driver's seat, looking for the door release switch. I found what appeared to be the switch and toggled it, but the doors did not open. Shortly after, a low hissing sound emanated from the bus itself, followed by the loud booming cry of "HAVE YOU READ YOUR SICP TODAY?", which felt as if it was coming from inside my head. Suddenly everything turned black.
I awoke to find myself still inside that mysterious bus, which was completely empty. The engine was still running, and it was still parked outside the library. "The library! Of course!" I thought to myself. As if my mind had been read, the front doors swung open and I ran from the bus toward the library, which also looked empty. I entered the building and frantically ran to where I had found the prized book earlier. The book was still there, and I grabbed it instinctively, then walked to the checkout. All but one counter was open, and there was a little Asian girl standing there; the place was deserted except for me and her. I put the book on the counter and she looked at it for a moment, then at me. "Have you read your SICP today?" she asked.
"You too?" I replied. "Have some tits and then GTFO and read your SICP!", she angrily shouted, then pulled up her shirt to show me her tits. She shoved the book into my hands and then disappeared spontaneously.
I left the library, and waited at the bus stop. The previous bus was no longer there. The girl I saw earlier walked up to me and looked at the Wizard Book I was holding, then glanced down at my crotch.
"WHAT DO YOU THINK YOU'RE DOING STANDING THERE LIKE AN IDIOT? READ IT!" she suddenly shouted. Astounded, I quickly opened the book and started to read the first chapter. I was so intrigued by the book that I didn't notice she had begun to give me a blowjob. When I looked down, she took his mouth from my cock to angrily shout "GO BACK TO READING YOUR SICP" and so I did. I didn't even notice that I came until after she told me to stop reading. A short while later, the bus arrived.
Name:
Anonymous2009-03-24 17:47
>>7
Everytime I see this kopipe I rage, because it is too unrealistic:
You are NOT supposed to watch the movie before you watch the series. You miss half of the story if you do. How can you undestand the deep meaning of, for example, her transforming into a car in the aerial rose garden then being driven underneath the castle on a truck with all wheels moving to try to crush them if you didn't see her duels in the aerial arena under the inversed castle with all the Akio cars driving around and being staked into the ground?? No doubt you'd get fucked up if you watched the movie without mental preparation.
However, this is where he completely ruins his otherwise believable story: his mental breakdown makes absolutely no sense. Utena wears a male uniform almost all the time you idiot (except for one or two episodes). How the fuck can he get a seifuku fetish from that?
Name:
Anonymous2009-03-24 20:17
>>13
I thought the unbelievable parts were, I dunno, writing a post after you're dead or the fact that Sarah took off her clothes and went to take a bath after noticing the fact that there was a trenchcoat belonging to someone else in her house.
Name:
Anonymous2009-03-25 0:47
goddammit, /prog/.
Name:
Anonymous2009-03-25 12:43
>>13! I LOVE YOU!I LOVE YOUR POST!I READ IT 5 TIMES!KEEP POSTING!