Katolicki Uniwersytet Lubelski (KUL)

July 1, 2008 – 7:33 pm

On Saturday, I’ll be traveling to Poland again, for a 3 week stretch.  Like last year, I’ll be taking a Polish language course at the Katolicki Uniwersytet Lubelski (Catholic University of Lublin) in Lublin, Poland.  The 9-10 hour plane ride should afford me lots of time to read!

When I took the course last year, I had a really strong grasp on conscious grammar but was rather weak with speaking, understanding and vocabulary.  On the first day they give you a placement test, to see what level you should be at.  It has a written component, which I did really well on, and an “interview-ish” spoken component, which I bombed.  Even so, they placed me in the highest level, bardzo zaadwansowany.

The people in my class had way, way better language abilities than me.  I was floundering at best.  Quite a few of them were the children of Polish emigrants or had emigrated from Poland at an early age and spoke Polish natively, since childhood.  But when we did grammar exercises, I was probably the only person who knew what was going on. ;-)

Still!  It was a lot of fun.  I made a lot of awesome friends and got into a number of interesting adventures.  I also got a taste of Polish culture and experience I couldn’t have gotten at home.  It was brilliant.

Since last year, I’ve changed my approach drastically.  I’ve been reading and listening to the books in the Harry Potter series in Polish (1, 2, 34).  I hired a Polish tutor who I speak with over the internet once a week.  My speaking, understanding, and, yes, even some of my grammar skillz have improved.  This year is going to be twice as brilliant!

This year I plan to really try and do everything in Polish.  Last year, I became friends mostly with native English speakers (although, a few were also native Polish speakers).  They were awesome people, but this year I’m going to try and spend more time with other people so that falling back on English isn’t so easy.

The content of the classes is very much focused on grammar.  I really have no interest to muck around anymore with grammar, but that doesn’t matter.  For me, its just a random topic, and I’m just there to hear and speak Polish.

Its funny: last year I believed that just by going to Poland and taking this course, my Polish abilities would improve drastically.  And my abilities did improve, just not as I had imagined.  But this year, I see it differently.  I see this trip simply as a reward for all my hard work studying Polish here in the US-of-A.

The fundamental misunderstanding about language learning.

July 1, 2008 – 8:44 am

There are two distinct activities:

  • Linguistics. This means language science. It is the conscious study of the components of a language or language in general. This is like all other sciences and intellectual persuits: biology, chemistry, mathematics, etc..
  • Language learning, or rather, language aquisition (which is the term I’ll use for the rest of this article). This means developing the ability to understand, speak, read or write in a language. This is not a conscious activity, but rather training your brain, programming it, more like muscle memory than studying math.

Both are worthy pursuits. Some people are interested in only one, some people are interested in both (I’m interested in both).

However, the great, fundamental misunderstanding, is that most people believe that developing the first (linguistics) will lead to the second (language acquisition). This is completely false.

As Steve Kaufmann likes to quote:

“If the scientific knowledge of anatomy were a condition for making love, professors of anatomy would be unrivaled lovers. If the academic knowledge of grammar were a condition for making literature, grammarians would be unrivaled writers. But this is not the case…..”
- Rubem Alves

What they teach you in language classes in school is very basic linguistics. This is why (IMHO) most language courses are so terribly unsuccessful. Language acquisition is not a conscious activity, it is a matter of activating your natural language acquisition device (one of Noam Chomsky’s terms).

But some people — especially language teachers — are unable to separate these two things (linguistics and language acquisition). In Steve Kaufmann’s recent discussion (video is available!) with Robyn Matthews, Robyn insists several times that the learner needs to know syntax. Syntax, for those who don’t know, is the system by which words are combined to form sentences. In English and many western European languages (like Spanish, French, Italian) this means word-order. In many other languages (like most of the Slavic languages, including Polish and Russian) this means word-endings.

And, yes, you do need to have the ability to correctly form sentences in a language in order to speak it and be understood. But you don’t need to know syntax, to have this syntax ability. In fact, most native speakers don’t know the syntax of their native language, but still have this ability (myself included when it comes to English).

But here is the real kicker: no matter how well you know syntax, this alone will never translate into ability.

