Goddamit. Sorry, people. I accidentally deleted all comments across the site and didn’t have a backup of the one’s left on this article. I’ve entered them all in manually (the horror) from a cached version of this page but I’m not adjusting the timestamps one by one so those are all wrong. Also, permalinks to comments were broken. My bad.
Ideally, we shouldn’t have to use require at all since Ruby is easily capable of autoloading based on references. I should be able to just reference a class, module or method and let the environment worry about loading libraries. In addition to granting flexibility to admins, this would also be more convenient for the programmer.
good news though that the conversation (as nasty & annoying as some of it was on the msg board) maybe was seen by a lot of Ruby devs and more folks understand more about rubygems because of it.
The point I was hoping to make is that rubygems is designed so that you don’t have to add the line “require 'rubygems'” in order to take advantage of its features. Rubygems functions at a level above your library and there’s a lot of work that went into making it work that way. The executable wrapper scripts, dependency loading by gemspec, etc. These features work the way they do so that you don’t have to require 'rubygems' in your code.
The point I was not trying to make is that rubygems is bad or that people shouldn’t use it. I use rubygems and think it’s a critical piece of Ruby’s success – I just don’t have the line “require 'rubygems'” anywhere in my library’s source code because it’s not necessary or convenient and makes it hard / impossible for other environments (like bundler, rip, GAE, debian, hand rolled, etc) to use the library without rubygems, which is often important.
This piece obviously didn’t get those points across very well and that’s my fault. Most people came away with the idea that I’m attacking rubygems and suggesting that people not use it. I’m not. I like rubygems tremendously and use it every day — I don’t like code that explicitly requires it for no reason. Luckily, Yehuda and Josh have published much better pieces that argue something similar to what I intended to say here.
Ryan raises an interesting issue. At what point does it become considered polite to advocate proscribing how people chose to write their project/application? Specifically can’t some one make the case Ryan does for almost any Gem your application may use?
For example your gem might use library A to provide method x, however I prefer library B’s method x. Do I really have grounds to tell you: “You should never do this in a source file included with your library, app, or tests: require ‘a’”
Or can a rational case be made for determining which library’s are subject to proscription and which are not? Could that case please be made? It will be interesting.
Ryan’s post doesn’t give much insight into why he arrived at rubygems. @ScottBauer suggests memory is a criteria, but also suggests a library should be orthogonal to packaging and distribution. Why just these dimensions. Shouldn’t a library be independent of file IO? network IO? Or just about any other external process? Overall I think Ryan’s point would have been well made when RubyGems came out. By coming out with this rebuke after RubyGem is standard in 1.9, this admonition seems more like sour grapes about a community’s choice. No?
I think the borders on the textarea and text field don’t contrast the background enough, so it’s hard to see there’s a field below the textarea where you can leave your name.
@Arcturus try this. Load up irb and check memory usage, then require rubygems and check again. Good times… Libraries shouldn’t be so tightly coupled to their packaging/delivery mechanisim that you need to load it up at runtime.
@Vishnu: well apparently Ruby 1.9 comes with gems in the stdlib and requires it automatically. So if anything require 'rubygems' is even more wrong in 1.9.
@Ryan On news.yc, somebody pointed out an interesting use case: what if the library needs a specific version of a specific third-party library? With gems, this can be specified with e.g. gem 'png', '= 1.1'.
Would that be a valid use case for require ‘rubygems’ or do you suggest just putting the version requirement in the lib’s doc?
I totally agree with Gintas.
The thing is this: when you give the impression that something is writable from outside people will use it that way. Going in later to protect that member from garbage may help your specific object, but will most definitely not protect the application.
At the expense of a lot of critique:
To me, getters and setters are nothing more then making a field public without getting your ass kicked by purists. Sure, you have control of what goes in and out… but as long as the application doesn’t know that something might not get in or out, it will still break.
How did they come up with the verb “POST”? That seems more of a metaphor to me, for posting an item in the mail. Or maybe posting something to a wall or posting an advert in a magazine.
It doesn’t seem to match up with what you’re doing with HTTP in that sense.
I read 335+ comments just to see how shrill the sexist claims would get.
My wife is at least as smart as I am, but she knows next to nothing about what I do. Similarly, I, she.
The relevance of REST is a pretty abstract thing — I wouldn’t view the presentation format as “for dummies” so much as “for another person who’s smart enough to generalize a set of preexisting comprehensions and apply them to a new (to them) area”. Specific descriptions are usually much simpler than general ones (C.f. Einstein, relativity), but smart people crave the general ones because they offer a deeper understanding of the current topic and of the world.
Also, I’m surprised that in 335+ comments, no one has mentioned the resemblance to a certain classic computer science book regarding a sometimes-difficult-to-grasp but super-powerful language from the early days of computing yet still retains huge relevance today. Coincidentally, probably, the title of that book could be interpreted as condescending too. Anyone?
I believe the universal term I’ve heard is “If your mother or grandmother understands it, then anyone can”
And frankly, I see that as a good explanation for anyone or their children :)
How silly that you have to explain how this article isn’t sexist. Someone is always bound to take a negative spin on anything.
Great job explaining REST in simple terms. I will now explain REST to my brother and/or sister the way you just did to your wife. Actually, I will explain this to my team who is still trying to learn REST as I add support for it in our product.
Amazing post! Any one claiming that this post is sexist needs to get their head out of their ass and wake up to the real world of the way things and people work. No one would have said anything if it was titled the other way around.
So we don’t need any other protocols but http?
Involved way of making a point, but I can respect the effort that went into it. Ryan can you please explain to your wife the advantages of lift/scala on the GAE vs. python or using a different framework from django like web2py. I’m very confused on real world applications (learning from scratch) and could use some help.
shrug I didn’t think the post was sexist, but I do think Pierre’s comment was. Pierre said:
“I didn’t think your post was sexist. For Pete’s sake lighten up people! Fact is, it’s a very common scenario as described in this post. If the author would have pretended to be a woman explaining it to her non-tech husband, it would only be patronizing, if anything, and you’d have to be naive to buy it.”
Why, Pierre, would the above conversation be patronizing if explaining to a man, but it’s fine explaining to a woman? It shouldn’t be patronizing to either. And a woman explaining something to man who isn’t in her field shouldn’t be laughable either.
Wow! This makes sense to me now and I’m not even a woman! JK ladies. but it does make sense and I’m going to look for ways to incorporate this into my current project.
@RT Butte: the idea is that you don’t have to write a bunch of getters and setters for all of your properties from the start. Instead, you add them when you need them, and only for the properties you actually need them for.
Uh, maybe this is just me, but all you have done is write getters and setters and wrapped them in a call to property(). Which is just exactly what you said not to do.
Maybe I’m missing some tiny detail as to why this is not the case, but to my eyes, the only difference between Java and Python here is simply indentation.
If I really have to write a getter/setter for every member variable in a class, then properties are a waste of space and (more importantly) my time. Now, if I can use lambdas, then everything’s cool.
Another thank you! A coworker pointed me at this, turns out that “git add —patch” works fine with git-svn, too, and it really does give you more freedom to fix bugs right when you notice them (I’d been doing git-stash/fix/git-stash-pop but this is much smoother.) Best of both worlds…
Last year I did a fairly serious REST web service project using Django. I loved it. I haven’t used Ruby on Rails, but I cannot imagine it being better overall.
Python needs an answer to RoR; well, it has one, and that answer is Django. If you are considering doing a database-backed web project in Python, the only research you need is to read The Django Book.
Full disclosure: I don’t benefit in any way from you using or not using Django. My current job is writing audio DSP code in C. I just really loved working in Django.
Hi, thanks for the gem Ryan, I’ve been using it but I need it to output unsanitized html, passing or not :html_filter makes no diference, my html gets sanitized anyway (I am using 1.3.4).
The validation model and the expiration model are nicely explained through the simple diagrams that I really like, by the way. Plus, I admire that Ryan checks back to see the comments from time to time and answers the questions. Thanks in the name of all, Ryan!
I don’t believe this conversation. Now, if you want to say this is a fictional and fictionally useful conversation with ‘my wife’? Then fine. I’m married. There is noooooooooooo way you actually had this conversation with your wife. Respond to me and I will not respond. I will not argue with a mad man. EOS/EOF
OMG. My wife is a nurse and I get the dumbed down version of why somebody died in recovery or had to be returned to surgery because of something a nincompoop doctor did. I’m not in the medical profression (thank God) and she’s not an IT person. We’re busy and I don’t have time to get a medical degree and she doesn’t have time to get an IT degree. If we don’t dumb our work things down to each other we wouldn’t speak at all.
“So, honey, what’s the white count got to do with it?”
Excellent explanation and a ludicrous number of posts by complete ninnies.
Excellent! I just had to start working on REST and I’m happy to have read this post which explains me about REST such a simple manner.
Great Job, Ryan!
Hehe, I love websequencediagrams! I never used it before, but now I’m going to. I actually thought that you really drew those diagrams up on a piece of paper and I started envying you for the nice ordered handwriting, LOL…
I spent all day banging my head against GeSHi and SyntaxHighlighter and not getting what I wanted (using with Markdown of course.) And then late at night I found this, which is exactly what I have been looking for. Thank you sir. Elegant, and user friendly.
I use the GNU utils on Windows, and don’t once think about that it’s the GNU utils. I just think in terms of grep, cut, wc, etc. So should I call this GNU/Windows??
Almost all Windows users (not that you care what we think) will think of the GNU/Linux vs Linux controversy as being totatally absurd. Linux is now and will in the future be the sole name of the OS. Stallman deserves great credit for what he has done, but that credit doesn’t include naming rights when the name thus constructed is awkward.
The GNU/Linux vs Linux naming debate is typical of the theoretical, abstract, totally time wasting discussions that Linux and Unix snobs tend to partake in. I am reminded of the abstract comparison to theologians discussing how many angels can dance on the head of a pin.
I was inspired by ionous’s page to propose the following. First, here’s a faster, two-line replacement for the three-line loop you dislike:
for fred in (person for person in peeps if person.name == 'Fred'):
break
By the way, your version is missing a break, so it checks the whole sequence (taking time) and keeps storing matches in fred (giving you the last matching item).
Even better, Python 2.6 lets you simplify to just one line:
fred = next((person for person in peeps if person.name == 'Fred'), None)
There, no more function call overhead!
If you’re not using Python 2.6 yet, and still prefer a function, here’s a drop-in replacement that uses the above technique:
def find(f, seq):
"""Return first item in sequence where f(item) == True."""
for it in (item for item in seq if f(item)):
return it
Personally, I prefer the greater flexibility of getting the index of the item, rather than the item itself (as in list.index()). This makes it easy to modify a list; for example, to delete the found item.
index = next((i for i in xrange(len(peeps)) if peeps[i].name == 'Fred'), None)
if index is not None:
fred = peeps.pop(index)
This approach also lets you efficiently find the last occurence of a matching item, by searching backwards from the end:
index = next((i for i in xrange(len(peeps) - 1, -1, -1) if peeps[i].name == 'Fred'), None)
And here’s a corresponding function. (I’m taking the liberty of swapping the arguments to match pythonic built-in functions like max() and sorted(), rather than functional-style ones like filter().)
# Python 2.6
def index(seq, f):
"""Return the index of the first item in seq where f(item) == True."""
return next((i for i in xrange(len(seq)) if f(seq[i])), None)
# Python 2.5 or 2.4
def index(seq, f):
"""Return the index of the first item in seq where f(item) == True."""
for index in (i for i in xrange(len(seq)) if f(seq[i])):
return index
An rindex() function for searching in reverse may be accomplished as above.
I hate public attributes on general principles (breaks encapsulation) so I’m not impressed with the rant on evil. Neither am I enthused by the property decorator described in http://docs.python.org/library/functions.html (someone above suggested decorators).
What I am looking for is a shortcut to creating default getter/setter’s until I get around to implementing the extra logic I know I’ll need later. I suppose I’ll just abuse my IDE.
BTW: it staggers me that anyone would think you don’t need an IDE for ANY language no matter how awesome. The best I’ve found thus far is a combination of Eclipse, the pyDev Eclipse plugin, and pyLint (which integrates seamlessly into Eclipse via pyDev). Good news: it’s free and wicked useful. Bad news: setting it up for the first time will probably set you back an hour or two.
Loved the article. Didn’t have a clue about rest before I read it.
To all the people calling the article sexist; why did you (the politically correct) assume that his wife was female in the first place, the author did not mention the sex of his wife in the post and she could have been male (married gay couple: Yes it happens in the real world!), so who are the sexists after all.
Excellent Post Ryan. Few people have both the ability to correctly understand a given technical topic and clearly communicate their understanding to others. Fewer still have the knack for reducing the complexity without appearing patronizing. Good work indeed!
I’ve been chewing on this for some time. I was trying to write a “framework” for the haXe platform that works similarly to Rails, then realised that it wasn’t such a good idea. Why? Well, I realised that, for the most part, developers are happy to use and reuse libraries that they feel comfortable with. There’s no point learning a new framework if you’ve used something for years and it works. What’s more, any framework built in haXe should ideally work for all platforms, as that’s what haXe is all about.
My answer to this was to use what’s already there, but to provide the glue needed to make it more rails like, including libraries, generators, how-to videos and what have you.
haXe already has a fantastic templating system called Templo, it has a super powerful yet lightweight ORM called SPOD and it has a port of PureMVC that compiles in haXe to C++, PHP, Flash 6 – 10, JavaScript and Neko. What more could you want? These libraries are already what existing developers are using, and they like them. Ergo, I’m now spending a lot of development time working on ways to make these libraries work closely with one another, and to shortcut ways in which developers can quickly create common application functionality.
Thanks. I had been fretting over REST like it was all schmancy, and really it was the foundations of HTTP I had once wondered “how come we never use this?” I mean GET sure. POST sure. PUT? never. DELETE — are you crazy? but now on this project (RAILS) …. looking forward to it!
After messing around with this problem myself on and off over the last year, I just discovered that you can now get the active proxy information directly from the scutil command line utility (scutil --proxy). Some form of text processing (sed | awk | perl | grep) is still needed to extract the relevant bits, but this at least cuts down the number of steps, and eliminates the need for a user-created config file.
Thanks for the easy-to-understand REST explanation.
Those of you commenting on sexism in the post – get a grip. Get off the internets, it’s not for you. Stop trolling and looking for a place to feel important.
I had almost the same thing happen to me. I pre-ordered a game on March 6th and ordered a flute book at the same time. I thought they would send the book right away, but no. It would be shipped on June 2 when the game came out. Ok, I thought.
On June 2, it was “shipping soon” – on June 6. I thought, well…ok… a few more days won’t hurt. On the 4th, I thought I would check it out and they had changed the shipping date to the 8th. I sent them an e-mail and told them that would be the last order they would get from me.
2 hours later, I got an e-mail saying they had shipped. Yeah…shipped. It would be in the mailbox on the 13th.
I have installed ‘coreutils @7.4_0+with_default_names (active)’ using MacPorts on MacOSX 10.5. Thus far, I have not experienced conflicts. But, I may uninstall it, install it again without default names, and use aliases just to be safe.
This was a really nice post! Reminded of me explaining search trees, sorting algorithms and formal logic to my girlfriend (who works in the book industry). Sometimes, she would get it quicker than I did. :)
In vim, you can use “:set nowrap” for this effect. Thanks for the tip on less(1), been looking for that for a while but never found it since the manpage doesn’t refer to the functionality as “wrap”. :)
I attend OSU and I had a project that sounds exactly like this, however it was part of an intro computer science sequence (http://www.cse.ohio-state.edu/sce/now/321/index.html) and had nothing to do with AI. The bug program shouldn’t of taken more then 20 or 30 minutes of work even if you put a decent amount of thought into it.
Seems like Jon likes to stretch stories a bit lol.
Does Java not dominate? I have no numbers on the number of websites that use Java, but the simple fact that there are way more web frameworks for Java than for all other languages put together should tell you a couple of things. Yes, one of the things it tells you is that Java developers love architecture a bit too much, but also that Java is very popular with web developers who are smart and well-funded enough to do something about architecture.
I admit Java made a bit of a bad start with junk like Struts, Avalon components, the steaming pile of J2EE and the unholy mess that is Spring, but out of that has come a lot of very valuable innovation. I haven’t seen anything like Wicket for Ruby yet, for example. (Although Lift, which takes the lessons from Wicket, Rails and Django and brings them to Scala sounds extremely promising.)
Anyway, Java does dominate. Maybe not in the most popular websites, but definitely in web frameworks and surrounding technologies. But if you just want a blog or a webshop like any other, then all the stuff Java brings to the table may be overkill. (In any case, I’ve switched to Ruby.)
During a job interview I was asked if I had ever worked with REST services. I didn’t want to simply say no, so instead I said “I know a lot about it, I’ll download it later and learn how to work with it”. This was probably much worse than just simply saying no. Before reading this post, I had always thought of REST in a simplistic manner…an extension or framework you could use in order to exchange data between systems. I wasn’t entirely off with that, however I missed the bigger picture which is that the net is REST.
Thanks a lot for this useful article. It helped me a bunch when I needed to untangle my working copy, to break a gigantic patch down into more easily digestible pieces!
This article kind of leaves me to believe that REST is HTTP (and that somebody outside of IT would care enough to listen to it). That can’t be it. I must search further for answers. Nice job, though. Now I know who Roy Fielding is.
Umm…if it only turns 90 degrees and attacks, wouldn’t it always only cover the same 4 points on the grid? Assuming the attack itself somehow moves it, whether there is actually something to attack or not. Otherwise it just rotates in one spot till an enemy comes along.
The other students' insects must have been pretty darn stupid if that won.
git was driving me mad: now it all makes sense! A wonderful article in a sea of low quality “information”: clear, informative, well written and educational: you’re my hero of the day! Thanks :)
Anyway, the funny thing is that I wasn’t really trying to explain anything at first. It started out as a bit of joke — a be careful what you ask for type thing. But then she says, “Oh, I get it.” and I so I kept on going and the next thing I know we’re talking about polymorphism and URL canonicalization and all kinds of crazy shit.
She gets me going on purpose just so she can see my arms waving and the vein pop out of my head while I’m trying to describe this stuff. I don’t think she really pays all that much attention to what I’m actually saying.
— Ryan Tomayko on Wednesday, September 06, 2006 at 06:20 PM #
Wow, this was written five years ago; glad to see it’s still getting lots of attention! This is very helpful in explaining REST to people.
I’m in a very similar situation with my girlfriend who also sometimes hovers over my shoulder and playfully asks what I’m doing. Then I go on some nerdy rant in full technical detail, explaining the merits of one thing over another…
And as far as sexism goes, that’s absurd. You could easily swap sexes and have a similarly playful exchange!
Ryan Tomayko on Why "require 'rubygems'" Is Wrong
Goddamit. Sorry, people. I accidentally deleted all comments across the site and didn’t have a backup of the one’s left on this article. I’ve entered them all in manually (the horror) from a cached version of this page but I’m not adjusting the timestamps one by one so those are all wrong. Also, permalinks to comments were broken. My bad.
Thu, Sep 10, 2009 at 10:29 AM #
Ryan Tomayko on Why "require 'rubygems'" Is Wrong
Tomasz: even more reason to not require it.
Thu, Sep 10, 2009 at 10:25 AM #
Tomasz Wegrzanowski on Why "require 'rubygems'" Is Wrong
That’s a pretty stupid argument, rubygems is one of those things that should simply be a default for Ruby, and it indeed is in Ruby 1.9.
Thu, Sep 10, 2009 at 10:25 AM #
Jedediah Smith on Why "require 'rubygems'" Is Wrong
Ideally, we shouldn’t have to use require at all since Ruby is easily capable of autoloading based on references. I should be able to just reference a class, module or method and let the environment worry about loading libraries. In addition to granting flexibility to admins, this would also be more convenient for the programmer.
Thu, Sep 10, 2009 at 10:24 AM #
Mark on Why "require 'rubygems'" Is Wrong
good news though that the conversation (as nasty & annoying as some of it was on the msg board) maybe was seen by a lot of Ruby devs and more folks understand more about rubygems because of it.
Thu, Sep 10, 2009 at 10:24 AM #
Ryan Tomayko on Why "require 'rubygems'" Is Wrong
The point I was hoping to make is that rubygems is designed so that you don’t have to add the line “
require 'rubygems'” in order to take advantage of its features. Rubygems functions at a level above your library and there’s a lot of work that went into making it work that way. The executable wrapper scripts, dependency loading by gemspec, etc. These features work the way they do so that you don’t have torequire 'rubygems'in your code.The point I was not trying to make is that rubygems is bad or that people shouldn’t use it. I use rubygems and think it’s a critical piece of Ruby’s success – I just don’t have the line “
require 'rubygems'” anywhere in my library’s source code because it’s not necessary or convenient and makes it hard / impossible for other environments (like bundler, rip, GAE, debian, hand rolled, etc) to use the library without rubygems, which is often important.This piece obviously didn’t get those points across very well and that’s my fault. Most people came away with the idea that I’m attacking rubygems and suggesting that people not use it. I’m not. I like rubygems tremendously and use it every day — I don’t like code that explicitly requires it for no reason. Luckily, Yehuda and Josh have published much better pieces that argue something similar to what I intended to say here.
Thu, Sep 10, 2009 at 10:23 AM #
Mark V on Why "require 'rubygems'" Is Wrong
Ryan raises an interesting issue. At what point does it become considered polite to advocate proscribing how people chose to write their project/application? Specifically can’t some one make the case Ryan does for almost any Gem your application may use?
For example your gem might use library A to provide method x, however I prefer library B’s method x. Do I really have grounds to tell you: “You should never do this in a source file included with your library, app, or tests: require ‘a’”
Or can a rational case be made for determining which library’s are subject to proscription and which are not? Could that case please be made? It will be interesting.
Ryan’s post doesn’t give much insight into why he arrived at rubygems. @ScottBauer suggests memory is a criteria, but also suggests a library should be orthogonal to packaging and distribution. Why just these dimensions. Shouldn’t a library be independent of file IO? network IO? Or just about any other external process? Overall I think Ryan’s point would have been well made when RubyGems came out. By coming out with this rebuke after RubyGem is standard in 1.9, this admonition seems more like sour grapes about a community’s choice. No?
Thu, Sep 10, 2009 at 10:21 AM #
AJ on Why "require 'rubygems'" Is Wrong
Requiring rubygems allows one to reference the internal API used by the Gem commands – something I plan to do in an upcoming version of Chef.
Any suggestions? :)
Thu, Sep 10, 2009 at 10:21 AM #
Ryan Tomayko on Why "require 'rubygems'" Is Wrong
The comment form definitely needs a ton of work. Sorry guys, work in progress. Thanks for the feedback.
Thu, Sep 10, 2009 at 10:21 AM #
Joe Grossberg on Why "require 'rubygems'" Is Wrong
adnan +1
I’m not going to tell Ryan how to design his own blog, but IMHO:
A border color of #eee, when the background of the textarea and the body are both #fff doesn’t provide enough contrast for many users.
And something like “Name:” instead of “—” would be a huge boost in terms of usability and accessibility.
Thu, Sep 10, 2009 at 10:20 AM #
Aaron Patterson on Why "require 'rubygems'" Is Wrong
I AM ANGRY. RAWR
Thu, Sep 10, 2009 at 10:20 AM #
adnan. on Why "require 'rubygems'" Is Wrong
“I dislike being called an ‘Anonymous Coward’”
I think the borders on the textarea and text field don’t contrast the background enough, so it’s hard to see there’s a field below the textarea where you can leave your name.
Thu, Sep 10, 2009 at 10:20 AM #
Scott Bauer on Why "require 'rubygems'" Is Wrong
@Arcturus try this. Load up irb and check memory usage, then require rubygems and check again. Good times… Libraries shouldn’t be so tightly coupled to their packaging/delivery mechanisim that you need to load it up at runtime.
Thu, Sep 10, 2009 at 10:19 AM #
Masklinn on Why "require 'rubygems'" Is Wrong
@Vishnu: well apparently Ruby 1.9 comes with gems in the stdlib and requires it automatically. So if anything
require 'rubygems'is even more wrong in 1.9.Thu, Sep 10, 2009 at 10:19 AM #
Masklinn on Why "require 'rubygems'" Is Wrong
@Vishnu Why would it?
@Ryan On news.yc, somebody pointed out an interesting use case: what if the library needs a specific version of a specific third-party library? With gems, this can be specified with e.g.
gem 'png', '= 1.1'.Would that be a valid use case for require ‘rubygems’ or do you suggest just putting the version requirement in the lib’s doc?
Thu, Sep 10, 2009 at 10:18 AM #
Anonymous on Why "require 'rubygems'" Is Wrong
I agree that it should be unnecessary.
Obvious workaround if you want to use libs that do include it and don’t ever want to use it yourself for performance reasons or whatever:
Thu, Sep 10, 2009 at 10:18 AM #
Vishnu on Why "require 'rubygems'" Is Wrong
Hey, I suppose this changes when Ruby 1.9 is released with bundled Rubygems?
Thu, Sep 10, 2009 at 10:17 AM #
Arcturus Kirwin on Why "require 'rubygems'" Is Wrong
If the case is that you don’t want to use rubygems and I have written a library or an app that requires it… then you can simply NOT USE MY CODE.
I will write my code to MY OWN conventions, not YOURS. It’s simple.
Thu, Sep 10, 2009 at 10:16 AM #
Chris Hanks on 100 People: A World Portrait
I noticed your blow posting and thought I’d share this with you, but your comment form isn’t working for whatever reason.
http://www.snopes.com/science/stats/populate.asp
It looks like they’ve updated it to be a bit more accurate, but some of it is still wrong (those with a computer and a college education).
Sat, Aug 22, 2009 at 07:26 AM #
Anonymous Coward on Getters/Setters/Fuxors
I totally agree with Gintas. The thing is this: when you give the impression that something is writable from outside people will use it that way. Going in later to protect that member from garbage may help your specific object, but will most definitely not protect the application.
At the expense of a lot of critique: To me, getters and setters are nothing more then making a field public without getting your ass kicked by purists. Sure, you have control of what goes in and out… but as long as the application doesn’t know that something might not get in or out, it will still break.
Fri, Aug 21, 2009 at 04:22 AM #
Anonymous Coward on OS X Network Location Support From The Command Line
networksetup command (comment #2) — super-helpful. Thanks.
Thu, Aug 20, 2009 at 02:34 AM #
Chris on How I Explained REST to My Wife
How did they come up with the verb “POST”? That seems more of a metaphor to me, for posting an item in the mail. Or maybe posting something to a wall or posting an advert in a magazine.
It doesn’t seem to match up with what you’re doing with HTTP in that sense.
Wed, Aug 19, 2009 at 07:28 PM #
Anonymous Coward on How I Explained REST to My Wife
I like how while you are “Ryan”, the one you talk to is just called “Wife”. Hilarious!
Fri, Aug 14, 2009 at 07:19 PM #
Anonymous Coward on How I Explained REST to My Wife
I really hope your wife was just being patronizing that whole time.
Fri, Aug 14, 2009 at 07:17 PM #
Anonymous Coward on How I Explained REST to My Wife
You’re not married..
Fri, Aug 14, 2009 at 04:01 PM #
Andrew on How I Explained REST to My Wife
I read 335+ comments just to see how shrill the sexist claims would get.
My wife is at least as smart as I am, but she knows next to nothing about what I do. Similarly, I, she.
The relevance of REST is a pretty abstract thing — I wouldn’t view the presentation format as “for dummies” so much as “for another person who’s smart enough to generalize a set of preexisting comprehensions and apply them to a new (to them) area”. Specific descriptions are usually much simpler than general ones (C.f. Einstein, relativity), but smart people crave the general ones because they offer a deeper understanding of the current topic and of the world.
Also, I’m surprised that in 335+ comments, no one has mentioned the resemblance to a certain classic computer science book regarding a sometimes-difficult-to-grasp but super-powerful language from the early days of computing yet still retains huge relevance today. Coincidentally, probably, the title of that book could be interpreted as condescending too. Anyone?
Fri, Aug 14, 2009 at 02:27 PM #
Mohit Soni http://www.mohitsoni.com/ on How I Explained REST to My Wife
Now, that’s a wonderful way of teaching computing concepts. I hope your wife asks more technical questions.
Fri, Aug 14, 2009 at 01:39 PM #
Christopher Kusek on How I Explained REST to My Wife
I believe the universal term I’ve heard is “If your mother or grandmother understands it, then anyone can” And frankly, I see that as a good explanation for anyone or their children :)
Fri, Aug 14, 2009 at 10:03 AM #
Jossie on How I Explained REST to My Wife
How silly that you have to explain how this article isn’t sexist. Someone is always bound to take a negative spin on anything.
Great job explaining REST in simple terms. I will now explain REST to my brother and/or sister the way you just did to your wife. Actually, I will explain this to my team who is still trying to learn REST as I add support for it in our product.
Thanks!
Fri, Aug 14, 2009 at 08:55 AM #
Recontemplations@gmail.com on How I Explained REST to My Wife
Amazing post! Any one claiming that this post is sexist needs to get their head out of their ass and wake up to the real world of the way things and people work. No one would have said anything if it was titled the other way around.
Fri, Aug 14, 2009 at 06:27 AM #
Mark Essel http://www.victusspiritus.com on How I Explained REST to My Wife
So we don’t need any other protocols but http? Involved way of making a point, but I can respect the effort that went into it. Ryan can you please explain to your wife the advantages of lift/scala on the GAE vs. python or using a different framework from django like web2py. I’m very confused on real world applications (learning from scratch) and could use some help.
Fri, Aug 14, 2009 at 05:23 AM #
grandma on How I Explained REST to My Wife
“If the author would have pretended …”
This is a very common grammatical mistake. The “would” has no place here; I urge you to instead write: “If the author had pretended …”
Fri, Aug 14, 2009 at 01:31 AM #
Mackenzie on How I Explained REST to My Wife
WTF: because if they were a married gay couple, he would’ve said “husband”?
(oh, I’m the AC above…didn’t realize that box down there that just has “—–” was for name)
Wed, Aug 12, 2009 at 03:18 AM #
Anonymous Coward on How I Explained REST to My Wife
shrug I didn’t think the post was sexist, but I do think Pierre’s comment was. Pierre said: “I didn’t think your post was sexist. For Pete’s sake lighten up people! Fact is, it’s a very common scenario as described in this post. If the author would have pretended to be a woman explaining it to her non-tech husband, it would only be patronizing, if anything, and you’d have to be naive to buy it.”
Why, Pierre, would the above conversation be patronizing if explaining to a man, but it’s fine explaining to a woman? It shouldn’t be patronizing to either. And a woman explaining something to man who isn’t in her field shouldn’t be laughable either.
Wed, Aug 12, 2009 at 03:16 AM #
Dave on gemcutter - awesome gem hosting
Or, we could all just move to Rip and leave this package repository madness behind us.
Mon, Aug 10, 2009 at 08:22 AM #
Rich on How I Explained REST to My Wife
Wow! This makes sense to me now and I’m not even a woman! JK ladies. but it does make sense and I’m going to look for ways to incorporate this into my current project.
Thanks!!
Mon, Aug 03, 2009 at 07:51 AM #
DNS on Getters/Setters/Fuxors
@RT Butte: the idea is that you don’t have to write a bunch of getters and setters for all of your properties from the start. Instead, you add them when you need them, and only for the properties you actually need them for.
Fri, Jul 31, 2009 at 12:21 PM #
RT Butte on Getters/Setters/Fuxors
Uh, maybe this is just me, but all you have done is write getters and setters and wrapped them in a call to property(). Which is just exactly what you said not to do.
Maybe I’m missing some tiny detail as to why this is not the case, but to my eyes, the only difference between Java and Python here is simply indentation.
If I really have to write a getter/setter for every member variable in a class, then properties are a waste of space and (more importantly) my time. Now, if I can use lambdas, then everything’s cool.
Someone let me know why I’m wrong.
Fri, Jul 31, 2009 at 12:05 AM #
Rails Newbie on Rails and Scaling with Multiple Databases
Rails is fast enough for me now, will keep this article as reference.
Wed, Jul 29, 2009 at 12:55 AM #
Ryan Riley on Moving Past BlueCloth
Can’t build either on Windows Vista (don’t hate; not my choice either). Looks awesome, though.
Sun, Jul 26, 2009 at 08:51 PM #
_Mark_ on The Thing About Git
Another thank you! A coworker pointed me at this, turns out that “git add —patch” works fine with git-svn, too, and it really does give you more freedom to fix bugs right when you notice them (I’d been doing git-stash/fix/git-stash-pop but this is much smoother.) Best of both worlds…
Thu, Jul 23, 2009 at 11:55 PM #
steveha on No Rails for Python?
Last year I did a fairly serious REST web service project using Django. I loved it. I haven’t used Ruby on Rails, but I cannot imagine it being better overall.
Python needs an answer to RoR; well, it has one, and that answer is Django. If you are considering doing a database-backed web project in Python, the only research you need is to read The Django Book.
Full disclosure: I don’t benefit in any way from you using or not using Django. My current job is writing audio DSP code in C. I just really loved working in Django.
Thu, Jul 23, 2009 at 05:29 PM #
circle_pitier on How I Explained REST to My Wife
I pity you and your wife circle, I hope you can one day grow up to be normal, balanced people and get over your inferiority complex.
Tue, Jul 21, 2009 at 11:38 AM #
Asit on How I Explained REST to My Wife
Thanks Ryan!. A very nice explanation indeed. Kudos :–)
Tue, Jul 21, 2009 at 10:51 AM #
Macario on Moving Past BlueCloth
I meant :filter_html.
Mon, Jul 20, 2009 at 11:44 AM #
Macario on Moving Past BlueCloth
Hi, thanks for the gem Ryan, I’ve been using it but I need it to output unsanitized html, passing or not :html_filter makes no diference, my html gets sanitized anyway (I am using 1.3.4).
Mon, Jul 20, 2009 at 11:42 AM #
Vishnu on How I Explained REST to My Wife
Very expressive way to explain a concept. Very Different from the usual junk that people write about REST without understanding about it well…
Sun, Jul 19, 2009 at 01:16 PM #
mubasher on How I Explained REST to My Wife
The concept is indeed ‘Human understanable’ besides ‘Human readable’. Excellent!!
Sat, Jul 18, 2009 at 02:58 PM #
Ferihegy on Things Caches Do
The validation model and the expiration model are nicely explained through the simple diagrams that I really like, by the way. Plus, I admire that Ryan checks back to see the comments from time to time and answers the questions. Thanks in the name of all, Ryan!
Fri, Jul 17, 2009 at 07:15 AM #
Team Nirvana on How I Explained REST to My Wife
An amazing read there. Loved the way you penned it down Ryan.
I hope my wife would understand the same when I tell something as geeky as this.
Fri, Jul 17, 2009 at 01:46 AM #
Ryan Hamel on How I Explained REST to My Wife
I don’t believe this conversation. Now, if you want to say this is a fictional and fictionally useful conversation with ‘my wife’? Then fine. I’m married. There is noooooooooooo way you actually had this conversation with your wife. Respond to me and I will not respond. I will not argue with a mad man. EOS/EOF
Thu, Jul 16, 2009 at 06:31 PM #
Brianc on How I Explained REST to My Wife
Ryan, your post is awesome, your responses to comments are awesome, and Sinatra is awesome.
Thu, Jul 16, 2009 at 12:43 PM #
Vaibhav on How I Explained REST to My Wife
This is awesome man !!! Simply outstanding. I devoted my 8-10 hours on understanding REST but the articles I found were nowhere even close to this.
Thu, Jul 16, 2009 at 01:43 AM #
priya on How I Explained REST to My Wife
Excellent…made things simple
Sun, Jul 12, 2009 at 01:46 AM #
Maddy on How I Explained REST to My Wife
Great work!! Well to be honest, you can write different other useful explanations too.. Great explanation to REST..
Thu, Jul 09, 2009 at 11:26 PM #
willy on How I Explained REST to My Wife
OMG. My wife is a nurse and I get the dumbed down version of why somebody died in recovery or had to be returned to surgery because of something a nincompoop doctor did. I’m not in the medical profression (thank God) and she’s not an IT person. We’re busy and I don’t have time to get a medical degree and she doesn’t have time to get an IT degree. If we don’t dumb our work things down to each other we wouldn’t speak at all.
“So, honey, what’s the white count got to do with it?”
Excellent explanation and a ludicrous number of posts by complete ninnies.
Thu, Jul 09, 2009 at 07:31 PM #
Tilak on How I Explained REST to My Wife
Excellent! I just had to start working on REST and I’m happy to have read this post which explains me about REST such a simple manner. Great Job, Ryan!
Tue, Jul 07, 2009 at 11:44 PM #
Aaron Riksa on Things Caches Do
Hehe, I love websequencediagrams! I never used it before, but now I’m going to. I actually thought that you really drew those diagrams up on a piece of paper and I started envying you for the nice ordered handwriting, LOL…
Mon, Jul 06, 2009 at 05:36 PM #
Aaron Riksa on HTTP Caching Talk at RailsConf '09
It’s a pity for the advanced stuff, thanks for the slides! No videos on the other hand, right?
Mon, Jul 06, 2009 at 05:26 PM #
Darren on JavaScript Based Code Prettification
I spent all day banging my head against GeSHi and SyntaxHighlighter and not getting what I wanted (using with Markdown of course.) And then late at night I found this, which is exactly what I have been looking for. Thank you sir. Elegant, and user friendly.
Sun, Jul 05, 2009 at 07:13 PM #
Florida Programming on Python Inner Classes
I don’t understand how to access an outer classes static attributes from an inner class.
Sun, Jul 05, 2009 at 12:09 PM #
itsme on GNU is killing Solaris
I use the GNU utils on Windows, and don’t once think about that it’s the GNU utils. I just think in terms of grep, cut, wc, etc. So should I call this GNU/Windows??
Almost all Windows users (not that you care what we think) will think of the GNU/Linux vs Linux controversy as being totatally absurd. Linux is now and will in the future be the sole name of the OS. Stallman deserves great credit for what he has done, but that credit doesn’t include naming rights when the name thus constructed is awkward.
The GNU/Linux vs Linux naming debate is typical of the theoretical, abstract, totally time wasting discussions that Linux and Unix snobs tend to partake in. I am reminded of the abstract comparison to theologians discussing how many angels can dance on the head of a pin.
Thu, Jul 02, 2009 at 10:22 PM #
Lee on Cleanest Python find-in-list function?
I was inspired by ionous’s page to propose the following. First, here’s a faster, two-line replacement for the three-line loop you dislike:
By the way, your version is missing a
break, so it checks the whole sequence (taking time) and keeps storing matches infred(giving you the last matching item).Even better, Python 2.6 lets you simplify to just one line:
There, no more function call overhead!
If you’re not using Python 2.6 yet, and still prefer a function, here’s a drop-in replacement that uses the above technique:
Personally, I prefer the greater flexibility of getting the index of the item, rather than the item itself (as in
list.index()). This makes it easy to modify a list; for example, to delete the found item.This approach also lets you efficiently find the last occurence of a matching item, by searching backwards from the end:
And here’s a corresponding function. (I’m taking the liberty of swapping the arguments to match pythonic built-in functions like
max()andsorted(), rather than functional-style ones likefilter().)An
rindex()function for searching in reverse may be accomplished as above.Thu, Jul 02, 2009 at 06:40 PM #
Denis on Getters/Setters/Fuxors
I hate public attributes on general principles (breaks encapsulation) so I’m not impressed with the rant on evil. Neither am I enthused by the property decorator described in http://docs.python.org/library/functions.html (someone above suggested decorators).
What I am looking for is a shortcut to creating default getter/setter’s until I get around to implementing the extra logic I know I’ll need later. I suppose I’ll just abuse my IDE.
BTW: it staggers me that anyone would think you don’t need an IDE for ANY language no matter how awesome. The best I’ve found thus far is a combination of Eclipse, the pyDev Eclipse plugin, and pyLint (which integrates seamlessly into Eclipse via pyDev). Good news: it’s free and wicked useful. Bad news: setting it up for the first time will probably set you back an hour or two.
Thu, Jul 02, 2009 at 12:12 PM #
WTF on How I Explained REST to My Wife
Loved the article. Didn’t have a clue about rest before I read it.
To all the people calling the article sexist; why did you (the politically correct) assume that his wife was female in the first place, the author did not mention the sex of his wife in the post and she could have been male (married gay couple: Yes it happens in the real world!), so who are the sexists after all.
Wed, Jul 01, 2009 at 08:24 AM #
Amit Naik on How I Explained REST to My Wife
Excellent Post Ryan. Few people have both the ability to correctly understand a given technical topic and clearly communicate their understanding to others. Fewer still have the knack for reducing the complexity without appearing patronizing. Good work indeed!
Tue, Jun 30, 2009 at 04:47 AM #
Lee McColl Sylvester on No Rails for Python?
I’ve been chewing on this for some time. I was trying to write a “framework” for the haXe platform that works similarly to Rails, then realised that it wasn’t such a good idea. Why? Well, I realised that, for the most part, developers are happy to use and reuse libraries that they feel comfortable with. There’s no point learning a new framework if you’ve used something for years and it works. What’s more, any framework built in haXe should ideally work for all platforms, as that’s what haXe is all about.
My answer to this was to use what’s already there, but to provide the glue needed to make it more rails like, including libraries, generators, how-to videos and what have you.
haXe already has a fantastic templating system called Templo, it has a super powerful yet lightweight ORM called SPOD and it has a port of PureMVC that compiles in haXe to C++, PHP, Flash 6 – 10, JavaScript and Neko. What more could you want? These libraries are already what existing developers are using, and they like them. Ergo, I’m now spending a lot of development time working on ways to make these libraries work closely with one another, and to shortcut ways in which developers can quickly create common application functionality.
I’ve got a long way to go, but it’s a start.
Fri, Jun 26, 2009 at 07:20 AM #
Moazzam Khan on How I Explained REST to My Wife
This is a great way of explaining REST. Thanks!
Thu, Jun 25, 2009 at 09:34 AM #
kashyap parmar on How I Explained REST to My Wife
This is call creativity at its best … Great explanation in very simple way. Good Work.
Tue, Jun 23, 2009 at 09:33 PM #
Pamela on How I Explained REST to My Wife
Great post and awesome explanation! I did not see it as sexist at all.
Mon, Jun 22, 2009 at 10:07 AM #
shawn austin on How I Explained REST to My Wife
Pretending you have a wife really is an original way for writing.
Mon, Jun 22, 2009 at 03:21 AM #
meh on How I Explained REST to My Wife
tldr
Sun, Jun 21, 2009 at 05:37 PM #
Bradley Cole on How I Explained REST to My Wife
This is great. Pretending you have a wife is a really cool way of writing an explanation for REST!
Sun, Jun 21, 2009 at 02:48 AM #
David G. on How I Explained REST to My Wife
Thanks. I had been fretting over REST like it was all schmancy, and really it was the foundations of HTTP I had once wondered “how come we never use this?” I mean GET sure. POST sure. PUT? never. DELETE — are you crazy? but now on this project (RAILS) …. looking forward to it!
Sat, Jun 20, 2009 at 08:14 PM #
automandc on OS X Network Location Support From The Command Line
After messing around with this problem myself on and off over the last year, I just discovered that you can now get the active proxy information directly from the scutil command line utility (
scutil --proxy). Some form of text processing (sed | awk | perl | grep) is still needed to extract the relevant bits, but this at least cuts down the number of steps, and eliminates the need for a user-created config file.Thu, Jun 18, 2009 at 07:31 AM #
Daver on How I Explained REST to My Wife
Thanks for the easy-to-understand REST explanation.
Those of you commenting on sexism in the post – get a grip. Get off the internets, it’s not for you. Stop trolling and looking for a place to feel important.
Thanks again, Ryan.
Fri, Jun 12, 2009 at 12:06 PM #
cizium on How I Explained REST to My Wife
It’s cool, easy to follow and understand. Nice post!
Fri, Jun 12, 2009 at 07:35 AM #
JLO on My last experience with amazon.com
I had almost the same thing happen to me. I pre-ordered a game on March 6th and ordered a flute book at the same time. I thought they would send the book right away, but no. It would be shipped on June 2 when the game came out. Ok, I thought. On June 2, it was “shipping soon” – on June 6. I thought, well…ok… a few more days won’t hurt. On the 4th, I thought I would check it out and they had changed the shipping date to the 8th. I sent them an e-mail and told them that would be the last order they would get from me.
2 hours later, I got an e-mail saying they had shipped. Yeah…shipped. It would be in the mailbox on the 13th.
They have lost another customer.
Fri, Jun 05, 2009 at 08:14 AM #
SpookyET on GNU is killing Solaris
I have installed ‘coreutils @7.4_0+with_default_names (active)’ using MacPorts on MacOSX 10.5. Thus far, I have not experienced conflicts. But, I may uninstall it, install it again without default names, and use aliases just to be safe.
iTerm (256 colours) + MacPorts + coreutils = Awesome
Thu, Jun 04, 2009 at 02:41 PM #
Pedro on How I Explained REST to My Wife
This was a really nice post! Reminded of me explaining search trees, sorting algorithms and formal logic to my girlfriend (who works in the book industry). Sometimes, she would get it quicker than I did. :)
Thu, Jun 04, 2009 at 06:36 AM #
Anonymous Coward on Disable horizontal wrapping in various textmode tools
In vim, you can use “:set nowrap” for this effect. Thanks for the tip on less(1), been looking for that for a while but never found it since the manpage doesn’t refer to the functionality as “wrap”. :)
Wed, Jun 03, 2009 at 07:03 PM #
Ryan Tomayko on Insects and Entropy
Domenic: actually, it might have been me that stretched the story a bit ;)
Fri, May 29, 2009 at 10:49 AM #
jew on How I Explained REST to My Wife
tard
Fri, May 29, 2009 at 09:15 AM #
Domenic on Insects and Entropy
I attend OSU and I had a project that sounds exactly like this, however it was part of an intro computer science sequence (http://www.cse.ohio-state.edu/sce/now/321/index.html) and had nothing to do with AI. The bug program shouldn’t of taken more then 20 or 30 minutes of work even if you put a decent amount of thought into it.
Seems like Jon likes to stretch stories a bit lol.
Here’s a description of the project:
http://www.cse.ohio-state.edu/sce/now/321/labs/project/project.html
Fri, May 29, 2009 at 01:42 AM #
JC on How I Explained REST to My Wife
Very good explanation, much easier to understand that Wikipedia’s! Thank you!
Thu, May 28, 2009 at 07:22 PM #
Martijn on Web Dominated by J2EE?
Does Java not dominate? I have no numbers on the number of websites that use Java, but the simple fact that there are way more web frameworks for Java than for all other languages put together should tell you a couple of things. Yes, one of the things it tells you is that Java developers love architecture a bit too much, but also that Java is very popular with web developers who are smart and well-funded enough to do something about architecture.
I admit Java made a bit of a bad start with junk like Struts, Avalon components, the steaming pile of J2EE and the unholy mess that is Spring, but out of that has come a lot of very valuable innovation. I haven’t seen anything like Wicket for Ruby yet, for example. (Although Lift, which takes the lessons from Wicket, Rails and Django and brings them to Scala sounds extremely promising.)
Anyway, Java does dominate. Maybe not in the most popular websites, but definitely in web frameworks and surrounding technologies. But if you just want a blog or a webshop like any other, then all the stuff Java brings to the table may be overkill. (In any case, I’ve switched to Ruby.)
Wed, May 27, 2009 at 09:45 AM #
Bored At Work on How I Explained REST to My Wife
Good overall explanation from a 10,000 ft level… and very entertaining for an article on computer protocols.
Wed, May 27, 2009 at 06:39 AM #
Jason on How I Explained REST to My Wife
During a job interview I was asked if I had ever worked with REST services. I didn’t want to simply say no, so instead I said “I know a lot about it, I’ll download it later and learn how to work with it”. This was probably much worse than just simply saying no. Before reading this post, I had always thought of REST in a simplistic manner…an extension or framework you could use in order to exchange data between systems. I wasn’t entirely off with that, however I missed the bigger picture which is that the net is REST.
Wed, May 20, 2009 at 11:11 PM #
Philipp on How I Explained REST to My Wife
You sure you weren’t talking to your 10 year old kid? My GF would kick my butt for this tone ;)
Tue, May 19, 2009 at 12:57 PM #
Avadhut on PrinceXML Is Extremely Impressive
True. Prince has been extremely impressive. I still think that the $3800 price tag is tad too bit, and has been forcing me to search for alternatives.
Fri, May 15, 2009 at 09:26 PM #
Carlton Schuyler on Disable horizontal wrapping in various textmode tools
How about in iTerm (the Mac Cocoa app: iTerm.app) ?
Wed, May 13, 2009 at 08:44 AM #
Dan on Getters/Setters/Fuxors
re. IDE’s : thank you Cthulhu!
Plus, running this all from the command line makes it seem so much harder to ‘touch’…
Thanks!
Sat, May 09, 2009 at 09:52 PM #
Lightpourer on How I Explained REST to My Wife
Thanks a million, Ryan. I understand REST at once. When the student is ready the master comes along. Namaste. Steve.
Sat, May 09, 2009 at 02:28 PM #
Fred on The Thing About Git
Thanks a lot for this useful article. It helped me a bunch when I needed to untangle my working copy, to break a gigantic patch down into more easily digestible pieces!
Wed, May 06, 2009 at 06:33 PM #
Tom Cervenka on How I Explained REST to My Wife
This article kind of leaves me to believe that REST is HTTP (and that somebody outside of IT would care enough to listen to it). That can’t be it. I must search further for answers. Nice job, though. Now I know who Roy Fielding is.
Tue, May 05, 2009 at 10:42 AM #
Bob Aman on HTTP Caching Talk at RailsConf '09
Be sure to link the video/slides if/when they’re posted. Not going to be at RailsConf, but I’d be interested in seeing the talk.
Mon, May 04, 2009 at 08:52 AM #
RG on Insects and Entropy
Umm…if it only turns 90 degrees and attacks, wouldn’t it always only cover the same 4 points on the grid? Assuming the attack itself somehow moves it, whether there is actually something to attack or not. Otherwise it just rotates in one spot till an enemy comes along.
The other students' insects must have been pretty darn stupid if that won.
Fri, May 01, 2009 at 07:46 PM #
Tushar on The Thing About Git
git was driving me mad: now it all makes sense! A wonderful article in a sea of low quality “information”: clear, informative, well written and educational: you’re my hero of the day! Thanks :)
Fri, May 01, 2009 at 01:36 PM #
Harsha on How I Explained REST to My Wife
Man amazing.. has been looking for this for a lot of days.. now I can understand REST easily .. :)
Thu, Apr 30, 2009 at 10:10 PM #
Shawn Wilson on How I Explained REST to My Wife
— Ryan Tomayko on Wednesday, September 06, 2006 at 06:20 PM #
Wow, this was written five years ago; glad to see it’s still getting lots of attention! This is very helpful in explaining REST to people.
I’m in a very similar situation with my girlfriend who also sometimes hovers over my shoulder and playfully asks what I’m doing. Then I go on some nerdy rant in full technical detail, explaining the merits of one thing over another…
And as far as sexism goes, that’s absurd. You could easily swap sexes and have a similarly playful exchange!
Thu, Apr 30, 2009 at 10:52 AM #