Play Counter-Strike 1.6 in your browser - <AUTHOR> http://cs-online.club <comment><USER2> I sunk many hours of my life into this beautiful, beautiful game (starting at the tail end of 1.5, however!) and sometimes tune in to watch CS:GO competitive matches. I know Valorant is apparently stepping up as a spiritual successor to Counter-Strike, but I just love this game for it's emphasis on pure skill, and I really am surprised few other games have come as close as 1.6 to perfecting a team-based FPS that lands all players on an almost perfectly level playing field.

<comment><USER3> Valorant appears to me to be an uninspired clone with a few gimmicks and a lot of marketing money behind it. It's the same way that LoL was a clone of DotA with extra marketing and a few gimmicks.

I don't understand why anyone knowledgeable would be installing a "free" game that includes a kernel level rootkit.

[https://www.techspot.com/news/84841-valorant-anti-cheat- soft...](https://www.techspot.com/news/84841-valorant-anti-cheat-software- loads-kernel-based-driver.html)

<comment><USER4> I believe you are wrong , Dota2 was a rip off of LOL.

Interesting you mention the root kit - you realise Steam monitors urls Your machine has visited right? They also didn't confirm whether or not these are then uploaded to their servers.

<comment><USER5> Dota 2 was a (almost carbon) copy of a DotA map for Warcraft III (there was even a settlement between Blizzard and Valve about this). Not that it's necessarily a bad thing, but it makes more sense to claim that LoL was inspired by a DotA map.

</comment></comment></comment></comment><comment><USER6> This could serve as a demonstration what a long way way web sockets/rtc/channels still have to go, since the experience is much worse even considering the ping compared to 20 year old netcode.

<comment><USER7> You're going to hang the state of networked browser gaming on this random person's netcode implementation? Go to r/GameDev and you can find some redditor Unity projects built on UDP that are even worse, but you aren't going to say "wow, UDP sux".

Check out something like [https://krunker.io/](https://krunker.io/) which gives me a surprisingly good FPS experience despite my distance from the server.

Browser gaming does take some thought though, to be sure. UDP via WebRTC is relatively new and isn't trivial. And I know some games get around TCP head of queue blocking by opening up 2+ WebSockets.

<comment><USER8> How good is krunker? Don't have a mouse but maybe I could get one.

<comment><USER9> It's quite fun and has a surprisingly deep movement system. The userbase is very young so if you have any FPS experience you will shred through the average player.

Expect to get annihilated by someone who knows the movement system though. You'll know someone's using it when you see it, since they'll be moving at 999 units per second and circle strafing you to death.

</comment></comment></comment></comment><comment><USER10> I love how people like to make browser versions of everything. From chat apps to email clients to games. But they all end up consuming 10x the memory but are still 10x slower than their native counterparts !

<comment><USER7> Seems a bit unfair to only acknowledge one side of the trade-offs. Obviously native apps win the perf side.

How about being able to play with your friends after just handing them a link? Native 1.6 doesn't even run on my computer at all.

I think browser ports are the only hope that old games have at coming back. The other month I played Nox's quest mode with my friend on a browser emscripten port (plus a lot of custom code / networking to get it online). And it's a game I thought I'd never get to play again. Gog.com sells Nox for Windows but of course the servers are long offline.

The adolescent glee over how much worse browser applications run really misses the big picture.

[https://en.wikipedia.org/wiki/Nox_(video_game)](https://en.wikipedia.org/wiki/Nox_\(video_game\))

<comment><USER11> > How about being able to play with your friends after just handing them a > link? Native 1.6 doesn't even run on my computer at all.

This is actually one of the major selling points for Cloud Gaming. Although it still has a lot of issues to be adressed before getting into the mainstream, this is exactly what it promises. Just sending your friends an invite link and get them to sign up is a much more pleasant experience than downloading 100+GBs of game files before being able to join the session.

I also enjoy seing browser implementations of popular games. My favorite recent example is the classic version of Minecraft running in the browser [0]. The browser is obviously a much more restrictive environment than a native app, but I can still imagine plenty of useful examples for performant 3D graphics in a browser. After all, Games are often just used as a showcase for the capabilities of new Apis and performance improvements.

[0] [https://classic.minecraft.net](https://classic.minecraft.net)

<comment><USER12> I always thought the cloud gamming is really just a way to move gammers to "subscriptions" instead of one time purchases, in the end milking more money and taking more control from them just like Adobe did with their creative products.

<comment><USER13> Microsoft has been successfully charging subscriptions to millions of players every year without needing to run games in the cloud. Cloud gaming is a play at capturing revenue from people who aren't willing to shell out $300+ for hardware _and_ $60 for every AAA title they want to play.

</comment></comment></comment></comment></comment><comment><USER14> In a similar vein, [http://www.quakejs.com/](http://www.quakejs.com/) is a JavaScript port of Quake 3 (using GPL'd engine code and Q3 Demo assets) and is equally impressive

<comment><USER15> Reminds me of Quake Live, which looks like it's only available on Steam now, but it used to be launch-able from Browser.

Anyone know how Quake Live worked?

<comment><USER16> Quake live's "main menu" interface was web based and a NPAPI plugin was used to run native code. When Chrome dropped NPAPI support, Quake Live moved to Steam, using Awesomium for the web interface part. The game is now an unmaintained relic but there still an active community.

[https://en.wikipedia.org/wiki/NPAPI](https://en.wikipedia.org/wiki/NPAPI)

[https://developer.valvesoftware.com/wiki/Implementing_Awesom...](https://developer.valvesoftware.com/wiki/Implementing_Awesomium)

</comment></comment></comment><comment><USER17> I like how they have Russia as the flag of Europe despite most of the country not even being in Europe, most people would use the EU flag but I guess this is CS 1.6 so they are most likely a fair few Russians about.

<comment><USER18> Russia is and always has been considered a European country.

<comment><USER19> I was always told Russia spans two continents.

<comment><USER20> France technically spans 6 continents. It's still a European country.

</comment></comment></comment></comment><comment><USER21> This is actually nice! If only CTRL+W didn't kill the tabs... We still got a long way to achieve the glorious web everything but progress is progress and I'll give them that.

<comment><USER22> I did this 3 times and then gave up! The muscle-memory is too strong.

</comment></comment><comment><USER23> It is facing outage due to its popularity

[https://androidrookies.com/counter-strike-1-6-in-a- browser-o...](https://androidrookies.com/counter-strike-1-6-in-a-browser-on- cs-online-club-outage-due-to-popularity/)

</comment><comment><USER24> Is this made/approved by Valve? Or is it just that nobody cares about taking down CS 1.6 piracy anymore because it's such an old game?

<comment><AUTHOR> Cracked (non-steam) CS 1.6 clients are available for years and I don't think Valve ever cared.

<comment><USER25> It was never difficult to play CS for free, and that's probably the reason for its success. I remember getting into CS because you could play online with basically any Half-life product key and by 2000 you could buy bundles that came with like 3-4 keys.

<comment><USER26> I think CS, in that era, was free if you had a HL product key. It was a community mod and even when it transitioned to a boxed standalone product you could still download it if you had a HL key. CS: Source was also a free upgrade.

</comment></comment></comment></comment><comment><USER27> Who remembers CS 1.3 -- the last truly great CS, before 1.4 removed bunny hopping and thus ruined the game?

<comment><USER28> Beta 7.1 was where it where I got hooked. The Steyr Scout was a 1 shot kill with the same move speed and cs_mansion was the epitome of map balance. At least at the 12-PC internet cafe I could play at.

</comment></comment><comment><USER29> For me, this is a good gaming experience.. Just stream and cache :-)

Never mind, it's more like: download, wait, server full

Still awesome

<comment><USER30> Faithful to the original in that sense!

<comment><USER31> haha

</comment></comment></comment><comment><USER32> As often, the keybindings use a QWERTY-centric layout, that doesn't make much sense if that's a different keyboard, and no obvious way to change it.

The steam controller API is nicely designed: you define actions, and let the user pick a way to trigger those actions. I think there are predefined ones that already have mappings for common input devices. The API then returns an image and name to correctly prompt the user. I wish we had something like this at the browser or operating system level.

<comment><USER8> I've had to deal with this all my life because of the French AZERTY, but honestly the best solution to this problem is to get a QWERTY keyboard. I haven't thought about this issue once in the last decade.

</comment></comment><comment><USER33> Next gen network streaming api for the web is WebTransport:

[https://wicg.github.io/web-transport/](https://wicg.github.io/web-transport/)

You can experiment with the initial draft version of QuicTransport today:

[https://web.dev/quictransport/](https://web.dev/quictransport/)

<comment><USER34> Thank you for sharing this. I didn't know about that, and it's very interesting to me.

</comment></comment><comment><USER35> I don't know much about the topic - but from what I understand, Valve games use Protocol buffers and UDP connections to the lobby server, in their netcode (someone correct me if I'm wrong).

Is there an equivalent way to do this with the same level of efficiency in the browser? What are browsers missing in order to achieve this?

<comment><USER6> > Valve games use Protocol buffers and UDP connections to the lobby server, in > their netcode (someone correct me if I'm wrong).

The netcode originally used in GoldSrc/1.6 came from QuakeWorld and predates Google. IIRC it got replaced at some point. The current iteration of Source's netcode doesn't have anything to do with that, though.

<comment><USER36> > IIRC it got replaced at some point. The current iteration of Source's > netcode doesn't have anything to do with that, though.

Do you have a source (heh) to back that? Lots of the networking configuration cvars from 1.6 are still there in CS:GO and do the same thing. Maybe it was cleaned up but I wouldn't be surprised if it's still mostly the same code.

<comment><USER37> According to Valve, they deployed [https://github.com/ValveSoftware/GameNetworkingSockets](https://github.com/ValveSoftware/GameNetworkingSockets) successfully on CS:GO.

<comment><USER36> GameNetworkingSockets is pretty cool, and integrating it must have required some extensive changes, but it's more of a networking middleware library. I thought blattimwind was referring to the gameplay related netcode (prediction, interpolation, lag compensation, etc). My understanding is that it hasn't changed much since the 1.6 days, because all of the configuration knobs are still available today, but maybe they rewrote it and I'm just out of the loop. It'd be a major task to do that without affecting gameplay "feel", which is why I was interested in some source to read more about it.

</comment></comment></comment></comment></comment><comment><USER38> The last version of CS worth playing was 1.2 (or 1.3? or 1.4? I don't recall), where strafe jumping was still possible, so you could pretend it's Quake and annoy the hell out of the more covert people.

</comment><comment><USER39> Basically unplayable if you're used to CS at all, however this is a really cool and impressive project :)

</comment><comment><USER40> Cool! Now please do Heroes of Might and Magic III.

<comment><USER41> Please don't, it would 100% swallow me after all these years of not playing computer games :) I loved Heroes 3.

</comment></comment><comment><USER42> I would say I really enjoyed it. Although the gaming experience in Safari with a Magic Mouse is odd, the connection is somewhat laggy, and people are constantly (dis)connecting, it worked really well and brought me some sweet memories about playing CS 1.6 a long time ago.

</comment><comment><USER43> This brings back memories of 6-7 of my friends cramming our desktops into a garage to play games all-night.

I still remember working summer jobs saving up for the next best video card. Fun times.

</comment><comment> ben-schaaf This seems like quite the achievement. Can't crouch and walk forward though (ctrl+w), nor is it anywhere close to the performance of say cs:go at least in terms of input lag.

<comment><USER44> So crouch + forward will close the game? This might become the new Alt+F4 for more money hoax.

</comment></comment><comment><USER45> How does this work? CS 1.6 is closed source, as is HL1 engine?

<comment><USER46> It's a clone with CS maps.

<comment><USER47> No, it seems to contain some leaked SDK and reverse engineered code: [https://github.com/FWGS/cs16-client/tree/v1.32](https://github.com/FWGS/cs16-client/tree/v1.32) , and to run on [https://github.com/FWGS/xash3d-fwgs](https://github.com/FWGS/xash3d-fwgs) .

</comment></comment></comment><comment><USER48> Brings back good memories!

But, it is so sad that we can't change the keyboard layout. So, it is sadly useless for all the people that don't have a Qwerty keyboard.

</comment><comment><USER49> This is actually a lot of fun! The mouse movement sucks and I don't remember the spray patterns like this but it's still very enjoyable.

</comment><comment><USER50> How does this work actually ?

<comment><USER51> It's a WebGL clone of Counter-Strike 1.6 that can even load original maps.

</comment></comment><comment><USER52> That was amazing! This is so awesome. I just played for 30 minutes since I haven't played since I was a kid. I use to be very good and apparently still have it since I landed #1 after playing all the rounds :)

Thanks for sharing this, made my morning and took me away from development work for once!

</comment><comment><USER53> On a semi-related note, if anyone feels nostalgia for CS1.6/CS:GO and has a VR HMD, jump on Pavlov and join a Search & Destroy server/map. The experience of spawning into and running around a map that you have played for 20 years is beyond mind blowing.

</comment><comment><USER54> Is it WebSocket or Data channel based?

</comment><comment><USER55> It took me almost a minute until I started to play. The rotation with a mouse was very slow (you have to move the mouse by a huge distance).

I prefer to play [https://www.krunker.io](https://www.krunker.io), where you can play immediately :)

<comment><AUTHOR> There is a disclaimer that first loading is always a lot slower, since it is downloading and caching all the files

<comment><USER56> Even after that first time, it takes a good 20-30 seconds to process the files again.

</comment></comment></comment><comment><USER57> Anyone knows how this game has been ported to the browser? Is it compiled to Webassembly?

</comment><comment><USER58> Very cool, thank you for sharing.

Unfortunately I downloaded resources, waited, and the server was full. After repeating for 3/4 times I gave up, so maybe a little more work needed there to cache and/or manage servers a little better for the end-user.

Still a very cool project!

</comment><comment><USER8> I discovered that the other day, I find it completely insane. Also how is this even legal. Well I hope Valve doesn't get angry at it, actually I don't know why Valve is not even doing this (and adding their own skins marketplace)

</comment><comment><USER59> Wonder if the physics bugs exist on this web port of CS for maps like ka_roadwars_v2

That was an epic map where you could glitch into the wall with a vehicle and shoot yourself off in the air and go into the hidden gun room.

Fun times.

</comment><comment><USER60> That's amazing! Used to be addicted to CS:S (surfing) and found a surf server on here.

But for something as fast-paced as surfing, the experience is not wonderful (small input lag). Still, really impressed by this.

</comment><comment><USER61> Man, if you had told me back when I was playing 1.6 that one day I would be playing it in a browser, I would have laughed. Crazy how far we've come with video games.

</comment><comment><USER62> Wow that was an awful experience, I lagged to some random location and died instantly. Seems like browser based gaming might have some way to go. Good effort though.

</comment><comment><USER63> browser FPSs will never take off due to complete lack of protection from cheating, and cheating is the core implementation issue with FPSs.

<comment><USER64> How is it that running in a browser is inherently unprotected?

Sure, they don't usually have the thousands of man-hours dedicated to cheat detection, but the basics are usually sorted out.

<comment> orbital-decay Client-side anticheats are essentially advanced rootkits, and cannot be implemented in a browser sandbox.

</comment></comment></comment><comment><USER65> Wow, I find this amazing though im not into this kind of games at all. I gave it a run, took a while to load at first but the playing experience was quite nice. I killed a few people with a knife and got killed a few times and thats enough violence for me.

Nonetheless, having this run in the browser just like that, no downloads, no installs, no tweaks.. im wowoed. Good job peeps

Edit: my experienece was quite nice, I launched this in Firefox on Win 10 on my mediocre laptop (i7-7560u/8gb ram)

<comment><USER66> That's not a mediocre laptop.

<comment><USER65> I paid ~$500 for it, its an average laptop. Lenovo ideapad s340. We're in 2020, whats an average laptop for this time and age

</comment></comment></comment><comment><USER67> It's hard to figure out which server I'd want to play when they don't show pings in the server browser

<comment><USER68> > they don't show pings in the server browser

Pings are more complicated in this setup. A low ping to a server won't help too much if you have high ping to the online client itself. Are there different clients in different locations so you can select a low-ping client?

<comment><USER69> No, ping is as complicated as for any gaming server. You have one central server and many clients connected to that central server. I don't think the game is running somewhere else, it's running directly in the browser, so only ping you care about is from your computer to the central server.

<comment><USER68> There's definitely not "one" central server. Depending on how they route your connection (do they proxy you or redirect you), you might still just be connected to the server you're playing on, but the "ping" is also more complicated in itself since the protocol is more complicated. Instead of information from the client to the server which updates all the dynamic entity states, you are instead sending input commands and getting video and audio back. So, not only would "ping" measure something entirely different, it would possibly be optimized for in the path between you and the remote differently as well.

They may have decided that instead of providing a metric that might lead people to believe it's similar to and implies the same thing as it did in the past, they'll remove it. If so, I would hope they would put something semi- equivalent in it's place. Maybe they did, but it's so removed it's hard to locate?

</comment></comment></comment></comment><comment><USER70> Wish I knew about this during quarantine.

</comment><comment> jean-malo It worked for me after a few tries, input lag is pretty significant though.

Anyhow it's a very neat project, thanks for sharing!

</comment><comment><USER71> Impressive! But it also feels like this is making a convincing case for an UDP equivalent to websockets.

</comment><comment><USER72> Such a memory... There is some lag due to network, but this is still a great and very promise project.

</comment><comment><USER73> oh my god this is so cool. I just played a round of C.S in my browser. still letting that sink in.

</comment><comment><USER74> As a demo of a web application, it works very well. But definitely not for playing yet.

</comment><comment><USER75> Does it work on Safari? It has been initialize Shaders for the past 10 min.

<comment><USER76> Yes, works fine in Safari 13.1.1

</comment></comment><comment><USER77> This reminds of Gary Bernhardt The Birth & Death of JavaScript :)

</comment><comment><USER78> It feels like 15 years ago, complete with random lag. :)

</comment><comment><USER79> Wow, this is really cool. I wonder if in the future, everything will run on the browser, and most software doesn't care about the OS at all.

There's even a xkcd comic about this[0].

[0] [https://xkcd.com/934/](https://xkcd.com/934/)

<comment><USER80> Technically it can, but money from Appstore, Playstore, Windows Store is too lucrative for the behemoths to give up their hold on them to improve the browser ecosystem & web apps in general.

<comment><USER81> Is there a way to reconcile this? Web has such nice tooling to develop for, but it's also nice to have the discoverability and monetization opportunities of a centralized app store.

<comment><USER56> > Web has such nice tooling to develop for

...really? Web development is the absolute worst development experience I've had since doing COBOL in college. I have difficulty believing anyone can claim this who has ever developed with proper tooling for anything else.

<comment><USER81> I guess I haven't done too much outside of web to know much else :). However I have done some iOS stuff and the tools are okay but much less open source, documentation, etc.

</comment></comment></comment></comment></comment><comment><USER82> This is so cool, the guy that made this has my respect!

</comment><comment><USER83> Browser gaming is certainly going to evolve more and more. With Stadia and so many other browser-based games show great examples of what can be achieved.

<comment><USER84> Stadia is a different kind of browser based gaming. It's a stream of inputs and outputs.

</comment></comment><comment><USER85> I have tried it in Firefox 77 on Linux running on a Core i7 CPU and the experience was mediocre. Low fps, delayed sound and imprecise mouse movement.

<comment><USER86> FF77, i5 CPU on Win10 -> perfect.

</comment></comment><comment><USER87> Not the same as a desktop version.

<comment><USER88> That's the point.

</comment></comment><comment><USER89> And there goes the weekend...

</comment><comment><USER90> this is super cool. any chance this is open sourced?

</comment><comment><USER91> These things need to be treated like crack cocaine.

</comment><comment><USER31> OMG! I love 1.6 this brings back so many memories!

</comment><comment><USER92> Ah memories!

</comment><comment><USER93> I just found a new lunch break hobby lol

</comment><comment><USER94> this is fantastic

</comment><comment><USER95> This is really well done, is there an easy way to change mouse sensitivity?

</comment><comment><USER96> Welcome to 2003. This is quite ugly and those counter-jihadist bastards refuse to die.

OTH. I think remember a very good browser version of Crysis. Where is it now?</comment>


I Support the WebKit Monoculture - <AUTHOR> http://jeremyckahn.github.com/blog/2013/01/23/i-support-the-webkit-monoculture/ <comment><USER3> I work for Mozilla, but I speak for me.

Supporting a monoculture is trading future potential in the name of short-term convenience. This doesn't just apply to rendering engines, or even just technology. Wishing you could wave a magic wand and make everyone use the same tools, language, conventions, or coding style is something every engineer wishes from time to time, but the world would be worse off without diversity.

Wishing one rendering engine "wins" over the others is a reasonable thing to say, and WebKit is a very fine engine. But the moment we start treating the Web as a zero-sum game and stop collaborating on the vision of a better online experience, nobody wins.

<comment><USER4> Metric system

<comment><USER5> Other measurement systems definitely have their uses though. Many older measurements still exist due to them being easier to estimate with; e.g. an acre being the amount of land you could plow in a day.

And you'll never have the British drinking from litre glasses, I'm afraid. It's pints or nothing.

<comment><USER6> "an acre being the amount of land you could plow in a day" isn't that an extremely subjective way to measure something? And to almost everyone even modern farmer is that actually a good basis considering a modern farmer can most likely plow much more than an acre in a day with machinery?

<comment><USER5> Oh absolutely, if they updated it to be based on modern farming then everyone would have significantly less acreage :D

But you'll find that with most imperial measurements; they're based on physical objects or systems of measuring which make less sense today. One of my favourites being the traditional way of counting sheep in the north of England: <http://www.fellpony.f9.co.uk/country/wool/count.htm> (and here's a great explanation and song by the late Jake Thackeray: <http://youtu.be/TiXINuf5nbI>).

</comment></comment></comment></comment></comment><comment><USER7> If one implementation becomes the _de facto_ standard, it only means that the standard is written nowhere. Quirks, peculiarities or even bugs become reference points that web developers need to build upon. The pace of innovation may be greater this way (as it is evident now in Chrome especially) but the long term risk is making the whole notion of independent standard irrelevant.

And if that happens, then whoever has the biggest influence over the leading browsing engine will dictate the shape of the Web. Last time this was a single corporation; at least this time it might be two. I don't necessarily think this is very much better.

</comment><comment><USER8> "standardizing on a single rendering engine would go a long way towards unifying the web."

I would agree, but I don't think it would be a good thing to do. Sure, if there were only one rendering engine, all of the web would be rendered in the way. That isn't a good thing though. It would commit the web to being Webkit, warts and all, for a very long time. IE is a good example of this, except it is we who brought it upon ourselves as web developers for using IE specific behavior.

"One of the core evils behind Internet Explorer is that it is a closed platform."

Again, agreed. That said, being closed isn't why we dislike it; its because it has a lot of non standard behavior that people have come to rely on. If the IE source code were to be entirely open sourced tomorrow, how much easier would it be for web developers to work around its idiosyncrasies? I posit that it would still be hard.

"Now Gecko is old, buggy and slow - at least in comparison to WebKit."

Even if this is true, its only true today. It will eventually get better, leaving this argument irrelevant.

This article seems to say that the author disagrees with the "program to interfaces, not implementations" advice. The interface (HTML & CSS) should be how we describe web documents, rather than Webkit's particular implementation of the interface. The author's article seems shortsighted - both forward looking and retrospectively.

<comment><USER9> > "Now Gecko is old, buggy and slow - at least in comparison to WebKit." > > Even if this is true, its only true today. It will eventually get better, > leaving this >argument irrelevant.

Even if it is true today, Mozilla is working on Servo (which will hopefully prove to be a success). There isn't a single reason to not develop competing engines.

Competition will drive all sides to improve their engines. And standardizing on WebKit is like standardizing Linux (it's just a kernel not overall browser). Slow and very hard, if not down-right impossible.

I wish Mozilla all the success in the future but I don't want a monoculture of any engine (Servo/WebKit/Presto/Gecko/<insert engine name> included).

</comment></comment><comment><USER10> WebKit recently became slightly less open

[https://lists.webkit.org/pipermail/webkit- dev/2013-January/0...](https://lists.webkit.org/pipermail/webkit- dev/2013-January/023255.html)

<comment><USER11> Ouch. Reading that, they're not just making development less open - <USER2> are now allowed to merge code that breaks the build on non-Apple platforms. Worse, in order to merge any changes to non-Apple platform support code, developers have to have their changes approved by "owners" within Apple who have no incentive to review code promptly and no knowledge of the platform in question.

<comment><USER12> > developers are now allowed to merge code that breaks the build on non-Apple > platforms

So we can picture OpenWebkit available on github in a week or so then?

Seriously: Apple cannot honestly believe this move is going to benefit anyone, can they?

<comment><USER13> It's benefitting _them_ :-)

</comment></comment></comment></comment><comment><USER14> I think it's a good statement. But I also recognize a dangerous dystopian world with only one render implementation. The competition between Trident/Gecko/Webkit/Presto pushed the web forward, not a single one of them — the whole process has done it.

At the same time I do understand from a developer perspective that a single "runtime" would be the Holy Grail at least as much as a single OS. But that's what standard stand for.

In the actual situation a vendor can implement things directly in their project, trying to push things forward for __its __benefit, in contrast to the competitors. If we lose this _appeal_ , will we lose the traction the web has?

<comment><USER15> > But that's what standard stand for.

Except that standards still tend to get implemented differently, which is a massive shame. My life long dream is to develop once, deploy everywhere. We're getting there with libraries such as jQuery and Backbone.js however we're still a long way away from that whilst there are multiple browsers to contend with.

<comment><USER14> Without any aggressive intent, how could Backbone improve your cross- environment problems? It's just an MVC pattern implementation, it doesn't abstract you from nothing.

<comment><USER16> Backbone.Router working on non-pushState browsers is one example.

<comment><USER14> _touché_

(You shouldn't resort to hash-bang, btw, it's considered a bad pattern)

<comment><USER16> Oh, I know. The main reason I'm aware of it is from having to work around and disable it!

<comment><USER15> Absolutely, exactly.

</comment></comment></comment></comment></comment></comment></comment><comment><USER17> Even if WebKit "wins", there'll still be _multiple_ WebKits [http://www.quirksmode.org/blog/archives/2009/10/there_is_no_...](http://www.quirksmode.org/blog/archives/2009/10/there_is_no_web.html)

<comment><USER18> This is an important point. It seems one can never quite escape fragmentation due solely to time moving on, let alone the complexities introduced when targeting multiple pieces of hardware. Reading this article I kept thinking "OpenGL and DirectX". One could argue each has its own monoculture with respect to Windows (or X-Box) and non-Windows OSes, but each monoculture is still fragmented. Windows devs still target DirectX9--initially released over 10 years ago, and the latest DirectX11.1 update will only work with Windows 8. OpenGL is just as bad with the 3.0 flop, issues with the move away from fixed function pipeline concepts, its ES version, and WebGL...

</comment></comment><comment><USER19> > Gecko is old, buggy and slow - at least in comparison to WebKit

Is this a widely held view?

From an end user perspective Chrome and Firefox feel pretty much neck and nack. Firefox has better memory usage, Chrome JS engine is a little faster.

I use both (Chrome on Ubuntu and Firefox on Android).

<comment><USER20> As an end user, based on anecdotal evidence, I can say that:

a) on both Windows and Linux, Firefox startup is slower than Chrome

b) at least on Windows, Firefox memory usage is _far_ worse than Chrome's

c) perceptually, Chrome feels a lot faster than Firefox

But yeah. Anecdotal.

<comment><USER21> As an end user, i can say that : a) Chrome memory usage is far less than Firefox. try 50+ tab and you'll see. b) Chrome is faster than firefox but it's buggy when you have many tabs c) Mozilla never try to take my personnal data

<comment><USER22> Actually this is false. Firefox is loads better when it comes to memory. Chrome is slightly faster but not when Firefox has Noscript installed.

</comment></comment></comment></comment><comment><USER23> Competition is great.

I remember the days in which a group of individuals managed to create a browser(Opera) that used 1Megabyte of memory instead of 40 of Netscape and 80 of IE.

As other people said, we need standards, and for standards we need multiple implementations. In my experience creating multi platform code, the best way to multi platform is for the code to work in different platforms from the beginning. I had seen code "designed for multi platform" on a single architecture and over time(gradually slipping) become dependent on a single one, and years later we have people realizing that they can't use the new tech without rewriting the entire codebase, expending millions in the process.

The same will happen with a monopoly browser engine, it will gradually slip.

In the future we could need to recreate the browser internals from scratch using parallel computers, or with new text handling internals, or someone like old Opera would proof that is possible to do the same with much less, super faster and no battery consumption. who knows?

</comment><comment><USER24> > Gecko is slow

You lost me there. Latest Firefox easily rivals Chrome for both startup and initialization time.

<comment><USER25> I use an AMD 1.6 GHZ powered netbook with 2GB RAM running Arch Linux. Chromium is unbearably slow after opening a few tabs. Firefox chugs along just fine.

<comment><USER26> I have never seen that on many systems, perhaps Arch has been configured in a strange way.

<comment><USER27> I have always noted that behavior, Chrome has a better memory management with a few tabs opened, but if you start opening a bunch of them, then Firefox clearly wins the memory battle.

<comment><USER28> That's probably because it shares memory between tab processes, since each tab is not in its own sandbox like in Chrome. Personally, I prefer the security of tab sandboxes.

</comment></comment></comment></comment></comment><comment><USER29> "IE attempted to follow in Microsoft's Embrace, extend, and extinguish strategy, and that is bad for the web."

Attempted and failed. And that was 10 years ago. Why are these WebKit guys always so stuck in the past? Microsoft is very clearly all about embracing the web.

More importantly, when will they realise that WebKit-specific CSS styles are _bad_ for the web?

<comment><USER12> Yeah. It's interesting to see people who embrace WebKit-only code _right now_ openly criticize MSIE for the damage it did to the web 10 years ago.

WebKit is the new MSIE. And WebKit-only code needs to be shunned the same way we (eventually) shunned MSIE-only code.

</comment></comment><comment><USER12> The fact that Google has been pushing Chrome only features onto the open web for a long time now, coupled with _everyone_ not running Chrome currently getting ads for it pushed into their face all the time, on all Google-owned services, tells me all I need to know about Google's _real_ stance on web- standards.

I think Chrome (in what it has allowed Google to do) has been bad for the web.

<comment><USER30> I couldn't agree more.

</comment></comment><comment><USER31> This is a silly argument. You cannot force others to use one product. WebKit is great, but it is still a project, governed by some people, and with certain goals. People want to create browsers who may have other goals, so either they have to convince the WebKit team to follow them, or fork, which ends up causing the same problem of multiple platforms.

We have open protocols and specifications. The web uses HTML, CSS, etc. Then it's up to the various rendering engines to adhere to those.

</comment><comment><USER32> the usual ridiculous trope that "if only we had a single $PROJECT all the people working on the current competitors would work on $PROJECT instead and everything would be great" is enough to discount this whole lot of drivel.

</comment><comment><USER33> Don't get me started on WebKit fragmentation. Between browsers, webviews, and platforms, it seems like everybody's using a different version of WebKit on mobile.

<http://www.quirksmode.org/webkit.html>

</comment><comment><USER34> "Now Gecko is old, buggy and slow"

Fuck off dude. A monoculture is ideologically bad in itself but at least you could come up with some tech args. Saying that basically nullifies the entire thing.

</comment><comment><USER35> Following that logic, KHTML should have been killed back in the day.

</comment><comment><USER36> > WebKit is open source

I think a critical aspect of open source code is that it can be forked. Wouldn't a Webkit monoculture stand in the way of this?

<comment><USER37> The OP's argument seemed sort of sensible to me until I read this. Ideas need to compete. If it's not Gecko vs Webkit, it'll be Webkit vs other branch of Webkit. Monoculture will only last until "Why don't you accept my pull request, when this is obviously a better way of doing it? Because it's not better. Go fork yourself."

</comment></comment><comment><USER38> While we are wishing for things: I wish there was a fully-featured modern rendering engine written in something other than C++.

<comment><USER39> Mozilla has a prototype browser written in Rust called Servo which might be worth keeping an eye on: <https://github.com/mozilla/servo>

</comment></comment><comment><USER40> Haha, is it really your opinion to support browser with most rendering bugs in these days? They are rushing to implement new things but they are not willing to repair old bugs even not to fight with regression. I can say that only good part is V8 engine, others are shit.

</comment><comment><USER41> Nothing but FUD (regarding Gecko). Would prefer to read something more objective.

</comment><comment><USER42> Isn't the biggest problem that it gives one engine too much power over the web? Like IE in the first browser wars, it could start ignoring the web standards and implementing its own features, which are badly thought out and harmful for the web. For example, with a WebKit monopoly, suppose the WebKit authors introduce `window.badlyThoughtOutFeature()`. It's instantly a de-facto standard, and all future browser makers are obliged to support it for backwards compatibility. With multiple engines, nobody has too much power and can get away with things like that.

</comment><comment><USER43> Sorry, but there is this illusion of WebKit being a totally opensource project. This is not true. It is mostly controlled by Apple. Any big decisions need to be "approved" by them. See the recent contribution changes they made about WebKit2 with no consideration for other developers. See how they oppose to any "cleanups" and "refactoring" that doesn't come from them.

I am very happy there are other engines like IE and mozilla. It would be very hard to keep html5 and related standards in check without these engines.

</comment><comment><USER44> I support the monoculture. We wouldn't need vendor prefixes if everyone just ran WebKit to render HTML and CSS. It's free and open source. MS can take the engine now and call it IE 12. New HTML and CSS features would be supported more quickly when everyone is working on the same rendering engine.

</comment><comment><USER45> I'm from China. I support the Communist Party monoculture.

</comment><comment><USER46> In a world of Pepsi and Coke, how can _three_ rendering engines be too many?

1\. Trident (IE10+) 2\. Gecko (Firefox) 3\. WebKit (Safari, Chrome)

(Yeah, Opera needs to just.. stop. So sick of all the Opera oddities, combined with their 0.5% market share.)

Proposing that there be only one seems very dangerous to me. But as an argument for Opera (and other tiny-market-share) browsers dropping their proprietary engine and switching to either Gecko or WebKit, I'm all for it.

<comment><USER47> Because you aren't wasting resources (developer time) when picking between pepsi and Coke.

<comment><USER48> But you are wasting resources when you use features that are not properly standardized.

<comment><USER41> Not all features that are standardized are implemented properly on all browsers. This is what uses developer time.

It's not terribly different from the situation that exists in the C++ compiler world. Different compiler vendors implement different featuresets. It took many years after the release of the 1997 standard for any compiler to implement it 100%. Is there a compiler out there that implements the current standard completely?

</comment></comment></comment></comment><comment><USER49> This is more like supporting standard than supporting monoculture. monoculture is bad; standard isn't

</comment><comment><USER50> Will Google open source it's core search engine? That will be good for an open web too :)</comment>


Darlic – Website Builder to Make One's Life Easier - <AUTHOR> https://firstname.lastname@example.com/darlic-website-builder-to-make-ones-life-easier-11570dbbc6a0 <comment><USER2> Seems like there's nothing there. No screenshots, ipsum text in many places</comment>


Ask HN: Are ergonomic keyboards really useful? - <AUTHOR> Are ergonomic keyboard really useful? What is your opinion on Microsoft Natural Ergonomic 4000 keyboard?<p>I would really appreciate if you could share your experience. <comment><USER2> I have a Natural 4000 and love it.

It all depends if you have suffered from RSI. I used to type on a normal laptop keyboard all the time. Then I got pains along the top of my forearms, i.e. RSI. I switched to an 4000 and I haven't had that pain since.

The most important thing to do is be aware of your body. If you get stiff or sore or pains or certain joints/muscles feel tired, that's your body trying to tell you that you are doing something wrong. Listen to your body, adjust how you do things.

<comment><AUTHOR> Thanks for sharing, For the past week,i feel slight pain on finger joints; so being a bit cautious, as it can be related to RSI. If i stop using keyboard for sometime it goes away. but will be back after typing for sometime.

<comment><USER2> That sounds like RSI. But don't just listen to random people on the internet, go talk to a doctor or a physio.

What territory are you in? Are you an employee? If EU, there is EU law saying that all employers must do an ergonomic assessment of a workplace.

<comment><AUTHOR> I am based in India, and is self employed.

</comment></comment></comment></comment><comment><USER3> My arms lit up with flames, that's how bad my RSI got. The ergonomic keyboard helped, but only psychologically: I got attention for my problem.

So I moved on with my life. Gave up, did no longer insist on my genius. My problems are gone ever since. RSI isn't in the movement, it is the stress that motivates them.

I'm still a genius, but a much more deliberate and respected one.

So get a life? Accept that society is wrong about just about everything. But it exists nevertheless. It is an exploit of your human nature: you were born as its loyal child.

You thought you could win society, but you can't fight, and win, something that does not care about you. Society disposes of you.

So meet the rest of us that didn't have the chance you have to begin with. We have common sense but we are denied and oppressed by folks like you, that try to escape our fate, get your glory, by bringing that fate upon us.

From our point of view, you are really stupid, to the sad point of being a criminal. But hey don't worry, God doesn't exist, now does he?

Of course you may have missed the point, that society promises to make you a God, but only if you accept it as God and abandon our humanity. This choice is what you are trying to avoid, thus pushing yourself into RSI.

Recognise the dragon. The flames are your own. You can type that on any keyboard you want.

</comment><comment><USER4> I use a computer for most of the waking day, and started getting bad wrist pain last year. I replaced my work keyboard with the 4000 and the pain went away within days. If you look at how your hands sit when typing, they come in on an angle, and you bend them slightly to suit a rectangular keyboard, the ergonomic keyboards simply leave your wrists at their natural position.

They are very cheap, and a great investment.

<comment><USER5> +1 for the 4000. Replaced my old stock keyboard at work about 6 months ago, and I will never go back.

</comment></comment><comment><USER6> I switched about a month ago to a SafeType keyboard[^1], which is a "vertical keyboard". My first thoughts went to the Microsoft Natural Ergonomic 4000, but I could find a second-hand SafeType for slightly more than 1/10th of its price. So I really could not say no. The experience is that I don't need to take "wrist breaks", i.e. breaks I took every 10 minutes when I was furiously typing (like I do now), but I only stop every 50 minutes or so.

Of course a vertical keyboard is way better for you wrists than (almost) any other keyboard, but still anything ergonomic is __way __better than anything not ergonomic.

[^1]: <http://safetype.com/>

</comment><comment><USER7> The 4000 is the best ergonomic keyboard I've used. Microsoft don't get enough credit for their hardware division.

</comment><comment><USER8> I've been using the Kinesis Advantage for about 8 months, and I'd say ergonomic keyboards are definitely useful.

The biggest factors in RSI tend to be taking frequent breaks and making sure you desk and chair are set at proper heights, but after doing those things I was still having frequent wrist pain and decided to look into more ergonomic devices.

I started with the MS 4000 and the Kinesis Vertical Mouse (<http://www.kinesis-ergo.com/evoluent.htm>), but after a few weeks was still having pain and it was starting to get worse. Your mileage may vary, but I found the MS 4000 to be just about the same level of comfort as a standard keyboard. It didn't really offer anything more than having a bit of a split in it. The vertical mouse seemed to help on days when I was using the mouse a lot, but on days with lots of typing, I was still getting pain.

I decided to bite the bullet and get the more expensive Kinesis Advantage. After getting used to it, my pain went away, so I'd say it was worth the extra cost. Maybe it's just the sunk cost of relearning to type on a weird shaped keyboard makes me want to feel like the time was worth it - but I suppose it doesn't matter as long as the pain is gone. Also, it's just really cool looking which is good for nerd cred in the office. :D

</comment><comment><USER9> Ergonomic keyboards ease strain when one is typing a lot, which can easily happen when one types for a living. They are a necessity for many who end up with wrist strain (I had my first serious episode at age 17, another one at age 22, and another one at age 24).

They also can enable you to type faster. This isn't very important for coding, but it may be important in a variety of other contexts depending on what you do. I've been trying to push over 90 awpm myself.

Here are the keyboards I've had and tried:

MS Natural Elite, classic, affordable, does everything right. I feel the same way about this keyboard as I do the classic MS intellimouse, which was superceded by (IMO) inferior products. The spacebar felt a bit loose and broke on me a couple of times.

MS 4000, never felt as smooth to me as the Natural Elite, but easier to obtain. I think they made the spacebar more stable, but not as easy to reach. I was in the habit of putting my natural elite in my lap and pounding away, the adjusted curvature of this model didn't allow this and otherwise annoyed me.

Kinesis Advantage, major price tag and major pain to use if you have to use a mouse periodically. Also more difficult to adjust to. That said, gives you a slight advantage w/ typing speed (+10 or so words per minute) and allows you to easily touch type the numbers, something that very few people can do. Also, very very comfortable.

Do you really need an ergonomic keyboard? Depends on what you do. I predominately use a laptop keyboard (on my 13" Air) these days and haven't had a major issue with strain for some years, largely because (I assume) I do other wrist intensive exercises (primarily yoga). That said, if I ever did something again where I really needed to push 100 wpm, esp. over an extended period of time, I would definitely crack out my ergo keyboards.

<comment><USER10> _They also can enable you to type faster._

Do you happen to have any reputable references for this? I'm truly curious. For years people have continually spread the idea that typing on an ergonomic keyboard could allow you to type faster but it seems like everyone spreading the message are people who heard it from others and/or just relaying the message without any real evidence that suggests so (or maybe I just never personally came across any).

I have friends who type in the 130-150 wpm range using a standard keyboard, and I myself border around 100, so its hard for me to believe that switching to an ergonomic keyboard naturally means it'll allow me (or anyone else) to type faster. As a matter of fact, I've tried years ago to get use to them purely for speed reasons and no matter what I did, my type speed decreased drastically. It was awkward and even after giving it a chance for a few weeks, I just gave up.

While I can agree with the wrist ailments it aims to solve, I often wonder if the type speed thing is a perception.

For the record, I briefly tried to Google something on the subject before writing a response here, and came up with nothing (admittedly didn't try too hard however). This thread sort of peaked my old interest in this speed typing debate if you will.

<comment><USER9> Yep, I'm about 110 wpm without adjustment last time I clocked on a regular keyboard, but I can't maintain this for long periods of time. I suspect that ergonomic keyboards allow you to maintain high speeds, not necessarily to reach them. I don't personally don't find myself slower on, for instance, my old natural elite.

My only written reference is the material by "ergonomic experts" included with my Kinesis Advantage -- a bit on the unreliable side. Would love to know if you and Google can turn up anything else.

</comment></comment></comment><comment><USER11> I have a Natural 4000 too. I had wrist pain for years and then it got drastically worse in a few months. My partner recommended the keyboard and within two weeks my wrist pain was completely removed with no other lifestyle changes. I've had it for two years and the pain has stayed away.

Apart from RSI relief I find it has also increased my typing speed.

</comment><comment><USER12> I have had two Microsoft Natural Keyboards (the 4000 and its predecessor). I chose to go with an ergonomic keyboard even though I dont have RSI(thankfully) and i have to say that an ergonomic keyboard is the one of the best things ever. The keyboard allowed me to naturally sit and use a keyboard properly. Furthermore I stopped having to worry about what to do about my elbows and just left them be. I have also found that after extensive use of an ergonomic keyboard, I feel uncomfortable if I switch to a normal keyboard which tells me that the normal keyboard is putting to much strain on my hands.

In the end I would echo rmc's advice which is to be aware of your body and to adjust accordingly.

<comment><USER9> Do you mean the classic Natural Elite or the one of the intermediate versions? The classic Natural Elite still feels a bit better to me than any of the new versions (including the 4000), which is why I keep a stockpile in my basement.

</comment></comment><comment><USER13> I have the Das Keyboard Silent which is a mechanical keyboard with brown switches and it helped me a great deal with neck pains partly beacause you don't have to press so hard and partly beacause I don't move my neck to look at the keyboard as much (whats the point, the keys are all blank)

I'v tried a bunch of ergonomic keyboards in terms of how the keys are placed and how the keyboard is split but the only thing that really worked for me was the switch to a mechanical keyboard. I suggest to try a mechanical keyboard for a while, I can't say it works for everyone but for me it was a ginormous difference.

</comment><comment><USER14> I have a MS Natural 4000 too and I always make sure every computer I spend a lot of time on has one. I do really wish they made a model without the numeric keypad. I find it ironic that an ergonomic keyboard forces my right hand to reach to far for the mouse. There is another MS arc style keyboard with a separate bluetooth keypad but the keyboard isn't quite as good as the 4000.

Anyone know of an ergonomic keyboard as good as the 4000 without a keypad?

<comment><USER15> I ran into the same problem myself and started using my left hand for my mouse -- less travel and surprisingly convenient for most of my normal mouse interaction (which is primarily scrolling, I tend to use keyboard shortcuts for most active interaction with content).

</comment></comment><comment><USER16> I used to program with a regular keyboard, but as I got older I found that wrist fatigue became more of an issue. I now code on a Microsoft Natural Ergonomic 4000 and never have any issues. There is a short learning period for the split keyboard, but I didn't find it slowing me down for more than 4 hours.

</comment><comment> loup-vaillant Here is my personal experience:

Split design helps. Straight columns help (compared to staggered keys)[1]. I don't know first hand about mechanical keys, but nearly everyone say they help, compared to the cheap membrane keys. I like scissor switch a bit better than the membrane. Based on that, I'd say your best bet is a Kinesis keyboard (contoured, advantage), because it has all 3. Do listen to those who actually tried it however (Jd for instance says that using it with a mouse is a pain).

Another keyboard that looks very promising is <http://trulyergonomic.com/> (not out yet, and they brag far too much for my taste, but nevertheless looks promising: flat (easier with the mouse), split, straight, and with mechanical keys).

Now, about the keyboards I personally experienced: the cheap default keyboard is the worst by a relatively wide margin. I tried the MS 4000, and the split design makes things much better. Then I stumbled upon <http://typematrix.com/>. It is flat, but the straight design more than makes up for it. I like it much better than my MS 4000. I recommend you use a palm rest however: without it, your wrists can bend significantly backwards, defeating the purpose of an ergonomic keyboard.

Note that I speak under the assumption that we all touch type. If you don't, you should start. It gives a _huge_ boost in comfort. It also helps ease neck and eye strain, as you don't need to repeatedly glance down at your keyboard. Finally, without touch typing, ergonomic keyboards are much less useful. I also recommend that you learn a Dvorak layout, or equivalent for your language (note that even though Dvorak is optimized for English, it helps many other languages as well, due to similarities in the frequencies of letters). I found the gain in comfort noticeable, though less great than touch typing. It also took me some time to learn (expect 1-4 weeks of greatly diminished typing speed).

[1]: <http://www.loup-vaillant.fr/articles/better-keyboards>

</comment><comment><USER17> You might also consider using a dvorak layout. If you're willing to learn it, pair the dvorak layout with something like the TypeMatrix keyboard <http://www.typematrix.com/>

That's the best typing experience you'll ever get.

</comment><comment><USER18> I've had a Microsoft Ergonomic 4000 keyboard for a couple of years, now. Apart from the (relative) comfort, it's a well-built, sturdy (i.e. heavy) peripheral, which in itself improves the typing experience, I think.

If you are thinking of switching to one, then be prepared to spend some time adapting to it. I'm a ~100wpm touch typist, and while at university had used the 4000's predecessor, but it still took me nearly three months to get back up to speed after switching to the 4000.

But, having made the switch, I don't find my ability to type on non-ergonomic keyboards affected in the least; I routinely switch back and forth between my desktop and Macbook.

</comment><comment><USER19> I have a 4000 and have been using various split keyboards (previously Belkin models) for as long as I've been coding. I've never experienced RSI despite spending most of every day at a keyboard, but as I never had it in the first place I can't say for sure that it's down to the keyboard.

The only disadvantage that I can see is that I'm so used to split keyboards that I find using an ordinary keyboard uncomfortable, that includes my laptop and netbook too, neither of which I do any serious work on without first plugging in an external keyboard.

</comment><comment><USER20> I'm using the natural keyboards of Microsoft since the first model. I can't type in a normal keyboard from day 1. It's amazingly comfort and there is no way I could return back to the standard keyboards. I'm using the pc 14 hours per day and that includes much typing. I want to believe that the reason I didn't have any problem with my hands all this time (carpal tunnel) is because of these keyboards.

Unfortunately Microsoft isn't very fond of this series and since the last model (Wireless 7000) 2 years ago, it hasn't release any new model.

</comment><comment><USER21> I really like the kinesis advantage. It made the pain I had in my fingers hurt a little less.

link: <http://www.kinesis-ergo.com/advantage.htm>

</comment><comment><USER22> I used to love my Microsoft Natural Ergo 4000 keyboard. I did find that the pressure (PSI to press a key) goes up quite a lot after owning one for a few months, which can cause finger pain if you are coding for long hours.

After having MS Ergo keyboards for about 7 years, I finally switched to a Kinesis model (<http://www.kinesis-ergo.com/advantage_pro.htm>), and although more expensive, the pressure has stayed consistent for the 1+ years of owning it.

</comment><comment><USER23> Yes, they are. 4000 is by far the best out there. Caveat: if you use more than one PC, make sure you have same keyboards for each of them.

</comment><comment><USER24> Have have two of these.

[http://www.newegg.com/Product/Product.aspx?Item=N82E16823109...](http://www.newegg.com/Product/Product.aspx?Item=N82E16823109143)

One for home and one for work. I've been using them for years. I tried the 4000, but I didn't like the feel of the space bar which is the key you use the most by far.

<comment><USER9> Yep, I try to keep an extra one or two in the basement myself in case my main one goes bork. I think the feel is far superior to the 4000. I also put down the $$$ for the Kinesis and, though I like it a lot in many ways, it is a bit more than I need. I'm doing this primarily for comfort and speed, not out of CTS-induced necessity.

</comment></comment><comment><USER25> A good review of the 4000: [http://xahlee.org/emacs/ms_keyboard/ms_natural_keyboard_4000...](http://xahlee.org/emacs/ms_keyboard/ms_natural_keyboard_4000.html)

</comment><comment><USER26> Yes, ergonomic keyboards are great. In general, ergonomics is of sublime importance but is really easy to ignore for most people.

</comment><comment><USER27> Wish there was something for distal finger joint pains...find myself typing with a stylus. Still in my early 20s.

</comment><comment><USER28> I don't know if they ('ergonomic' keyboards) are 'healthier', but I quite enjoy typing on them.

</comment><comment> T-zex related: <http://news.ycombinator.com/item?id=185743></comment>


What We've Built Is a Computational Language - <AUTHOR> https://blog.stephenwolfram.com/2019/05/what-weve-built-is-a-computational-language-and-thats-very-important/ <comment><USER2> One could make the point that Wolfram language is really a library of cloud functions which require their proprietary cloud service to be useful. It also looks a lot like a Lisp with M-expressions.

While a lot of those functions are impressive, what makes Wolfram a non- starter for me is the fact that you can't build a deployable app with it with anything but a notebook interface. A notebook might be great for a researcher but it's not a good interface for many other kinds of programs.

I also have an issue with Wolfram's documentation or the lack thereof. Because the functions take weird and unpredictable arguments, it's difficult to wrap one's head around what might fit where. This is a strong contrast to Lisp where the meanings of arguments are unambiguous, encouraging exploration and invention because you can keep the language "in your head." Wolfram creates dependencies on their cloud sever and their doc which will always make it niche.

<comment><USER3> >>you can't build a deployable app with it with anything but a notebook interface. A notebook might be great for a researcher but it's not a good interface for many other kinds of programs.

There are several IDEs one can use: [https://www.wolfram.com/developer/resources/](https://www.wolfram.com/developer/resources/)

>>I also have an issue with Wolfram's documentation or the lack thereof.

There are literally tens of thousands of pages of documentation? [https://reference.wolfram.com/language/](https://reference.wolfram.com/language/)

<comment><USER2> What I meant is the interface of the _built app,_ not an IDE.

Whenever I bring up Wolfram doc, someone tells me there are thousands of pages. I know that. Have you read any of them? They're not like any programmer doc I've ever seen. Instead of explaining principles and rules, they just give a lot of examples. It's not really helpful and it helps cement my position that Wolfram is more of a library than a language.</comment></comment></comment>


Scientists Taught a Robot Language. It Immediately Turned Racist - <AUTHOR> https://www.buzzfeed.com/nidhisubbaraman/robot-racism-through-language?utm_term=.hmQ11gRnV#.jjGxxyYra <comment><USER2> Original, less clickbaity article: [http://spectrum.ieee.org/tech- talk/robotics/artificial-intel...](http://spectrum.ieee.org/tech- talk/robotics/artificial-intelligence/ai-learns-gender-and-racial-biases-from- language) and [https://news.ycombinator.com/item?id=14110807](https://news.ycombinator.com/item?id=14110807)

</comment><comment><USER3> It is not racism but prejudice. And it is also not algorithmic discrimination but statistical inference.

This is also main reason I advocate for the importance of the privacy.</comment>


Social brand destruction: A survivor's account - <AUTHOR> https://email@example.com/social-brand-destruction-a-survivors-account-1d988225611c <comment><USER2> They claim to have an "industry-leading security profile" and yet they allowed user generated content to be hosted under their primary domain. At least this was an inexpensive way to learn that lesson.

<comment><USER3> Right, even Wordpress and Weebly are doing the same with their domain name. Wondering how they are not banned from sharing.

</comment></comment><comment><USER4> It's like negative SEO for social media sites. Associate a service/company you dislike with spam and offensive content, flood social media services with it and get them wiped out immediately afterwards.

It's a trick that'd probably work just as well on Twitter and Reddit than it would Facebook.

<comment><USER5> Indeed, this trick should work on any social network, that's scary! Although it seems facebook is now doing a good job to quickly review again and unban domains when the offending content is removed.</comment></comment>


Best to pay cash at California hospitals - <AUTHOR> http://www.clinicpricecheck.com <comment><AUTHOR> What I've learned from spending a year researching and collating California's hospital prices?

\- Paying cash for services in California is often a very good idea, since cash prices for hospital services approach medicare reimbursement rates (or about 80-95% off hospital's list prices).

\- The average insurer discount is low (only 30% off the lis price - a FAIR estimate) and often far, far above the medicare reimbursement rates.

\- LA has way better cash prices than the Bay Area where a few hospital systems really dominate.

<comment><USER2> The last time I tried to do this at an urgent care center because I didn't want to have to pay my stupidly high deductible for 5 minutes of doctor time and a prescription for what I already knew I had, the front desk didn't even know if paying cash was an option, let alone how much things cost. I'd love to see this as an option at more places until we can get a less-insane healthcare system.

<comment><AUTHOR> Hospitals (and maybe urgent care facilities) will try very hard to prevent you from paying cash prices if you have insurance, because they will make less money. Some hospitals might even refuse to share their cash rates with you if you tell them you have insurance.

Even if you have shared your insurance with a health provider, you can pay cash prices, but you have to sign a document informing not to bill your insurance.

The best cash rates are in Los Angeles with a few hospitals that are the medicare reimbursement rates or the medicare rates plus 5%. There are also hospitals that cap surgical costs for self-payers in LA, which is can be an awesome deal. Sadly those kind of excellent cash deals do not exist in the Bay Area or San Diego.</comment></comment></comment>


Characterizing people as non-linear 1st-order components in software development - <AUTHOR> https://ameyakarve.wordpress.com/2012/07/22/characterizing-people-as-non-linear-1st-order-components-in-software-development-cockburn-us/ <comment><AUTHOR> I found this wonderful article linked in a comment by ploxiln last year ([https://news.ycombinator.com/item?id=16893006](https://news.ycombinator.com/item?id=16893006)) and thought it was worth sharing. It was written in 2000 but seems as relevant as ever.</comment>


Implementing a Network-Based Model of Epilepsy with Numpy and Numba - <AUTHOR> https://danielegrattarola.github.io/posts/2019-10-03/epilepsy-model.html <comment><USER2> As an epileptic mathematician, I'd like to say thanks for making this. It was both interesting and informative.

As an extension, could I suggest looking at different types of seizure? E.g. tonic clonic vs Grand Mal

<comment><USER3> For the overwhelming battery of testing I had before lobeectomy (EEGs, MRIs and CTs of course, but also PET, MEG and SEEG) I'd have never imagined that anybody was doing academic research from a timing perspective. I've subsequently dug into A LOT of the physiological research but this is all new to me. The math is WAY beyond me but the general concept is intriguing.

<comment><USER4> Was it a successful surgery? Which temporal lobe was it on?

<comment><USER3> Right temporal lobeectomy. Bill Binghamon resected 3 discrete parts. Amygdala, Hippocampus and temporal lobe. The post-op MRI is pretty wild. I'm living alone now and working mostly from home so I _could_ be having seizures and not know but I haven't had anybody say anything. I was having complex partial seizures so unless I drop something and not notice it until later or suddenly realize I peed a little I could never know.

<comment><USER4> Wow, you had a lot of brain matter removed. I just got out of video EEG yesterday and am hoping I can have surgery, or that it otherwise goes away. Mine is left temporal lobe, which seems like a delicate place for them to operate on. Seems like it's in the neocortex though, so I'd probably keep my hippocampus and amygdala. I still have a lot of testing left - I don't know how I'm going to do it all. The video EEG was bad enough. Any regrets or defecits?

</comment></comment></comment></comment></comment><comment><USER5> This is great. Davvero impressionante. Thanks!

Actually the mathematics of epilepsy are as intriguing as those of tumor propagation. With a lot of potential uses not only in understanding, but also in potential therapeutics.

<comment><AUTHOR> Grazie :D

I agree, it's really fascinating. The thing that interests me the most are that many natural phenomena can be modeled as a network of some sort. It's mind-blowing how everything is connected.</comment></comment>


The Corona Hat helps you keeping the distance to your fellow citizens - <AUTHOR> https://www.hakanlidbo.com/coronahat <comment><USER2> If you wear that in public, people will keep their distance.</comment>


Show HN: A web page to demonstrate that files can be thought of as numbers - <AUTHOR> https://smchughinfo.github.io/howbig/file-as-a-number.html <comment><AUTHOR> The intended audience is people who are just learning about programming. I made it after trying to explain this concept twice and completely confusing everyone both times. Any suggestions or things you notice that are wrong or aren't clear?

<comment><USER2> It's not clear why anyone just learning about programming would need to know this, but somehow already know what unicode and binary are?

</comment></comment><comment><USER3> Next, you should check hash like MD5.

Now you can represent any file in a fixed-size string. How cool is that?</comment>


What's better about Ruby than Python? - comp.lang.python - <AUTHOR> http://groups.google.com/group/comp.lang.python/msg/28422d707512283 <comment><USER2> The title made me nervous that this would be run-of-the-mill fanboy garbage. But I trust the author (Alex Martelli), so I read it, and I'm glad I did. It's reasonable and sane.

My two big take-away points:

1) It's very nearly a wash. Ruby and Python are so close together (beneath any superficial differences) that distinguishing is _almost_ an exercise in futility.

2) The key thing about Ruby he doesn't like is its "TOTAL, unbridled "dynamicity", including the ability to "reopen" any existing class, including all built-in ones, and change its behavior at run-time." To M's way of thinking, this makes Ruby less "suited for use in large production applications" and more suited for "tinkering."

I don't buy the argument myself, but I will admit that when I first started learning about Ruby, everything I read went on and on about how cool it was that you could open everything up and play. But as I read more, I discovered that the community seems pretty heavily tilted against monkey-patching now. (I may be wrong about this, but it's my impression.) I don't think that means Ruby is for tinkering only, but it does suggest that Martelli's concern is legitimate.

He also offers some nice pasta recipes along the way. (So much so, that now I'm hungry.)

<comment><USER3> We run probably one of the largest Ruby production systems that has ever been made and the dynamism and "monkey patching" are used daily to skillfully make the language better and better over time for the tasks that we solve.

It's absolutely crucial to teams that internalize it's power and pitfalls.

<comment><USER4> "one of the largest Ruby production systems that has ever been made"

As an aside, I worked on a very large Ruby app (built by about a dozen developers over the course of years) and then later worked on another very large Ruby app of similar size. One of the employees there remarked that it was the largest Rails app built. I think the people who write very large Ruby apps tend to be very quiet about it (no blogs, no open-source, less community participation, etc.) so that if you're one of the ones writing a very large Ruby app you think yours is the largest. :)

<comment><USER5> I can fully agree about the quietness of developers working on large ruby app considering I work on such an app but were not big on advertising it yet.

</comment></comment></comment></comment><comment><USER6> My biggest beef when I've done a little Python has been inconsistency, such as that over functions versus methods. Ruby has a simpler mental model to me. I hear this has improved in Python 3.0, but it felt bleurgh to use functions like _len(str)_ some of the time and methods at other times (though _str.__len__()_ is a poor workaround here). That said, the reasons have been discussed and defended numerous times, so it's definitely just my opinion rather than a critique of the language: [http://mail.python.org/pipermail/python- dev/2008-January/076...](http://mail.python.org/pipermail/python- dev/2008-January/076612.html)

<comment><USER7> The main reason why I like having functions instead of methods is that it removes the possibility for inconsistency. In some languages, you have some objects with methods named size, some with length, etc. With python, you just have one global len method to remember.

<comment><USER8> I am often frustrated by this as well, but I'm not sure it's specific to Python or Ruby. Why is it Math.log(1) rather than 1.log()? And given whatever reason it's Math.log, why is it a.inverse() when a is a Matrix not MatrixMath.inverse(a)?

Is there a good guideline for static method vs. instance method distinction?

<comment><USER9> In python the convention tends to be:

      a.inverse() -> mutates 'a' to its inverse
      MatrixMath.inverse(a) -> returns the inverse of 'a', leaving 'a' unchanged

<comment><USER10> 1 isn't a matrix. Integers/floating point numbers are in many languages treated differently than other types for reasons of performance and memory management etc. Ruby isn't different in this respect (IIRC they call it immediate objects). A matrix is a "normal" object in ruby.

BTW the ruby equivalent for the above convention would be (maybe inspired by scheme?)

        a.inverse!() -> mutate a
        a.inverse() -> return the inverse

Which one is more consistent?

<comment><USER11> I am a python user, but I _really_ like that .inverse!() notation indicating that the object itself is being mutated. It's concise and consistent. Sometimes punctuation in names is exactly what you need. Same with ? for predicates. I'll take even? over evenp any day of the week.

</comment></comment></comment></comment></comment></comment><comment><USER12> The biggest difference between Python and Ruby is in the mindset of the developers that choose them.

I think of Ruby and Python as two languages standing back-to-back in the same spot, mostly unaware of each other, greeting developers who come from different directions.

<comment><USER13> I know it's early yet, so take this with all appropriate grains of salt, but that is easily the most insightful comment I've read today, and really drives home a point I've been trying to make for awhile (and probably failed to).

I started out with Ruby, because of Rails, and just never seemed to quite make it jive with me mentally. When I found Python (because of Django), everything clicked more. I'm not even sure it was the language differences that clicked more for me, or whether it was the documentation, or the code samples, or some other intangible that made it all work.

<comment><USER14> Possibly, your greater experience was the difference. I don't know what experience you had before, but if you came to Ruby with no experience in a "dynamic" language, everything seemed new and hard-to-understand. Later, coming to Python, you probably understood everything better as you were learning it, having had experience with Ruby.

Just a guess, of course.

<comment><USER13> I'd had some experience with Perl and quite a bit of experience (had built a couple large-ish apps) in PHP.

The reason I referenced Rails and Django as motivators in finding those languages is because after having built and then forced to maintain an enterprise-class application in PHP, I REALLY liked the notion of an MVC framework, and things like Cake and Symfony weren't out (or at least I didn't know about them) yet.

So, yeah, I wasn't a programming newbie altogether, but I wasn't as comfortable in just picking up new languages either.

</comment></comment></comment></comment><comment><USER15> This is good stuff, except that he seems to misunderstand the ()-less method call in Ruby. There's no "function" or "object" being "called" with that syntax, as in Pascal or Visual Basic (his chosen analogies). There are no functions in Ruby in that sense, and callable objects are explicitly called (with a "call" method). The expression "foo" in Ruby evaluates to the value of the local variable "foo" if any, or else sends the message "foo" to self and evaluates to the result. So yes, the parentheses are optional, but the ambiguity is with local variables, not with any other form of function call-- so the ambiguity is hardly noticeable.

Also, the parentheses are _always_ optional, not just for zero-argument calls, so he also missed the opportunity to discuss "poetry mode Ruby": a bunch of method calls with no parentheses. Stylistically, "poetry mode" enables the pseudo-DSL style that Ruby frameworks use frequently, but can't really be done in Python.

<comment><USER16> Yes, there is a semantic difference here. In Python, you can do things like this:

      if baz>10:
          func = self.foo
      else:
          func = self.bar
      result = func()

Here func gets assigned something called a "bound method", which has a reference to the object and the method, which you can then apply the () operator and call. I am not a rubyist, but my understanding is that you would use a symbol to do a similar thing.

<comment><USER17> Yep, the equivalent would probably be something along the lines of:

        if baz > 10
          func = :foo
        else
          func = :bar
        end

        result = self.send(func)

<comment><USER18> That may accomplish the same thing, but the direct translation would be:

        if baz > 10
           func = method(:foo)
        else
           func = method(:bar)
        end

        result = func.call

Here, we actually deal with the Method objects, rather than just sending a dynamic message. Although the send() approach would be closer to idiomatic Ruby, I wanted to emphasize that dealing with methods as first class objects in Ruby is indeed possible.

<comment><USER19> I HATE dealing with first class functions in Ruby. I understand that it was a design choice, but man, in Python you can pass a function or a lambda and you just don't have to worry about which one you're calling. In Ruby, () will explode on a Proc object. What is with that?!!?

<comment><USER20> Because () doesn't call a method, it's simply used where a method call occurs. To call a callable object, you use #call or (as mentioned by epochwolf) #[], the latter of which I personally detest.

It's fun to contrast this with Lua, by the way.

<comment><USER19> It's the inconsistency that bothers me.

In Python, you can make anything callable by providing a __call__() method, and the parentheses will work as expected. This makes functions fungible with _anything_ , including any object or anonymous function.

In Ruby, _only_ methods are callable, and everything else must be called with the call() method, which means you can't use one in a place where the other might be expected. They're two concepts with the same verb--call--that require different syntax. It's inconsistent.

<comment><USER21> You can also make anything callable in Ruby: just provide a call method. The parenthesis will still work as may be expected in Ruby, but, as several folks said before: in Ruby parenthesis are not used to call anything. A method is called simply be mentioning it. Anything that follows is an argument and sometimes parameters are needed for disambiguation of the parameters. This is counterintuitive, only because it differs from most other languages. If you want to postpone evaluation, you have to wrap the method call in a closure that you .call later: in Ruby a method is not a closure and not a function pointer. It's different than in many other languages, but that alone doesn't make it inconsistent.

<comment><USER19> Thank you--this is a good explanation of why the parentheses don't work on anonymous functions: Ruby's immediate calling essentially forces you to choose between "objects that you can call like methods" and "objects that you can easily pass around." This hearkens back to carbon8's comment (<http://news.ycombinator.com/item?id=1141245>); viewing Ruby's handling of first-class functions as "inconsistent" definitely betrays a Python-centric view of things.

In that sense, I see why it's not so bad; the difference between methods and anonymous functions is _very_ explicit, and when you want to pass things around, it's likely that you will have target code which expects a Proc object and source code that generates it. Perhaps it's not so bad because there are few legitimate use cases, if any, for transporting a _method_ when an arbitrary block is expected.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER22> What struck me the most was when he spoke about Java possibly borrowing string immutability from Python and then the realization that Python is an older language than Java.

</comment><comment><USER23> There are two things that Ruby has that Python doesn't have a good syntax for. One is blocks; in Ruby, I can write:

        foo { |x| puts x }

Whilst in Python, I need to write:

        def tmp(x): print x
        foo(tmp)

It's not really very nice.

The other thing is that Python has no concept of context. In Ruby, I can type:

        foo(x)

And it will execute foo(x) for the containing object. In Python, the closest equivalent would be:

        self.foo(x)

This syntax difference may seem trivial, but it allows you to do some very interesting things to classes. For instance:

        class Foo
          def self.property(name)
            define_method(name) do
              instance_variable_get(name)
            end
          end
        end

        class Bar < Foo
          property :x
        end

Now the class Bar has a method called "x", without us needing to explicitly define it.

Ruby's instance_eval method extends this further, allowing you to execute a block of code in the context of any object you wish.

<comment><USER24> > The other thing is that Python has no concept of context

Rather, I'd say that part of the zen of python is: _implicit is better than explicit_ , and I prefer python's behavior in this instance.

<comment><USER25> You've got that backwards for Python: Explicit is better than implicit.

<comment><USER24> doh!

</comment></comment></comment></comment><comment><USER26> This is a fairly superficial difference, but Python's syntax grammar is very conventional, Ruby's isn't. Compare the grammars of Python, Ruby, and ANSI C.

Python: <http://docs.python.org/release/2.5.2/ref/grammar.txt>

Ruby: [http://web.njit.edu/all_topics/Prog_Lang_Docs/html/ruby/yacc...](http://web.njit.edu/all_topics/Prog_Lang_Docs/html/ruby/yacc.html)

ANSI C: <http://www.lysator.liu.se/c/ANSI-C-grammar-y.html>

Python and ANSI C both have a similar organization of productions and names for statements and expressions. It's pretty easy to follow the grammar to obvious points where the language differs. What are valid unary expressions in Python and ANSI C? There's a production in each grammar that makes a convenient starting point and comparison is easy. What is a valid unary expression in Ruby? It's much less clear.

The Ruby grammar isn't large, so I'm sure some people prefer the way it's organized. Once you've absorbed the whole thing questions like "what's a valid unary expression?" don't matter anymore. But I think it's an interesting distinction to someone trying to decide which language to learn.

</comment><comment><USER27> I cringed when I saw this link, because I was a regular on comp.lang.python at the time. I remember very clearly this discussion and the ensuing flame war. This was when it dawned on me that these types of discussions live _forever_ on the internet. It pays to tone down your rhetoric, especially if you use your real name in the discussion. <sigh>, at least the link was not to the flame war in general.

</comment><comment><USER28> It's to be noted that while Ruby CAN change builtin functions, the metaprogramming ability is much more often used in cases like ActiveRecord, where you can say `acts_as_list`, and it reopens the AR class and inserts new list-related functionality. It's more powerful than simply using modules, since it can make decisions as it's being included.

Working with Ruby on a day-to-day-basis, I have never reopened core classes and changed anything. Rails comes with some common extensions which simply add new methods, which are less error prone (although I avoid Rails & ActiveSupport whenever possible).

</comment><comment><USER29> I think he's totally right about how to call methods. They just don't feel as first class as they do in JS or Lisp. I don't agree with his criticism of dynamic strings, however. The only time you want immutable strings is when you're not using them as strings. Ruby has symbols for when you need a hash key.

</comment><comment><USER30> Ruby and Python are so similar, in fact, that I'm really surprised that there is no ongoing effort to merge them together. They could really use one another's libraries and various VM implementations, for example; even the parsers are almost identical.

The only things that are really "different" between Python and Ruby are topical features of the grammars of each, that mostly disappear once the code has been AST-transformed. These could likely be expressed more succinctly in terms of a simple common base grammar, and two small, modular sets of reader macros.

<comment><USER31> As somebody who used Python a lot and being unable to learn Ruby, I have to say that I don't feel they can be merged.

I have been successful at learning a variety of languages. Ruby was difficult for me because it is so similar to Python and yet so different. You have almost the same syntax getting very different results. So if you come from Python you get the exact opposite experience to the principle of least surprise. On the other hand, if you move from OCaml or Erlang there are no surprises because the syntax is different enough that there are no pre- expectations.

Also, metaprogramming in Python and Ruby are quite distinct. The way Python went about it using metaclasses and decorators is very different to the monkeypatching you get in Ruby, so I don't expect the AST results to be that similar for idiomatic code in both languages.

</comment></comment><comment><USER32> Basically Ruby and Python fill the same niche.

When two species fill a different niche in nature, they can co-exists. When they fill the same niche, it is a bitter fight for survival.

<comment><USER33> more evidence: vi vs The Unholy, er, I mean, Emacs

<comment><USER34> One of those is an editor. The other is a lisp environment with editing functions.

</comment></comment></comment><comment><USER19> There are many small-to-medium differences between Python and Ruby, but in my experiences, no one _actually_ chooses one language over the other because of these differences. When you ask someone, "Why do you prefer Ruby over Python?" or vice-versa, everyone has their favorite differences to talk about, but often, the choice is actually made before enough familiarity with both languages is established to be _aware_ of those differences. Most people choose between the two based on _je ne sais quoi_ , rather than an objective comparison of the differences.

More succinctly: "Ugh! Python? I hate the idea of syntactic whitespace," and "Ugh! Ruby? I have the idea of using @ for instance variables," are both cursory judgments that mask deeper preferential foundations therein.

</comment><comment><USER35> I love the cooking analogy in the middle I use them often when talking about programming!

</comment><comment><USER36> For me, the biggest difference between Ruby and Python is that Ruby is more perlish (i.e. more hacker, one liners, clever stuff) while Python is cleaner but a bit more verbose and less clever. So in that sens, when I want to hack something, I usually go with Ruby.. but for a big project, I'd prefer Python.

(But these days, I'm mostly hacking with Arc :p)

</comment><comment><USER37> Why was a seven year old post resurrected for discussion here? Does anyone still believe that Ruby, even with its unbridled dynamicity, is just for tinkerers and won't work for large teams or production quality applications?

</comment><comment><USER38> Very interesting to read. And it raised the question in my head about immutable types. I like functional languages a lot and I like it if just everything is immutable. Also, I like C++ where I just have everything mutable. But to have both immutable types and mutables types in one language always felt very inconsistent to me. Are there good reasons for this?

I put this question also on Stackoverflow: [http://stackoverflow.com/questions/3584945/non-technical- ben...](http://stackoverflow.com/questions/3584945/non-technical-benefits-of- having-string-type-immutable)

</comment><comment><USER39> I just get a login screen.

\+ Newspapers require me to register and login - I go somewhere else.

\+ Commercial sites require me to register and login - I go somewhere else.

\+ Google requires me to register and login, guess what happens.

I can't be bothered. I've got stuff to write, products to ship, and a life to live. It's just another article. I've saved time by not reading it, and the chances it was useful are small. Besides, skimming the comments has given me enough of the flavor that I don't really think I'm missing much that I didn't get from the comments themselves.

Score another one for the HN community. Thank you.

<comment><USER40> This seems to be a bug in Google Groups -- if you have an expired session, it forces you to log in. But you were never signed in (or if you signed out) it doesn't ask and goes straight to the article.

</comment></comment><comment><USER41> That's an easy one... In Ruby, I can do string.reverse(). Python makes me type string[::-1] to reverse a string. In a nutshell, that is why Ruby is better than Python.

I must admit that I use Python more than Ruby. I like both, but know Python better. I feel Ruby is more consistent though. Either is a good language!

<comment><USER42> You can actually say `reversed(iterable)`, which returns another iterable yielding everything backwards. Now, this is not returning a string, which leads to some warts:

* list(reversed(a_list)) * "".join(reversed(a_str))

and the like.

</comment></comment><comment><USER5> One thing that bothered me in Python is lambda expression being limited to one line (as far as I know). Procs/lambdas in ruby can be very complex which often need.

But if I wrong about this, please let me know.

</comment><comment><USER43> "Other syntax differences such as '@foo' versus 'self.foo', or the higher significance of case in Ruby vs Python"

...suddenly wonders if there's a language where both case and indentation are significant.

<comment><USER44> I think he was talking about the "case" control structure. Or maybe I should just go to sleep... In any case, "case" returns a value, doesn't need breaks and doesn't need to be the same type. That's awesome.

<comment><USER45> Given that the switch-case construct doesn't exist _at all_ in Python, I'm pretty sure he was talking about character case.

</comment></comment></comment><comment><USER46> Surprised nobody has mentioned this: Python's generator expressions and list comprehensions are delicious. I'm primarily a Ruby guy, but I think Python could teach us a thing or two. :)

</comment><comment><USER47> make sure to use the zoom button on that... (not only the page itself but the differences too)

<comment><USER48> Try Readability (<http://lab.arc90.com/experiments/readability>) - it will fix the monospace and excess whitepace (as well as the size) in a single click.

</comment></comment><comment><USER49> Fun comparison of Ruby and Python. The pasta analogy was especially entertaining.

</comment><comment><USER50> One good reason: programming style (AKA personal preference). Python is a fine language. Ruby works better for me -- but that's just me.

</comment><comment><USER33> This is one of those articles where any discussion thread about it will lead to the sharp knives coming out between the Pythonistas and the Rubyists. The languages are so close in so many ways, and yet so different, that it is bound to happen.</comment>