So, if you aren’t interested in the linguistic aspects, you can skip that part all together. In fact, I believe it might be best for adults to avoid it until after a certain level of proficiency. This is because most adults are pathologically afraid of making mistakes in social situations. Once they know a “language rule” they will consciously monitor (from Stephen Krashen’s “monitor model”) their speech to try and avoid this mistake. However, speaking a language is not a conscious activity!!! When you speak your native language are you consciously thinking of the rules of syntax? Of course not!

This monitoring, when used in moderation can help the non-native speaker appear to possess a higher level of language ability than they actually have. This is a good thing. When over-used, it completely disrupts the natural production process and can make the speaker sound very unnatural.

This is all not to say that linguistics and language acquisition cannot work together.  Linguists (like Noam Chomsky and Stephen Krashen) study the process of language acquisition and what they discover can be used by language learners — which is what I am trying to do in this article.

To repeat my main point: a linguistic understanding of a language does not automatically give way to ability with the language.  One still has to acquire the language the natural way.

And so what is the natural way?

I’m glad you asked!

Comprehensible input.  That term has Stephen Krashen written all over it.  It means hearing and listening to input in the target language which you understand and are interested in.  Given enough comprehensible input, the language acquisition device in your brain will learn to understand and speak the target language.  No conscious linguistic understanding is necessary.

Now, I hope you noticed the two very important conditions: (1) you must understand the input, and (2) you must be interested in it.  How can you understand a language you haven’t already acquired?  Well, there are several techniques.

One variation is having a text, an audio recording of the text and a translating dictionary.  You listen to the audio a couple of times.  Then you go through the text to look-up words you don’t know.  Then you listen some more.  Maybe you make flashcards for the unknown words.  When you’re sick of that text, move on to another one.

The second requirement (”input must be interesting to you”) is also very important.  Language is about communicating a message.  You must concern yourself primarily with comprehending the message in order to activate your language acquisition device.  This is the same way you acquired your first language, you wanted to understand what your ma was saying or the story or the cartoon, etc…

Repetition can be very helpful, especially in the beginning, but it shouldn’t be forced.  If you’re following your interests, you only need to deal with a text until you’ve gotten what you wanted out of it.  Once you’ve understood it and you feel like going on to something else, you’re done.  Too many adults will never get past the first couple texts because they want to “perfect” them before moving on.  Quantity over “intensity.”

There is some technology to help with various parts of this process.  Steve Kaufmann’s Lingq does basically what I’ve described above.  There are also many computerized flashcard systems, including my own, Memorati (based on Lingwo.flashcards).  One of the most popular is Anki.  There are also several great online translating dictionaries, just Google around a bit.

I’ve known some people acquired a foreign language primarily using music as their input.  If you really love the music of a particular band, its great motivation and will help the words stick in your head much better than other types of input.  I’ve also known people who used soap operas.  The context and the person’s emotional involvement with the characters can be enough to provide meaning even without the text.  Of course, you have to be the type of person who can get emotionally involved in soap operas for that to work. ;-)

The point is the input can be just about anything, so long as it meets the requirements.

Conclusion

As I’ve discussed before, I started learning Russian and Polish in a university setting, which taught me very well the grammar of those languages (linguistics).  While this was interesting and fun for me — because I like that sort of thing — it failed to allow me to speak and understand, ie. I hadn’t acquired much of the language.

Since I’ve began to focus on comprehensible input as discussed above, I’ve been making really strong progress.  I still have quite a ways to go — I’m hardly fluent in either language — but I seem to now be on the right track.

Sometime next year, I plan to try learning Spanish using these techniques.  This will be the ultimate test because I don’t have any conscious grammatical knowledge of that language.  I’d also like to learn Egyptian Arabic, but Spanish comes first because I’ll likely go visit my sister living in Argentina next year.

For more in depth information on this topic, check out Stephen Krashen’s “Second Language Acquisition and Second Language Learning” (full text available!).

Happy (Language) Hacking!

Introducing Lingwo.ws

June 27, 2008 – 3:26 pm

Over the past several months, I’ve been thinking about how to make a really strong RESTful API for Lingwo.flashcards.  At my straight job, there has also been lots of talk about building a RESTful API (although, unfortunately, no actual work!  I’m bursting at the seams to start it!).  This and the fact that all the other Lingwo Projects will need APIs, has compelled me to take the API design I’ve come up with and release it as an open specification.

So, to start over… Lingwo.ws is an open specification for a pattern by which one can design RESTful web-services.

But why do we need such a specification?

