# Guido van Rossum

Ramblings through technology, politics, culture and philosophy by the creator of the Python programming language.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Reasoning about asyncio.Semaphore

DevFeed: [Reasoning about asyncio.Semaphore](<https://devfeed.tech/articles/reasoning-about-asyncio-semaphore-38903.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2022/10/reasoning-about-asynciosemaphore.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2022-10-05T06:39:00Z

Content type: article

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Concurrent Programming](<https://devfeed.tech/topics/concurrent-programming.md>), [await](<https://devfeed.tech/topics/await.md>)

Tags: [await](<https://devfeed.tech/tags/await.md>), [fairness](<https://devfeed.tech/tags/fairness.md>), [implementing](<https://devfeed.tech/tags/implementing.md>), [performance](<https://devfeed.tech/tags/performance.md>), [reasoning](<https://devfeed.tech/tags/reasoning.md>), [semantics](<https://devfeed.tech/tags/semantics.md>), [synchronization](<https://devfeed.tech/tags/synchronization.md>)

### AI overview

The article explains asyncio synchronization primitives through a restaurant queuing analogy. It maps exclusive access and cancellation to a Lock, then explains why multiple concurrently seated guests require a Semaphore. It also discusses challenges involving fairness, correctness, semantics, and performance.

### Source excerpt

In Silicon Valley is a very exclusive fast-food restaurant, which is always open. There is one table, where one guest at a time is served an absolutely fabulous hamburger. When you arrive, you wait in line until the table is available. Then the host takes you to the table and, this being America, you are asked a seemingly endless series of questions about how you would like your hamburger to be cooked and served. But today we're not talking about culinary delights. We're talking about the queuing system used by the restaurant. If you are lucky to arrive at the restaurant when the table is available and there are no other guests waiting, you are seated right away. Otherwise, the host gives you a buzzer (from an infinite stack of buzzers!) and you are free to roam the neighborhood until your buzzer goes off. It is the host's job to ensure that guests are seated in order of arrival. When it is your turn, the host will cause your buzzer go off and you make your way back to the restaurant, where you will be seated. If you change your mind, you can return the buzzer to the host, who will take it back without lifting an eyebrow. If your buzzer has already gone off, the host will buzz the next guest, if any. Guests are always polite and don't abscond with their buzzers. The host is always fair and doesn't seat another guest ahead of you even if you take your time making it back. The above description fits that of a Lock. A guest arriving corresponds to the acquire() call; leaving is a release() call. Changing your mind is like getting cancelled while waiting in acquire(). You can change your mind before or after your buzzer goes off, i.e., you can be cancelled before or after the lock has awakened your call (but before you return from acquire()). One day the restaurant expands, hiring extra sous-chefs and opening several new tables. There is still only one host, whose job is not really changed. However, since multiple guests can be seated concurrently, a Semaphore must now

## Meeting Mike Burrows

DevFeed: [Meeting Mike Burrows](<https://devfeed.tech/articles/meeting-mike-burrows-38902.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2022/02/meeting-mike-burrows.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2022-03-01T06:19:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Google](<https://devfeed.tech/topics/google.md>), [Python](<https://devfeed.tech/topics/python.md>), [C++](<https://devfeed.tech/topics/c-plus-plus.md>)

Tags: [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [google](<https://devfeed.tech/tags/google.md>), [python](<https://devfeed.tech/tags/python.md>)

### AI overview

A personal account of meeting Mike Burrows during the author's first weeks at Google in 2005. The story recalls their earlier connection through the Amoeba project and Burrows's strong dislike of Python compared with C++.

### Source excerpt

In late 2005 I joined Google. The interviews took a surprising long time, which is a tale for another time. Today I want to tell a story that happened in one of my first weeks on campus. In the main building was an impressive staircase going up to the second floor. Somewhere near the top was a spacious office. A very important engineer worked there. I checked the name on the door and realized I knew him: he had been a grad student from the UK who had spent some time visiting our research group (the Amoeba project) at CWI in Amsterdam in the early '90s. Happy to find someone I knew long ago, one day I knocked on the door and introduced myself. Yes, he remembered me too, but my delight was soon over. Not only was Python the bane of Mike's existence at Google (he detested everything that wasn't C++), but the one memory from his stay in Amsterdam that stood out was about a time I had given him a ride across town on the back of my bike: "Worst ride of my life."

## What to do with your computer science career

DevFeed: [What to do with your computer science career](<https://devfeed.tech/articles/what-to-do-with-your-computer-science-career-38900.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2018/11/what-do-do-with-your-computer-science.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2018-11-26T17:13:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Computer science](<https://devfeed.tech/topics/computer-science.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Development](<https://devfeed.tech/topics/development.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [advice](<https://devfeed.tech/tags/advice.md>), [career](<https://devfeed.tech/tags/career.md>), [css](<https://devfeed.tech/tags/css.md>), [developers](<https://devfeed.tech/tags/developers.md>), [html](<https://devfeed.tech/tags/html.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [students](<https://devfeed.tech/tags/students.md>)

### AI overview

An opinion piece offering computer science students career advice about choosing between conventional software development jobs and entrepreneurship. It argues that 9-to-5 software development can be rewarding, cautions against repetitive entry-level web development work, and says software engineering will continue to involve new problems as repetitive tasks become automated.

### Source excerpt

I regularly receive questions from students in the field of computer science looking for career advice. Here's an answer I wrote to one of them. It's not comprehensive or anything, but I thought people might find it interesting. [A question about whether to choose a 9-5 job or be an entrepreneur] The question about "9-5" vs. "entrepreneur" is a complex one -- not everybody can be a successful entrepreneur (who would do the work? :-) and not everybody has the temperament for it. For me personally it was never an option -- there are vast parts of management and entrepreneurship that I wouldn't enjoy doing, such as hiring (I hate interviewing and am bad at it) and firing (too emotionally draining -- even just giving negative feedback is hard for me). Pitching ideas to investors is another thing that I'd rather do without. If any of that resonates with you, you may be better off not opting for entrepreneurship -- the kind of 9-5 software development jobs I have had are actually (mostly) very rewarding: I get to write software that gets used by hundreds or thousands of other developers (or millions in the case of Python), and those other developers in turn use my software to produce product that get uses by hundreds of thousands or, indeed hundreds of millions of users. Not every 9-5 job is the same! For me personally, I don't like the product stuff (since usually that means it's products I have no interest in using myself), but "your mileage may vary" (as they say in the US). Just try to do better than an entry-level web development job; that particular field (editing HTML and CSS) is likely to be automated away, and would feel repetitive to me. [A question about whether AI would make human software developers redundant (not about what I think of the field of AI as a career choice)] Regarding AI, I'm not worried at all. The field is focused on automating boring, repetitive tasks like driving a car or recognizing faces, which humans can learn to do easily but find boring

## Union syntax

DevFeed: [Union syntax](<https://devfeed.tech/articles/union-syntax-38898.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2016/05/union-syntax.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2016-05-18T18:55:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [union types](<https://devfeed.tech/topics/union-types.md>), [syntax](<https://devfeed.tech/topics/syntax.md>)

Tags: [python](<https://devfeed.tech/tags/python.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [types](<https://devfeed.tech/tags/types.md>), [union](<https://devfeed.tech/tags/union.md>)

### AI overview

The article explains why PEP 484 uses Union[X, Y, Z] for expressing union types in Python. It argues that alternatives such as X|Y|Z, {X, Y, Z}, and (X, Y, Z) would create compatibility or semantic confusion, while Union[] works with existing Python versions and type-checking behavior.

### Source excerpt

Union syntax (I'm trying to do this as a quick post in response to some questions I received on this topic. I realize this will probably reopen the whole discussion about the best syntax for types, but sorry folks, PEP 484 was accepted nearly a year ago, after many months of discussions and hundreds of messages. It's unlikely that any idea you can think of here would be new. This post just explains the rationale of one particular decision and tries to put it in some context.) I've heard some grumbling about the union syntax in PEP 484: Union[X, Y, Z] (where X, Y and Z are arbitrary type expressions). In the past people have suggested X|Y|Z for this, or (X, Y, Z) or {X, Y, Z}. Why did we go with the admittedly clunkier Union[X, Y, Z]? First of all, despite all the attention drawn to it, unions are actually a pretty minor feature, and you shouldn't be using them much. So you also shouldn't care that much. Why not X|Y|Z? This won't fly because we want compatibility with versions of Python 3 that were already frozen (see below). We want to be able to express e.g. a union of int and str, which under this notation would be written as int|str. But for that to fly we'd have to modify the builtin 'type' class to implement __or__ -- and that wouldn't fly on already-frozen Python versions. Supporting X|Y only for types (like List) imported from the typing module and some other notation for builtin types would only sow confusion. So X|Y|Z is out. Why not {X, Y, Z}? That's the set with elements X, Y and Z, using the builtin set notation. We can usefully consider types to be sets of values, and this makes a union a set of values too (that's why it's called union :-). However, {X, Y, Z} confuses the set of types with the set of values, which I consider a mortal sin. This would just cause endless confusion. This notation would also confuse things when taking the union of several classes that overlap, e.g. if we have classes B and C, where C inherits from B, then the union of B and

## Adding Type Annotations for Python's fspath Protocol

DevFeed: [Adding Type Annotations for Python's fspath Protocol](<https://devfeed.tech/articles/adding-type-annotations-for-fspath-38896.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2016/05/adding-type-annotations-for-fspath.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2016-05-18T14:06:00Z

Content type: article

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [Protocol (disambiguation)](<https://devfeed.tech/topics/protocol.md>), [file](<https://devfeed.tech/topics/file.md>), [generics](<https://devfeed.tech/topics/generics.md>)

Tags: [file](<https://devfeed.tech/tags/file.md>), [generics](<https://devfeed.tech/tags/generics.md>), [protocol](<https://devfeed.tech/tags/protocol.md>), [python](<https://devfeed.tech/tags/python.md>)

### AI overview

This blog post explains how to add type annotations for Python 3.6's filesystem path protocol, including __fspath__(), os.fspath(), pathlib.Path, and os.DirEntry. It demonstrates generic and overloaded type definitions for os.scandir() and related standard-library stubs.

### Source excerpt

Type annotations for fspath Python 3.6 will have a new dunder protocol, __fspath__() , which should be supported by classes that represent filesystem paths. Example of such classes are the pathlib.Path family and os.DirEntry (returned by os.scandir() ). You can read more about this protocol in the brand new PEP 519. In this blog post I'm going to discuss how we would add type annotations for these additions to the standard library. I'm making frequent use of AnyStr , a quite magical type variable predefined in the typing module. If you're not familiar with it, I recommend reading my blog post about AnyStr . You may also want to read up on generics in PEP 484 (or read mypy's docs on the subject). Adding os.scandir() to the stubs for os.py For practice, let's see if we can add something to the stub file for os.py. As of this writing there's no typeshed information for os.scandir() , which I think is a shame. I think the following will do nicely. Note how we only define DirEntry and scandir() for Python versions >= 3.5. (Mypy doesn't support this yet, but it will soon, and the example here still works -- it just doesn't realize scandir() is only available in Python 3.5.) This could be added to the end of stdlib/3/os/__init__.pyi: from typing import Generic, AnyStr, overload, Iterator if sys.version_info >= (3, 5): class DirEntry(Generic[AnyStr]): name = ... # type: AnyStr path = ... # type: AnyStr def inode(self) -> int: ... def is_dir(self, *, follow_symlinks: bool = ...) -> bool: ... def is_file(self, *, follow_symlinks: bool = ...) -> bool: ... def is_symlink(self) -> bool: ... def stat(self, *, follow_symlinks: bool = ...) -> stat_result: ... @overload def scandir() -> Iterator[DirEntry[str]]: ... @overload def scandir(path: AnyStr) -> Iterator[DirEntry[AnyStr]]: ... Deconstructing this a bit, we see a generic class (that's what the Generic[AnyStr] base class means) and an overloaded function. The scandir() definition uses @overload because it can also be called wit

## The AnyStr type variable

DevFeed: [The AnyStr type variable](<https://devfeed.tech/articles/the-anystr-type-variable-38897.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2016/05/the-anystr-type-variable.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2016-05-17T16:53:00Z

Content type: tutorial

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [Polymorphism](<https://devfeed.tech/topics/polymorphism.md>), [function](<https://devfeed.tech/topics/function.md>), [Variable](<https://devfeed.tech/topics/variable.md>), [networking](<https://devfeed.tech/topics/networking.md>)

Tags: [bug](<https://devfeed.tech/tags/bug.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [function](<https://devfeed.tech/tags/function.md>), [polymorphism](<https://devfeed.tech/tags/polymorphism.md>), [python](<https://devfeed.tech/tags/python.md>), [types](<https://devfeed.tech/tags/types.md>)

### AI overview

A tutorial on Python type annotations uses a parenthesize function to explain polymorphism across str and bytes, the Union type, and how static type checking exposes a bytes-versus-str bug. It introduces AnyStr as the subject of a separate discussion related to PEP 484 and the __fspath__() protocol.

### Source excerpt

The AnyStr type variable I was drafting a blog post on how to add type annotations for the new __fspath__() protocol (PEP 519) when I realized that I should write a separate post about AnyStr . So here it is. A simple function on strings Let's write a function that surrounds a string in parentheses. We'll put it in a file named demo.py : def parenthesize(s): return '(' + s + ')' It works, too: >>> from demo import parenthesize >>> print(parenthesize('hola')) (hola) Of course, if you pass it something that's not a string it will fail: >>> parenthesize(42) Traceback (most recent call last): File "demo.py", line 1, in File "demo.py", line 2, in parenthesize TypeError: Can't convert 'int' object to str implicitly Adding type annotations Using PEP 484 type annotations we can clarify our little function's signature: def parenthesize(s: str) -> str: return '(' + s + ')' Nothing to it, right? Even if you've never heard of PEP 484 before you can guess what this means. (Note that PEP 484 also says that the runtime behavior is unchanged. The calls I showed above will still have exactly the same effect, including the TypeError raised by parenthesize(42) .) Polymorphic functions Now suppose this is actually part of a networking app and we need to be able to parenthesize byte strings as well as text strings. Here's how you'd implement that: def parenthesize(s): if isinstance(s, str): return '(' + s + ')' elif isinstance(s, bytes): return b'(' + s + b')' else: raise TypeError(f"That's not a string, it's a {type(s)}") # See PEP 498 With a fancy word we call that a polymorphic function. How do you write a signature for such a function? For the answer we have to dive a little deeper into PEP 484. It defines a nifty operator named Union that lets us state that a type can be either this or that (or something else). In our case, it's either str or bytes , so we can write it like this: from typing import Union def parenthesize(s: Union[str, bytes]) -> Union[str, bytes]: if isinstance(s,

## King's Day Speech

DevFeed: [King's Day Speech](<https://devfeed.tech/articles/king-s-day-speech-38895.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2016/04/kings-day-speech.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2016-04-27T17:17:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [python](<https://devfeed.tech/tags/python.md>), [speech](<https://devfeed.tech/tags/speech.md>)

### AI overview

A personal King's Day speech recounts the speaker's early interests in electronics and mathematics, his discovery of computing, and the creation of Python. It also introduces Python as a programming language created by a community and reflects on the significance of programming languages.

### Source excerpt

Today the Netherlands celebrates King's Day. To honor this tradition, the Dutch embassy in San Francisco invited me to give a "TED talk" to an audience of Dutch and American entrepreneurs. Here's the text I read to them. Part of it is the tl;dr of my autobiography; part of it is about the significance of programming languages; part of it is about Python's big idea. Leve de koning! (Long live the king!) Python: a programming language created by a community Excuse my ramblings. I'll get to a point eventually. Let me introduce myself. I'm a nerd, a geek. I'm probably somewhere on the autism spectrum. I'm also a late bloomer. I graduated from college when I was 26. I was 45 when I got married. I'm now 60 years old, with a 14 year old son. Maybe I just have a hard time with decisions: I've lived in the US for over 20 years and I am still a permanent resident. I'm no Steve Jobs or Mark Zuckerberg. But at age 35 I created a programming language that got a bit of a following. What happened next was pretty amazing. But I'll get to that. At age 10 my parents gave me an educational electronics kit. The kit was made by Philips, and it was amazing. At first I just followed the directions and everything worked; later I figured out how to design my own circuits. My prized possessions were the kit's three (!) transistors. I took one of my first electronics models, a blinking light, to show and tell in 5th grade. It was a total dud -- nobody cared or understood its importance. I think that's one of my earliest memories of finding myself a geek: until then I had just been a quiet quick learner. In high school I developed my nerdiness further -- I hung out with a few other kids interested in electronics, and during physics class we sat in the back of the class discussing NAND gates while the rest of the class was still figuring out Ohm's law. Fortunately our physics teacher had figured us out: he employed us to build a digital timer that he used to demonstrate the law of gravity to the

## Book review: Introduction to Computer Science Using Python (by Charles Dierbach)

DevFeed: [Book review: Introduction to Computer Science Using Python (by Charles Dierbach)](<https://devfeed.tech/articles/book-review-introduction-to-computer-science-using-python-by-charles-dierbach-38893.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2013/10/book-review-charles-dierbach.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2013-10-28T20:56:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [Computer science](<https://devfeed.tech/topics/computer-science.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Graphics](<https://devfeed.tech/topics/graphics.md>), [Simulation](<https://devfeed.tech/topics/simulation.md>)

Tags: [book](<https://devfeed.tech/tags/book.md>), [book-review](<https://devfeed.tech/tags/book-review.md>), [charts](<https://devfeed.tech/tags/charts.md>), [computer-science](<https://devfeed.tech/tags/computer-science.md>), [examples](<https://devfeed.tech/tags/examples.md>), [graphics](<https://devfeed.tech/tags/graphics.md>), [programming](<https://devfeed.tech/tags/programming.md>), [python](<https://devfeed.tech/tags/python.md>), [review](<https://devfeed.tech/tags/review.md>), [screenshots](<https://devfeed.tech/tags/screenshots.md>), [simulation](<https://devfeed.tech/tags/simulation.md>)

### AI overview

A review of Charles Dierbach's college-level textbook Introduction to Computer Science Using Python: A Computational Problem-Solving Focus. The reviewer describes its beginner-friendly approach, emphasis on computational problem solving, broad computer science coverage, exercises, examples, and practical Python material including IDLE and turtle graphics.

### Source excerpt

After much back and forth I received a nice new Python book in the mail. The book's full title is "Introduction to Computer Science Using Python: A Computational Problem-Solving Focus", and its author is a very experienced educator, Charles Dierbach. This is not your average Python book -- it is a college text intended for first-semester CS courses that happens to use Python. As such, in assumes absolutely no previous programming experience, and it looks like any previous computer experience is optional. Not only that, but the book starts with a step-by-step introduction to the art of computational problem solving. This is an idea that goes well beyond hacking together a website! The book is incredibly thorough: there are exercises throughout the text (not just at the end of each chapter), and it includes a plethora of examples, screenshots, tables, charts, diagrams, and photos. (Yes, my picture is in there -- so are Alan Turing, JFK, and K&R. :-) The author is not afraid of taking a stance; for example, he omits the 'break' and 'continue' statement because they do not fit within the paradigm of structured programming. This actually fits with the general goal of the book, which is to give an overview of many areas of computer science without getting too deep into the minutiae of any topic. I love the final chapter, which is an overview of the history of computing, starting with Charles Babbage and Ada Lovelace. At the same time, the book gives plenty of useful practical information, such as instructions for using IDLE and an extensive explanation of turtle graphics, culminating in a horse race simulation. (The author's Baltimore roots seem to show through here. :-) All in all, I think this book is a great text for anyone teaching CS1 or interested in familiarizing themselves with computer science through serious self-study.

## Letter to a young programmer

DevFeed: [Letter to a young programmer](<https://devfeed.tech/articles/letter-to-a-young-programmer-38894.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2013/10/letter-to-young-programmer.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2013-10-25T02:19:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>)

Tags: [computers](<https://devfeed.tech/tags/computers.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [python](<https://devfeed.tech/tags/python.md>)

### AI overview

Guido van Rossum encourages a young person interested in Python to pursue programming, dream ambitiously, and use computers and robots to create things.

### Source excerpt

Dear (insert name here), I heard you enjoy a certain programming language named Python. Programming is a wonderful activity. I am a little jealous that you have access to computers at your age; when I grew up I didn't even know what a computer was! I was an electronics hobbyist though, and my big dream was to build my own electronic calculator from discrete components. I never did do that, but I did build several digital clocks, and it was amazing to build something that complex and see it work. I hope you dream big too -- programmers can make computers (and robots!) do amazing things, and this is a great time to become a programmer. Just imagine how much faster computers will be in five or ten years, and what you will be able to do with your skills then! --Guido van Rossum (inventor of Python)

## Compare-And-Set in Memcache

DevFeed: [Compare-And-Set in Memcache](<https://devfeed.tech/articles/compare-and-set-in-memcache-38892.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2011/08/compare-and-set-in-memcache.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2011-08-25T16:59:00Z

Content type: tutorial

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [content addressed store](<https://devfeed.tech/topics/content-addressed-store.md>), [Python](<https://devfeed.tech/topics/python.md>), [bug](<https://devfeed.tech/topics/bug.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [algorithms](<https://devfeed.tech/tags/algorithms.md>), [appengine](<https://devfeed.tech/tags/appengine.md>), [cas](<https://devfeed.tech/tags/cas.md>), [code](<https://devfeed.tech/tags/code.md>), [compare](<https://devfeed.tech/tags/compare.md>), [google](<https://devfeed.tech/tags/google.md>), [memcache](<https://devfeed.tech/tags/memcache.md>), [new-feature](<https://devfeed.tech/tags/new-feature.md>), [python](<https://devfeed.tech/tags/python.md>), [race-condition](<https://devfeed.tech/tags/race-condition.md>)

### AI overview

This tutorial explains Compare-And-Set in memcache, including its atomic update use case and how it prevents lost updates caused by race conditions when concurrent requests modify the same key.

### Source excerpt

With the most recent release (1.5.3, last week) App Engine's Python API for Memcache has added a new feature, Compare-And-Set. This feature (with a different API) was already available in Java; it has also been available in the non-App-Engine pure-Python memcache client. In fact, I designed the App Engine Python API for this feature to be compatible with the latter, since most of the rest of the App Engine Python API also strives to be at least a superset of that package. But what is it? There seems to be little information on how to use Compare-And-Set with memcache. It is also sometimes (incorrectly) referred to as Compare-And-Swap -- incorrect, because the cas() operation does not actually "swap" anything. The first response when we closed the bug requesting this feature was "Some examples of usage are appreciated." So here goes. The basic use case for Compare-And-Set is when multiple requests that are being handled concurrently need to update the same memcache key in an atomic fashion. Let's assume you are managing a counter in memcache. (Actually, you could use the incr() and decr() operations to update 64-bit integer counters atomically, but just for argument's sake assume you cannot use those -- there are other data types for which the memcache service does not have built-in support.) The naive code to update a counter would be something like this: def init_counter(key): . memcache.set(key, 0) def bump_counter(key): . counter = memcache.get(key) . assert counter is not None, 'Uninitialized counter' . memcache.set(key, counter+1) (Aside: I don't want to have to think about how to get blogger to properly format Python code. I really don't. So just bear with the dots I use for indentation. Okay? Comments pointing me to solutions will be DELETED.) (Aside 2: The assert is kind of naive; in practice you'll have to somehow deal with counter initialization. You also should implement a backup for your counter using the App Engine datastore, so that it can survive evic

## Before Python

DevFeed: [Before Python](<https://devfeed.tech/articles/before-python-38891.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2011/07/before-python.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2011-07-25T18:17:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Python](<https://devfeed.tech/topics/python.md>), [Mathematics](<https://devfeed.tech/topics/mathematics.md>)

Tags: [computer](<https://devfeed.tech/tags/computer.md>), [cpu-time](<https://devfeed.tech/tags/cpu-time.md>), [electronics](<https://devfeed.tech/tags/electronics.md>), [languages](<https://devfeed.tech/tags/languages.md>), [mathematics](<https://devfeed.tech/tags/mathematics.md>), [network](<https://devfeed.tech/tags/network.md>), [personal](<https://devfeed.tech/tags/personal.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-languages](<https://devfeed.tech/tags/programming-languages.md>), [python](<https://devfeed.tech/tags/python.md>), [students](<https://devfeed.tech/tags/students.md>), [university](<https://devfeed.tech/tags/university.md>)

### AI overview

The author recounts his early experiences with electronics, mathematics at university, punch-card computing, and early programming before Python. He reflects on how programming languages have changed and how programmers may write software in the future.

### Source excerpt

This morning I had a chat with the students at Google's CAPE program. Since I wrote up what I wanted to say I figured I might as well blog it here. Warning: this is pretty unedited (or else it would never be published :-). I'm posting it in my "personal" blog instead of the "Python history" blog because it mostly touches on my career before Python. Here goes. Have you ever written a computer program? Using which language? HTML Javascript Java Python C++ C Other - which? [It turned out the students had used a mixture of Scratch, App Inventor, and Processing. A few students had also used Python or Java.] Have you ever invented a programming language? :-) If you have programmed, you know some of the problems with programming languages. Have you ever thought about why programming isn't easier? Would it help if you could just talk to your computer? Have you tried speech recognition software? I have. It doesn't work very well yet. :-) How do you think programmers will write software 10 years from now? Or 30? 50? Do you know how programmers worked 30 years ago? I do. I was born in Holland in 1956. Things were different. I didn't know what a computer was until I was 18. However, I tinkered with electronics. I built a digital clock. My dream was to build my own calculator. Then I went to university in Amsterdam to study mathematics and they had a computer that was free for students to use! (Not unlimited though. We were allowed to use something like one second of CPU time per day. :-) I had to learn how to use punch cards. There were machines to create them that had a keyboard. The machines were as big as a desk and made a terrible noise when you hit a key: a small hole was punched in the card with a huge force and great precision. If you made a mistake you had to start over. I didn't get to see the actual computer for several more years. What we had in the basement of the math department was just an end point for a network that ran across the city. There were card readers a

## The depth and breadth of Python

DevFeed: [The depth and breadth of Python](<https://devfeed.tech/articles/the-depth-and-breadth-of-python-38890.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2011/06/depth-and-breadth-of-python.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2011-06-03T16:17:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [Algorithms](<https://devfeed.tech/topics/algorithms.md>), [Computer science](<https://devfeed.tech/topics/computer-science.md>)

Tags: [academic](<https://devfeed.tech/tags/academic.md>), [algorithms](<https://devfeed.tech/tags/algorithms.md>), [personal](<https://devfeed.tech/tags/personal.md>), [programming-languages](<https://devfeed.tech/tags/programming-languages.md>), [python](<https://devfeed.tech/tags/python.md>), [technology](<https://devfeed.tech/tags/technology.md>)

### AI overview

A personal account of conversations with Python users, emphasizing the language's range from academic algorithm research to practical translation of formal specifications. The article also recounts an anecdote about the origins of Python's indentation-based code blocks.

### Source excerpt

As of late I'm noticing a trend: I'm spending more time having in-person in-depth conversations, and less time coding. While I regret the latter, I really enjoy the former. Certainly more than weekly meetings, code reviews, or bikeshedding email threads. (I'm not all that excited about blogging either, as you may have guessed; but some things just don't fit in 140 characters.) Two conversations with visitors I particularly enjoyed this week were both with very happy Python users, and yet they couldn't be more different. This to me is a confirmation of Python's enduring depth and breadth: it is as far away of a one-trick language as you can imagine. My first visitor was Annie Liu, a professor of computer science (with a tendency to theory :-) at Stony Brook University in New York State. During an animated conversation that lasted nearly three hours (and still she had more to say :-) she explained to me the gist of her research, which appears to be writing small Python programs that implement fundamental algorithms using set comprehensions, and then optimizing the heck out of it using an automated approach she summarized as the three I's: Iterate, incrementalize, and implement. While her academic colleagues laugh at her for her choice of such a non-theoretical language like Python, her students love it, and she seems to be having the last laugh, obtaining publication-worthy results that don't require advanced LaTeX skills, nor writing in a dead language like SETL (of which she is also a great fan, and which, via ABC, had some influence on Python -- see also below). Annie told me an amusing anecdote about an inscrutable security standard produced by NiST a decade ago, with a fifty-page specification written in Z. She took a 12-page portion of it and translated it into a 120-line Python program, which was much more readable than the original, and in the process she uncovered some bugs in the spec! Another anecdote she recounted had reached me before, but somehow I had f

## Asynchronous RPC in App Engine Today

DevFeed: [Asynchronous RPC in App Engine Today](<https://devfeed.tech/articles/asynchronous-rpc-in-app-engine-today-38888.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2011/01/asynchronous-rpc-in-app-engine-today.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2011-01-24T18:07:00Z

Content type: tutorial

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Remote Procedure Call (RPC)](<https://devfeed.tech/topics/rpc.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>), [client library](<https://devfeed.tech/topics/client-library.md>), [servers](<https://devfeed.tech/topics/servers.md>)

Tags: [appengine](<https://devfeed.tech/tags/appengine.md>), [asynchronous](<https://devfeed.tech/tags/asynchronous.md>), [client-library](<https://devfeed.tech/tags/client-library.md>), [fetch](<https://devfeed.tech/tags/fetch.md>), [python](<https://devfeed.tech/tags/python.md>), [rpc](<https://devfeed.tech/tags/rpc.md>), [sdk](<https://devfeed.tech/tags/sdk.md>)

### AI overview

This article introduces low-level asynchronous RPC support in Google App Engine. It demonstrates sending requests to multiple remote service instances with urlfetch and using UserRPC.wait_any() to return the first completed result, while noting how to handle subsequent results and outstanding requests.

### Source excerpt

While I was laying the groundwork for a new datastore client library with support for asynchronous requests, I added some low-level support for asynchronous RPCs that you can use today. The only App Engine API with documented support for asynchronous RPCs is urlfetch, and it happens to be quite useful with that. Suppose you want to fetch some data from a remote service. The remote service has two instances, both of which are slightly flaky. What you want to do is send off requests to both servers simultaneous (this is the easy part) and then wait for the first one to give you a result. The latter uses the new API that I'm about to describe here. from google.appengine.api import urlfetch, apiproxy_stub_map urls = ['http://service1.com', 'http://service2.com'] # Etc. rpcs = [] for url in urls: rpc = urlfetch.create_rpc(deadline=1.0) urlfetch.make_fetch_call(rpc, url) rpcs.append(rpc) rpc = apiproxy_stub_map.UserRPC.wait_any(rpcs) # Now rpc is the first rpc that returned a result. Have at it! That's all! If you're interested in learning more about this handy class method, just check out its docstring in the App Engine SDK. Note that technically you should loop until it doesn't return None. You can also repeatedly call wait_any() to get subsequent result. Make sure to remove the rpc it returns (if any) from the list, since otherwise it will return the same rpc over and over again: the specification of wait_any() says it returns the first rpc in the given list that completes, regardless of whether you have seen it before. Also note that there currently is no way to cancel the other RPCs, which is why I passed a low deadline to the create_rpc() call. The problem is that even if you completely ignore the other RPCs, the App Engine runtime still waits for them to finish or timeout. Finally, there is also a similar class method UserRPC.wait_all(), which waits until all RPCs in the list you pass it are complete. (It doesn't return anything.) PS. Don't look too closely at the

## A new App Engine datastore API

DevFeed: [A new App Engine datastore API](<https://devfeed.tech/articles/a-new-app-engine-datastore-api-38889.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2011/01/new-app-engine-datastore-api.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2011-01-07T20:20:00Z

Content type: release

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [API](<https://devfeed.tech/topics/api.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [generators](<https://devfeed.tech/topics/generators.md>), [Coroutines](<https://devfeed.tech/topics/coroutines.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [appengine](<https://devfeed.tech/tags/appengine.md>), [classes](<https://devfeed.tech/tags/classes.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [design](<https://devfeed.tech/tags/design.md>), [generators](<https://devfeed.tech/tags/generators.md>), [kind](<https://devfeed.tech/tags/kind.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [python](<https://devfeed.tech/tags/python.md>)

### AI overview

Guido van Rossum introduces Datastore Plus, a preliminary redesign of the Python datastore API for App Engine users. The proposal includes cleaner Key, Model, Property, and Query implementations and a high-level asynchronous API using Python generators as coroutines. The implementation is available as an open-source project for review, with feedback requested on its documentation, implementation, and API design.

### Source excerpt

This post is primarily intended for App Engine users (and of those, only Python users :-). Over the past months I've been working on a new design for the Python datastore API, under the code name Datastore Plus. The new design is very ambitious, and changes a lot of things: New, cleaner implementations of Key, Model, Property and Query classes High-level asynchronous API using Python generators as coroutines (PEP 342) The design is meant to eventually replace the existing db package in the App Engine runtime library, but for now, it is just an open source project which you have to download and copy into your application. I am not at all finished with this design, but I believe in listening to users, so I am making a preliminary version of the new API available for review. Please send me your thoughts, either in this blog, or via private mail to guido (at) google.com. Note that the implementation works, but I cannot guarantee that it won't change. Documentation is here: http://goo.gl/D6Onw The project to check out is here: http://goo.gl/GapXI You must use Mercurial to check out the project, but it's fine to check it out anonymously -- I don't require anybody to log in to look or comment. (If using Mercurial is too much of a burden, there's also a zipfile on the site, but I don't plan to update it frequently.) I'm interested in receiving any kind of feedback at all. It would help me if you could clarify whether your feedback is about an issue with the documentation, an issue with the implementation, or an issue with the API design -- though I realize you can't always tell the difference. :-) (You can also comment on the thread in the google-appengine-python group here: https://groups.google.com/group/google-appengine-python/browse_thread/thread/454cb81d49e759f2.)

## While-you-type Searching

DevFeed: [While-you-type Searching](<https://devfeed.tech/articles/while-you-type-searching-38887.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2009/12/while-you-type-searching.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2009-12-11T21:45:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Google Search](<https://devfeed.tech/topics/google-search.md>), [Firefox extension](<https://devfeed.tech/topics/firefox-extension.md>), [Web](<https://devfeed.tech/topics/web.md>), [DuckDuckGo](<https://devfeed.tech/topics/duckduckgo.md>), [Firefox](<https://devfeed.tech/topics/firefox.md>), [Users](<https://devfeed.tech/topics/users.md>)

Tags: [blog-post](<https://devfeed.tech/tags/blog-post.md>), [extension](<https://devfeed.tech/tags/extension.md>), [firefox](<https://devfeed.tech/tags/firefox.md>), [google-search](<https://devfeed.tech/tags/google-search.md>), [privacy](<https://devfeed.tech/tags/privacy.md>), [searching](<https://devfeed.tech/tags/searching.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

The post proposes a Firefox extension that would search the last few words or the current paragraph while someone is writing and display snippets from top Google results in an unobtrusive pop-up. It distinguishes this idea from autocomplete because the user would not need to initiate a search, and it notes possible benefits for finding answers while writing alongside a privacy concern.

### Source excerpt

Here's an idea that is just begging to be implemented as a Firefox extension. You know how there's a while-you-type spell checker that's always on when you are editing text in a multi-line text box? There should be a feature that takes the last few words you're typing (or the entire current paragraph, or whatever works best), does a Google search, and presents snippets for the top few results in an unobtrusive pop-up window. Sure, maybe you're thinking "It looks like you're writing a letter. Do you want me to write it for you?" (the Microsoft paperclip). But using web search instead of a fixed set of patterns could actually make this useful. Imagine the number of messages to customer support forums that will never have to be sent because this feature pops up the answer the user was looking for. And so on. You might also think, "this already exists, it's called Google auto-suggest." But I specifically want it to work when I'm not (yet) actively searching, but just writing. (If it already existed, it might have stopped me from writing this blog post. :-) Twitter might also become a different place if users realized how many others have already entered the same item. Of course there's a little privacy issue. But still, if this existed, I'd opt in! (In fact, I did half a dozen searches while I was typing this. How much easier it would be if I didn't have to select text, switch to a different tab, paste, and hit enter, losing my writing context each tim.)

## Python in the Scientific World

DevFeed: [Python in the Scientific World](<https://devfeed.tech/articles/python-in-the-scientific-world-38886.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2009/11/python-in-scientific-world.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2009-11-05T18:12:00Z

Content type: article

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [Computing](<https://devfeed.tech/topics/computing.md>), [NumPy](<https://devfeed.tech/topics/numpy.md>), [data](<https://devfeed.tech/topics/data.md>), [IPython](<https://devfeed.tech/topics/ipython.md>)

Tags: [computing](<https://devfeed.tech/tags/computing.md>), [data](<https://devfeed.tech/tags/data.md>), [library](<https://devfeed.tech/tags/library.md>), [python](<https://devfeed.tech/tags/python.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [time-series](<https://devfeed.tech/tags/time-series.md>)

### AI overview

The article reports on a Py4Science meeting at UC Berkeley featuring lightning talks about projects using Python for scientific work. It describes Python and extensions such as NumPy being used across fields including neuroimaging, astronomy, genomics, and symbolic mathematics.

### Source excerpt

Yesterday I attended a biweekly meeting of an informal a UC Berkeley group devoted to Python in science (Py4Science), organized by Fernando Perez. The format (in honor of my visit) was a series of 4-minute lightning talks about various projects using Python in the scientific world (at Berkeley and elsewhere) followed by an hourlong Q&A session. This meant I didn't have to do a presentation and still got to interact with the audience for an hour -- my ideal format. I was blown away by the wide variety of Python use for scientific work. It looks like Python (with extensions like numpy) is becoming a standard tool for many sciences that need to process large amounts of data, from neuroimaging to astronomy. Here is a list of the topics presented (though not in the order presented). All these describing Python software; I've added names and affiliations insofar I managed to get them. (Thanks to Jarrod Millman for providing me with a complete list.) Most projects are easily found by Googling for them, so I have not included hyperlinks except in some cases where the slides emphasized them. (See also the blog comments.) Fernando gave an overview of the core Python software used throughout scientific computing: NumPy, Matplotlib, IPython (by Fernando), Mayavi, Sympy (about which more later), Cython, and lots more. On behalf of Andrew Straw (Caltech), Fernando showed a video of an experimental setup where a firefly is tracked in real time by 8 camaras spewing 100 images per second, using Python software. Nitimes, a time-series analysis tool for neuroimaging, by Ariel Rokern (UCB). A comparative genomics tool by Brent Pedersen of the Freeling Lab / Plant Biology (UCB). Copperhead: Data-Parallel Python, by Bryan Catanzaro (working with Armando Fox) and others. Nipype: Neuroimaging analysis pipeline and interfaces in Python, by Chris Burns (http://nipy.sourceforge.net/nipype/). SymPy -- a library for symbolic mathematics in Pure Python, by Ondrej Certik (runs on Google App Engin

## Lovely Python book published in Chinese and reaches China-Pub.com's top five

DevFeed: [Lovely Python book published in Chinese and reaches China-Pub.com's top five](<https://devfeed.tech/articles/lovely-python-38885.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2009/09/lovely-python.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2009-09-17T16:48:00Z

Content type: news

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>)

Tags: [book](<https://devfeed.tech/tags/book.md>), [python](<https://devfeed.tech/tags/python.md>)

### AI overview

A Chinese-language introduction to Python titled Lovely Python was published, and the article says it reached the top five of China-Pub.com's bestseller list, briefly reaching number two. The author also wrote a foreword for the book.

### Source excerpt

I just heard from Bill Xu in China. His book "Lovely Python", an introduction to Python in Chinese, was just published and shot to the top-5 of china-pub.com's bestseller list (at some point it even was #2). I can't read Chinese, but I am very glad that there's a book on Python available for Chinese readers, and that's why I wrote a brief foreword for the book as well. (Also because I am one of the mentors of Zeuux.org.) Links: This is the Lovely Python page on the book store: http://www.china-pub.com/195771 This is the bestseller list: http://www.china-pub.com/rank/?type=59&act=day&v=7 This is the cover (with front and back) of Lovely Python: http://www.zeuux.org/pub/lovely-python-cover.jpg This is my preface: http://www.zeuux.org/science/zeuux-lovely-python-preface-by-guido.html (English) http://www.zeuux.org/science/zeuux-lovely-python-preface-by-guido.cn.html (Chinese translation by Bill Xu)

## A Comparison of Microsoft, Java, and Python Community Cultures

DevFeed: [A Comparison of Microsoft, Java, and Python Community Cultures](<https://devfeed.tech/articles/progressive-vs-conservative-38883.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2009/07/progressive-vs-conservative.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2009-07-21T18:50:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Microsoft](<https://devfeed.tech/topics/microsoft.md>), [Python](<https://devfeed.tech/topics/python.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [book-review](<https://devfeed.tech/tags/book-review.md>), [java](<https://devfeed.tech/tags/java.md>), [microsoft](<https://devfeed.tech/tags/microsoft.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [politics](<https://devfeed.tech/tags/politics.md>), [python](<https://devfeed.tech/tags/python.md>)

### AI overview

An opinion piece compares perceived Microsoft, Java, and Python community cultures using George Lakoff's strict-father and nurturing-family political models. It also speculates about Oracle, Sun, Linus Torvalds, and Richard Stallman.

### Source excerpt

[Warning: loose thoughts ahead!] Microsoft's Eric Meijer gave a talk at Google yesterday, and afterwards I had lunch with him. One of his remarks was (I paraphrase) that Microsoft users want to be told what to do, while the Java community is more vocal or argumentative. (He didn't discuss the Python community but in my experience it falls in the latter category.) Now, while lying sick in bed with a hacking cough, I am reading George Lakoff's "The Political Mind". This book tries to model the distinction between conservative and progressive politics on the differences between two different ideal family models: the strict father (from which most conservative moral virtues flow according to Lakoff), and the nurturing family, from which the progressive moral virtues derived. The parallel with Microsoft users vs. Java users seems to be all too obvious: Microsoft as the strict father: If you are loyal you will be rewarded, but if you stray you will be punished; whereas in the Java (or Python) community benefits and moral goodness flow from helping each other (which includes sharing open source software, and, apparently, bikeshedding :-). What about other companies and communities? I can't help thinking of Oracle as the ultimate strict-father company, which makes me worry about the Sun takeover. Are Linus Torvalds and Richard Stallman strict fathers?

## Review of IronPython in Action and Its Focus on Windows Programming

DevFeed: [Review of IronPython in Action and Its Focus on Windows Programming](<https://devfeed.tech/articles/ironpython-in-action-and-the-decline-of-windows-38881.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2009/06/ironpython-in-action-and-decline-of.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2009-06-26T19:05:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [.NET](<https://devfeed.tech/topics/net.md>), [C#](<https://devfeed.tech/topics/csharp.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [book-review](<https://devfeed.tech/tags/book-review.md>), [c-sharp](<https://devfeed.tech/tags/c-sharp.md>), [net](<https://devfeed.tech/tags/net.md>), [programming](<https://devfeed.tech/tags/programming.md>), [python](<https://devfeed.tech/tags/python.md>), [software](<https://devfeed.tech/tags/software.md>), [windows](<https://devfeed.tech/tags/windows.md>)

### AI overview

This opinion article reviews IronPython in Action by Michael Foord and Christian Muirhead. It praises the book's breadth, useful information, and running examples, while noting that IronPython developers working on .NET need familiarity with C# because of platform limitations and APIs designed for C#.

### Source excerpt

While CPython still rules on python-dev, especially with the excitement around Py3k, Python's alternative implementations are growing up: PyPy is now capable of running Django, Jython just released version 2.5, and IronPython has been releasing significant milestones like clockwork. I get a lot of satisfaction out of such milestones: they help establish Python as a language you can't ignore, no matter which platform you are using. Seeing a book like IronPython in Action, by Michael Foord and Christian Muirhead, is another milestone for IronPython. This is a solid work in every aspect, and something nobody using IronPython on .NET should be without. The book is chock full of useful information, presented along with a series of running examples, and covers almost every aspect of IronPython use imaginable. After reading the table of contents and the introduction by IronPython's creator Jim Hugunin, I couldn't help myself and skipped straight to appendix A, "A whirlwind tour of C#." This is a useful thing to have around for readers like myself who haven't really kept track of things in the .NET world. Maybe I'll comment more on C# another time. For now, let me just say that it seems a decent enough system programming language. The more relevant thing about C# is that you can't avoid learning it if you are developing on .NET, even when using IronPython. There just are too many issues where IronPython has to work around a limitation of C#. This happens often indirectly where a particular API was designed purely with C# in mind. And then there's the issue that Microsoft's API documentation focus on C#. (And VB.NET, I suppose, which after seeing some samples of in this book I have less desire to know than ever.) There are some introductory chapters -- some fluff about .NET and the CLR, an introduction to Python, and an introduction to with .NET objects from IronPython. The Python introduction has a slight emphasis on differences between IronPython and CPython, though there

## Highs and Lows of IEEE Computer Magazine

DevFeed: [Highs and Lows of IEEE Computer Magazine](<https://devfeed.tech/articles/highs-and-lows-of-ieee-computer-magazine-38880.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2009/06/higs-and-lows-of-ieee-computer-magazine.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2009-06-17T01:47:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Security](<https://devfeed.tech/topics/security.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Windows](<https://devfeed.tech/topics/windows.md>), [Python](<https://devfeed.tech/topics/python.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [python](<https://devfeed.tech/tags/python.md>), [security](<https://devfeed.tech/tags/security.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [worm](<https://devfeed.tech/tags/worm.md>)

### AI overview

The author reviews an issue of IEEE Computer, praising its detailed history of the Conficker worm and its discussion of the worm's creators and geographic distribution. The author criticizes an article on software engineering ethics for presenting a redundant and unhelpful table, and notes that the Conficker discussion omitted potentially useful data on installed PCs by country.

### Source excerpt

I still read a few print publications, including IEEE Computer. Today's issue contained a high and a low: Today's high point was a detailed history of the Conficker worm. Since we're a Macintosh family, and Google typically has its security stuff in order, I was barely aware of it. The sophistication of the worm's creators is almost admirable. (They probably use Python too. :-) An interesting table in the article included information about which countries contribute the most to the worm's population. China, Brazil and Russia top the list. You could have all sorts of theories on why this would be; personally I'm assuming it's a combination of sheer number of computers plus widespread use of bootlegged copies of Windows. The low point was an article on "Software Engineering Ethics." Why a low point? Look at this table and think of how many bits of information it contains: Using postphenomenology for software engineering ethics ActionsDesirableUndesirable Amplify experiences that are+- Reduce experiences that are-+ Invite actions that are+- Inhibit actions that are-+ Ironically, this pointless table contains a redundant column, while the table I mentioned above was missing a column that would have been useful -- how many PCs are installed in each country. Oh well. PS: Googling for "postphenomenology" gives this as the title of the first hit: "If phenomenology is an albatross, is postphenomenology possible?" The web knows best.

## Review of Using Google App Engine by Charles Severance

DevFeed: [Review of Using Google App Engine by Charles Severance](<https://devfeed.tech/articles/new-app-engine-book-38882.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2009/06/new-app-engine-book.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2009-06-15T16:20:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Web Development](<https://devfeed.tech/topics/web-development.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Python](<https://devfeed.tech/topics/python.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [CSS](<https://devfeed.tech/topics/css.md>), [HTML](<https://devfeed.tech/topics/html.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [Ajax](<https://devfeed.tech/topics/ajax.md>)

Tags: [ajax](<https://devfeed.tech/tags/ajax.md>), [appengine](<https://devfeed.tech/tags/appengine.md>), [book](<https://devfeed.tech/tags/book.md>), [book-review](<https://devfeed.tech/tags/book-review.md>), [caching](<https://devfeed.tech/tags/caching.md>), [css](<https://devfeed.tech/tags/css.md>), [google](<https://devfeed.tech/tags/google.md>), [html](<https://devfeed.tech/tags/html.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [python](<https://devfeed.tech/tags/python.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

A review of Charles Severance's book Using Google App Engine, describing it as an introductory resource for web programming and App Engine. The book covers enough HTML, CSS, Python, and JavaScript to help beginners create dynamic websites, including datastore models, forms, simple AJAX patterns, caching, and debugging, while directing readers to other resources for deeper study.

### Source excerpt

At Google I/O I received a copy of Using Google App Engine by Charles Severance, published by O'Reilly. I haven't kept track, but this appears one of the first App Engine books to actually hit the stores -- an Amazon search for App Engine showed up one other book (Developing with Google App Engine by Eugene Ciara, published by APress) and many titles available for pre-order (including additional titles from the same publishers). Severance's book is a quick read if you're already familiar with the basic premises of web programming. I think it would do well in an introductory course about the topic. (The author teaches at the University of Michigan so this is likely how he developed the material in the first place.) In fact, quite a bit of the book could well have come from a pre-existing earlier course: the chapters on HTML, CSS, Python and JavaScript barely mention App Engine. Don't get me wrong, I think that's a good approach: in my experience quite a few App Engine users are new to web programming in general, or could at least use a refresher course. If you don't fall in this category, don't feel offended: you just probably aren't the intended audience for this book. On the other hand, if you've developed for the web but haven't used Python before, you could probably just skip the HTML/CSS chapter and dive right into Python and App Engine. If you're a blank sheet where it comes to programming, don't expect to come out an experienced Python developer: the book only covers enough of the language so you can get started with App Engine without feeling you're just copying and pasting text. The same is actually true for any topic covered -- in many cases the book actually recommends that you study a topic more in-depth using other resources. But in each case the book's coverage is enough to get you started with the creation of dynamic web sites, and that's the important part. After all, you didn't learn your mother tongue by studying the rules of grammar either: you lea

## Comparing Two Python Programming Books for Beginners

DevFeed: [Comparing Two Python Programming Books for Beginners](<https://devfeed.tech/articles/so-you-want-to-learn-python-38879.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2009/05/so-you-want-to-learn-python.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2009-05-26T22:46:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Computer science](<https://devfeed.tech/topics/computer-science.md>), [Learning](<https://devfeed.tech/topics/learning.md>)

Tags: [beginners](<https://devfeed.tech/tags/beginners.md>), [book-review](<https://devfeed.tech/tags/book-review.md>), [books](<https://devfeed.tech/tags/books.md>), [compare](<https://devfeed.tech/tags/compare.md>), [experiments](<https://devfeed.tech/tags/experiments.md>), [gotchas](<https://devfeed.tech/tags/gotchas.md>), [projects](<https://devfeed.tech/tags/projects.md>), [python](<https://devfeed.tech/tags/python.md>), [review](<https://devfeed.tech/tags/review.md>), [teaching](<https://devfeed.tech/tags/teaching.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

The article compares Hello World and Practical Programming, two books that teach Python to people without prior programming experience. It argues that the books target different audiences: Hello World is aimed at children and uses an accessible, illustrated style, while Practical Programming takes a more mature, computer-science-oriented approach.

### Source excerpt

There's never a lack of books to use for learning Python. I occasionally receive books for review, but I don't have a particularly good yardstick to judge such books by: I find that they all contain some factual errors and some oddities of presentation, but I have no idea whether those matter for the readers. Even Knuth's books are full of errors: for example the errata for Vol. 1 (2nd ed.) are a staggering 80 pages, but I doubt anybody besides Knuth himself is bothered by this knowledge. Recently I got a review copy of "Hello World", and a colleague kindly lent me his copy of "Practical Programming". I think it's interesting to compare the two a bit, since they both claim to be teaching Python programming to people who haven't programmed before. And yet their audiences are totally different! "Hello World", published by Manning, is written by Warren Sande and his son Carter. The subtitle is "Computer programming for kids and other beginners", but I think if you're not a kid any more you might get annoyed by the rather popular writing style. If you are a kid, well, you will probably enjoy a book written with you in mind, and you will learn plenty. The only prerequisites are reading and typing skills, a computer that wasn't built in the stone age, and a desire to learn more about what goes on inside that computer. The book uses short chapters with lots of illustrations, often cartoons and jokes. There are lots of opportunities to try out the material and learn that way. Each chapter ends with a review section, some tests, and more experiments to try. The book pays plenty of attention to typical "gotchas", so that if you get stuck at some point, there probably is help nearby to get you unstuck. "Practical Programming" is written by Jennifer Campbell, Paul Gries, Jason Montojo, and Greg Wilson. This a team composed of three university professors and a former student of theirs. Their purported goal is to teach Computer Science (with Capital Letters), and Python is merely