Well, being RESTful means that you adhere to some rather abstract concepts.  Two APIs can be designed in drastically different ways and still be perfectly RESTful.  We can gain alot by having a standard:

  • We can share code for consuming such services.  For example, one only needs to write one Lingwo.ws client for Python, and now all Python programs can consume a Lingwo.ws service with little effort.
  • We can share code for creating services.  For example, one only needs to write a single WSGI implementation of Lingwo.ws services and now service authors in Python have tools for easily building compliant services.
  • We can share expectations.  When someone says their service is RESTful, that means we’ll be digging into some documentation and learning how to use it.  But if someone says their service is Lingwo.ws compliant, well, then you may already know what that means.

Now, I have no illusions of grandeur.  There are some situations where a custom designed RESTful API may model the service better than Lingwo.ws.  So, you won’t hurt my feelings if you don’t make your next service Lingwo.ws compliant. ;-)

What I am trying to accomplish is a design pattern which meets the needs of 80% of service designers.  Now, in that 80% space, there are about 1 million different ways to do the same thing.  This is just one way.  It isn’t better or more magical than any other way.  With all those 1 million ways being roughly equal, Lingwo.ws really gets its value by being specified.

Ok, where’s it at?

All that said, you can see my current draft in The Lingwo Project’s wiki under Lingwo.ws Design.  It is not finished by any means.  And, unfortunately, lots of things that have already been designed haven’t landed on that page yet.  I apologize for that.

There is also a reference implementation in the works.  It is both more and less complete than the specification. ;-)  On Launchpad, you can find a mirror of the code.

In future blog posts, I hope to go into more detail about the actual workings of the API.  I’d like to do a tutorial series about using the reference implementation since getting it up and running and poking around may be the easiest way to understand.

Beyond REST…

While I personally love working with RESTful APIs, others may have differing opinions.  Thats why one of the design goals of Lingwo.ws, is that it should be possible to automatically generate SOAP-based web-services on top of the RESTful ones.  After all, any service author’s primary goal is get as many consumers as possible.  Give them what they want!

Also, one of REST’s main virtues is being stateless.  However, I am going to include a stateful proxy for use with Javascript.  I’ll go into this more in later posts (or you can look at the design doc in the wiki), but Lingwo.ws uses a private key scheme for authentication.  Clearly, you need to do everything you can to keep the private key hidden.  But if you are making a pure client-side Web 2.0 application, you can’t really put your private key in the web-page can you!

The stateful proxy exists to integrate with your login system, using a session cookie with a shared secret, in order to verify that requests are coming from the user they say they are.  (BTW, the cookie scheme I plan to use is the mod_auth_tkt one, which has become something of a defacto standard with this sort of integration)

However, both these bits, the SOAP proxy and the Javascript proxy, can just be layered on and forgotten.  That’s the beauty of having the core be RESTful.  Its very easy to layer non-RESTful stuff on top of REST but much harder to do the reverse.  And we get our one elegant canonical API, while still giving each “audience” what they want.

One advantage some SOAP advocates tout over REST, is that SOAP is discoverable, but with REST you have to read the docs to know what is available.  (Yes, I know there are emerging standards like SMD for REST!)  In Lingwo.ws, there will be a way to find what “containers” exist and the formats of their “documents” (see the design doc for terminology).  I plan to base it on JSON Schema (at last look, SMD seemed unable to describe some of Lingwo.ws’s resources correctly but more research is necessary).

Anyway, this is just a quick introduction.  I’ve been holding off on talking about this for so long and have so much to say, I think I’m just going to stop myself now. ;-)

Software Development Meme

June 26, 2008 – 8:41 pm

This just in, guys!  I’m about to participate in a meme.  I’ve never done that before, so I’m a little nervous…

Mr. Damon Payne called me out.  This is a list of questions about your personal history with software development.

How old were you when you started programming?

I was 8-ish.  I can’t really remember exactly, because that was quite awhile ago.  My pa used to get magazines on model rocketry and I’d like to page through them.  They’d occasionally have code listings in BASIC for calculating stuff on your home computer.  I was showing this to my buddy and he said, “I’ve seen this before!  We type this into our computer and then we can play games!”

So, over to his house, on his Apple II, we spent an enormous amount of time typing in some random program from the magazine.  In the end, it was something super boring that asked for a bunch of numbers and spit out a result.  I didn’t get it.

But this was the first time it occurred to me that people created the things that ran on computers.  As strange a thing to realize, because someone must create them, but they existed already and I hadn’t really wondered how they got there, they were just there.

Anyway, so I spent the rest of the day typing absurd instructions into our Commodore 64.  They were very verbal, like “CREATE SPACE SHIP THAT I FLY.”  I was undeterred by the non-sensical message, “SYNTAX ERROR” that followed each line.  My pa eventually came and asked me what I was doing.  I told him and he gave me two books on BASIC for the C64: Kids and the Commodore 64 and a generic one for adults (I still have these somewhere).

And so it began…

What was your first language?

BASIC for the C64

What was the first real program you wrote?

Like Dan’s response, I don’t really know what makes a program real..  Like Damon I focused my time primarily on trying to make games.  None were terribly successful (especially at the BASIC stage).  I never had anyone to guide my programming adventures and so some simple concepts just never occurred to me.

For example, vectors.  I kept trying to animate things on the screen and had a basic understanding of The Game Loop but some how failed to connect the very simple, related dots and use a list of vectors to move objects independently.  Years later when I realized this (maybe I was 12 by then or something. ;-) Just kidding, I don’t really remember), I kept kicking myself, that I could have been making rockin’ awesome games this whole friggin’ time.

I began to wish that I had someone to give me pointers here and there, and maybe point out the obvious when I failed to see it.  Today, I’m not so sure.  Maybe because I had to learn everything by experimentation or research is what made me the programmer I am today.  Who knows.  I’ll choose the one that makes me feel warm inside.

Anyway, there were several attempts at spaceship games in BASIC.  Much later I wrote a pure software 3D engine in C++.  I also spent a ton of time trying to develop a graphics media library in C++.  I never really got to making any actual games.  I was more into write tools for building games or a framework for creating games and just never seemed to get around to the games themselves.

Net result: they were all real.  End of answer.

What languages have you used since you started programming?

C64 BASIC, Java, C++, C, UNIX shell, Python, PHP, TCL, Perl, JavaScript, Haskell — in roughly that order.

The C64 was still my only computer until 95-96. We eventually got a Pentium 200Mhz with Windows 95.  I had no money, so I initially hacked my way into the modern era hacking with Java 1.0.2 because the compiler was free.  Eventually, I did scrounge together the $200 for Borland C++.  I was a pure C++ programmer for many, many years.

In fact, even though I haven’t done practically any C++ in the past 6-7 years, thats probably the language I’ve coded the most of all time.  I was kind of a C++ fanatic/fan-boy.  I knew certain parts of the language standard pretty well and hacked out a few personal implementations of parts of the STL (the Standard Template Library).  I used to have dreams in C++.  Despite my deep love for it, I have no desire to ever go back.  Ever. ;-)

These days my favorites are Python and Javascript.  I really dig Haskell but I haven’t gotten that deep into it yet.

What was your first professional programming gig?

Not counting failed attempts to start my own business? ;-)  I have exactly 3 of those.

A friend’s father had a law firm.  I remade their website in PHP.  Its one of the first web-apps I ever wrote.  I worked on it for about 4-5 hours and made $300 bucks.

I spent a long time not wanting to work a full-time coding gig, because I wanted to only work on my projects and only wanted to work on Open Source.  For a long time I entertained the idea of being a sys-admin so that all my code belonged only to me.  Now I work for a company where I can contribute some to Open Source on the job.  Score!

If you knew then, what you know now, would you have started programming?

If I knew then, what I know now, I would have gotten the vectors thing!

Of course, man.  I was in it from the beginning just to create something.  Putting all this commercial business on it kind of dampens that a bit, but even if I had decided to be a firefighter or zoo keeper or plumber or something, I would still have wanted to write code.

If there was one thing you learned along the way that you would tell new developers, what would it be?

Arg.  This is a tough one.  I guess just be open to keep on learning.  Don’t get stuck in a rut.  Basically, the same as what Aaron wrote.

In the beginning I wrote tons of code based on what I knew then.  I’d get so far and in the process learn that there was a better way and throw all that out. ;-)  I had to do alot of that.  You’ll feel like you’re at the top of your game and then a couple years later realize you knew nothing.  Just never stop going forward.

What’s the most fun you’ve ever had programming?

It’s all the most fun except when it isn’t!

One of the most fun I had recently, was a customer support chat thing for work.  It consisted of a plugin to Wildfire (a Jabber server in Java), a plugin to Spark (a Jabber client in Java) and a web-based chat client in Javascript.  Users would click a button for help which would open up the Javascript client in the browser, which would work with the server to get a service rep using Spark to take the request.

Working with Jabber (well, called XMPP now) was awesome.  Working on so many different types of components to make the whole was awesome.

PoCo::MessageQueue is also alot of the most fun, but Paul Driver has been the main guy carrying that torch for awhile.

And, of course, The Lingwo Project.  Its the culmination of alot of thinking and hacking I’ve been doing over the past 5 years.  Its currently a canidate for, “my life’s work”.  ;-)

But, yeah, when I can really settle in with the appropriate zen on any project, that is the most fun, every time.  This can only be broken by not coding, not having any zen, hacking on code so ugly it hurts you to think about what it would take to un-ugly all that code, etc…

Who am I calling out?

Nick Purvis

Paul Driver (his response)

Andrey Popelo

(If you guys don’t have public blogs, you’d better make some quick!)

Update (7/1/2008): Paul responded!  Yay!

Another Harry Potter bites the dust!

June 10, 2008 – 5:56 pm

On Friday, while walking home from work, I finished listening to Harry Potter i Więzień Azkabanu (the 3rd Harry Potter book in Polish). This is the first one where I had both the text and the audio. I tried doing a couple of things with this:

  1. Simultaneous reading and listening.
  2. Listening then later reading.
  3. Switching off, doing which ever one I feel like at the time.

#1 turned out to be waaay harder than I thought. I read at a different speed than the actor read the text. I kept wanting to pause the audio so I could catch-up. This turned out to not be very enjoyable for me. #2 worked great, although it was a little boring at reading time. There would sometimes be a word or two that I failed to catch in the listening that the later reading would clarify, but nothing that ever changed my understanding of the text.

#3 was just right. Sometimes, especially at night, reading text off the page was more relaxing. The actor would move so briskly and sometimes I wanted to move more lazily. However, all in all, I ended up doing more listening than reading. I purely listened to the last 1/3 of the book. This may be because its more easily merged with other tasks (ie. walking, eating). Or that I enjoyed listening to the way the actor put emotion into the text. Or maybe because it was easier to gloss over words that I didn’t know. ;-)

I’ve already received the next one, Harry Potter i Czara Ognia (both text and audio) from Quo Vadis, a Polish bookstore in Chicago. I always order online, but I’ll be in Chicago next week for YAPC::NA, so I may get a chance to stop in there in person. The 4th book is enormous, almost twice as long as the 3rd, weighing in at 768 pages recorded on 18 CDs. Whew! This one may take a little longer.

Lingwo.flashcards, now with lower hacktivation energy!

May 23, 2008 – 9:49 am

A buddy of mine has been trying to get the Lingwo.flashcards server code running on his MacOS X laptop. You can see the discussion on the Google Group. I think this is a HUGE step for the project. I’ve been recently reading parts of this great online book: Producing Open Source Software. Alot of it is stuff that should be evident, but is easy to over look when your focused on writing code.

As I’ve mentioned before I’ve had trouble attracting a community around this project. Some projects you can just put up on SourceForge or CPAN or PyPI and people will just wander in (”If you build it, they will come!”). This is has been the case for most of my other projects. Producing OSS talks about how one of the most important things is making it easy for new developers to get started (the author calls it “hacktivation energy”). A lot of people may be coming to your website, but if it isn’t immediately apparent how to get the code and run it, most developers will simply move on.

I’ve been working on the Hacking Lingwo.flashcards document in the wiki. This attempts to walk you through setting up Lingwo.flashcards on your local machine. Nick has been kind enough to test it out. Its amazing how many steps of the process you forget about when its your code, just because your code is so obvious to you. But its started to fill in. Also, documenting the setup process has helped show parts of it that are harder than they need to be, so I can start to try and optimize them.

Google Summer of Code

May 16, 2008 – 6:49 am

This just in!  I am mentoring in Google Summer of Code this year for the Dojo JavaScript Toolkit.  The student is Andrey Popelo, who describes his project in this blog post.  GSoC doesn’t official kick off until May 26th.  I expect it will be an interesting experience!

Spaced repetition, commitment and Lingwo.flashcards 0.1.4

May 6, 2008 – 7:43 pm

After reading this post on Confessions of a Language Addict, I’ve started thinking a bit more seriously about “the commitment problem” with spaced repetition which I recently wrote about. To summarize the problem: Spaced repetition works great if you are committed to quizzing your flashcards everyday. But inevitably, you will have to stop for some period time.  When you come back, the number of expired cards could overwhelm you.

I was using Memorati™ religiously while I was reading the first Harry Potter book. It was fantastic. After finishing the book, I stopped doing flash cards for about 1 week. I needed a break. I have over 2.500 cards and I was on a very strict regimen. Several weeks have gone by and I have still been unable to catch up.

So… I was trying to think of a near-term solution, meaning something I can do today, without redesigning Memorati. I ended up creating a catch-up script — which turned out not to be what I was looking for.

But what it did, was take all expired cards and set the expire date as if you learned them 1 day ago. So, cards at level 1 and 0, will be quizzed immediately, but the rest will be deferred until later, as if their interval had just started yesterday. Basically, the idea was that it simulates you having last used Memorati the day before, like you had never left.

I ran my script, leaving me with about 500 cards at level 1 and 0.  I quizzed about 200 of those cards. Only afterward did I realize that I’d have to run the script again the next day (thus differing the 200 I just did) for this to really help me to catch-up. But then I understood what it really was that I wanted it to do.

How it should work

Once you have a large enough number of cards, you shouldn’t be doing all expired cards, everyday. You should be setting a goal in terms of number of cards or minutes per day. For example, after 100 cards you would pick up again the next day. The key is: if you miss a day, you should be quizzed the exact same 100 cards as if you hadn’t missed a day.

We can simulate this (again its not perfect!) by favoring certain cards first. Whether that is favoring most recently learned, least recently learned, best known or least known cards — it shouldn’t matter. Personally, I think favoring best known, least recently known cards first would be ideal. This would mean that when tons of cards are expired, you would be pushing known cards into a higher level (and getting them out of the way) before addressing less unknown material.

Eh?

So when will it be available?

You may or may not have noticed that I just released Lingwo.flashcards 0.1.4!  This is the first version released under that name and represents the same code running on www.Memorati.com (except, of course, with the name change).  For the next version (0.2.0), I will focus on creating a real REST API.  This will give the JavaScript client library more power and should allow me to more easily experiment with algorithm changes and new features.  In short: I’m not going to hack on this new idea until after 0.2.0 is out.  I should have some development updates next week.

Personal Computing Rules

May 5, 2008 – 3:15 pm

Over the weekend, I somehow convinced myself that upgrading to Debian Lenny (the current testing) was a good idea. I’ve encountered countless problems because of this. So, I am going to attempt to lay down some ground rules for my personal computer maintenance. This is written in the 2nd person, speaking to myself.

  1. You only need a root and swap partition. I know that you like to have a separate /boot or /home partition, but inevitably, you will run into issues with disk space. For example, currently I have my /home partition with 65G and the root partition with 6.5G. I ran out of space on the root partition and now I have to carefully prune my Debian packages. Lame.
  2. Don’t install custom built packages to /usr/local. Install them instead to a sub-directory of your home directory. Use stow to manage them! Trusting code from arbitrary authors to do what you expect when you type “make install” as the root user is insanity. They can put any commands they want in there. Only trust Debian packages to install as root.
  3. Don’t use Debian testing! It may seem like a good idea. Stable may get really out-of-date. But the truth of the matter is that you want really basic things to never break. I just experienced this awesome issue where all TTF fonts at 10pt are huge. Why? Dunno. But I’ve wasted a couple hours trying to fix it. If there is something new you really need, you can build it manually and install it per item #2.
  4. Don’t install any piece of software that you depend on for your personal development projects via Debian packages (except at the lowest level like the Python interpreter, C compiler, MySQL database, etc). These things should be installed per item #2 and maintained manually. This means Perl packages, Python libraries, etc.. Have CPAN install to a sub-directory of your home directory and maintain a virtual Python environment.

In the meantime, I’ll be slowing fixing my issues with Lenny and counting the days until it becomes stable.

Harry Potter i Więzień Azkabanu

May 1, 2008 – 8:42 pm

My copy of “Harry Potter i Więzień Azkabanu” (the 3rd Harry Potter book in Polish) just arrived today!  Hurray!  And this time, I have got the audio book too.  My copy of the audio for the 2nd book is still in transit somewhere, but I’m done with that one anyway.  Rock.