Who Says Tcl Rules? - <AUTHOR> https://wiki.tcl-lang.org/page/Who+says+Tcl+rules...?V=56 <comment><USER2> A few years ago I installed XCode on my Mac, started learning it (looked 1000x more complicated than my previous IDE.."Hello world" auto-creates dozens of files and folders..) and read hundreds of pages of docs, started learning Objective-C, to try to draw pixels on the screen. Found out that was impossible! Ok, so basic graphics. Shapes.. I never bothered doing much at all. Too much hassle.

Discovered Tcl/Tk a lil while later. They were already on my Mac. With a half- dozen-line program in 1 minute I'd made a window on my screen with text. Graphics not much harder. I couldn't believe I'd gone through all that! haha. Had no idea GUIs could be so simple to write on a Mac. Noone told me. I wrote a couple of games in a few days. Tcl is a kinda weird language, unique, but very easy to get the hang of and be very productive in, a joy. I loved it.

<comment><USER3> This is all true. Tk is a great way to make a GUI on Mac or Windows. Linux, not so much, as it's so ugly and outdated that it's basically unusable. Maybe things have changed in recent years, but a 1995-style GUI just doesn't cut it.

<comment><USER4> The tk framework has had some improvements in 8.5 when ttk was added that modernize the framework. You can make really attractive Windows now with ttk on Linux now that wasn't possible before.

<comment><USER5> Exactly, Tk looks good on all platforms at latest since 8.5 and the new engine. The relevant tutorial:

[https://tkdocs.com/tutorial/intro.html](https://tkdocs.com/tutorial/intro.html)

Which exists since 2008.

Here's the minimal example for Tcl, Perl, Python and Ruby (note -- Tk doesn't have to be used only in Tcl!) with the pictures of the native looking interfaces on Mac OS X, Windows and Linux (all three):

[https://tkdocs.com/tutorial/firstexample.html](https://tkdocs.com/tutorial/firstexample.html)

</comment></comment></comment></comment><comment><USER6> TCL was/is a wonderful glue language and by that I mean it is great for connecting diverse things together. Company I worked at in the late 90's, used to to control a few hundred modems hanging some RS/6000's taking customer terminal orders. This was all handled by TCL and even had a lovely X11 control interface thanks to TK. These then got sent upto the mainfrom for processing. Was also used to provide an assured file transfer to an AS/400 over FTP. At the time you had shell, peal, or was looking at C and the likes of java still being defined and in need of optimisation (saw some nice stuff in java, but would need 10x resources to run compared to alternatives, moore's law helped that within a few years afterwards).

But it was robust and great at interacting with whatever you wanted and enabling you to do it in a controlled way.

It reminds me how it is perceived in much the same way AWK was and still is, it's a hidden gem that many never bothered with but if you spend a bit of time to learn it, you start to think, why didn't I look into this more earlier.

Though python has in so many ways, usurped it and indeed AWK for their niche uses, they still have their places.

[EDIT X11, not Z11 typo]

<comment><USER7> > Though python has in so many ways, usurped it

Funny you should mention that. Python's standard GUI system is still based on tk, and from a quick look at the docs you can even run a tcl script from inside Python.

[https://docs.python.org/3/library/tkinter.html](https://docs.python.org/3/library/tkinter.html)

</comment></comment><comment><USER8> Tcl cross-platform feature is astonishing. With Androwish [1] it steps even further.

I have a bunch of private tools for personal organization (time tracker, todo list, notepad-like app) that I've written in Tcl. Over the years, I used Android smartphones more and more and I just wanted all those small apps for Android too, but never had time to learn mobile development.

With Androwish I can just run them in my Android almost unmodified! And I can also make use of Android features like notifications. I sync the files between devices with Syncthing [2] or another tool and, voilà! I can use the same apps in both Android and Unix!

[1] [http://androwish.org/](http://androwish.org/)

[2] [https://syncthing.net/](https://syncthing.net/)

EDIT: syntax

<comment><AUTHOR> Some of us would love it if you would share your apps!

<comment><USER8> They started as quick-and-dirty apps because I didn't find anything that suited my needs so I decided to write my own. They are still quick-and-dirty (and ugly) but I intend to publish them next months after I clean the code up. Maybe I show them in "Show HN" :-)

I still need to discover how I overcome some Androwish limitations. Tk is great but the integration with the system (like copy-n-paste) is still something I need to discover how to deal with.

</comment></comment></comment><comment><USER9> The best hagiography of St. Tcl is by Yosef Kreinin: [https://yosefk.com/blog/i-cant-believe-im-praising- tcl.html](https://yosefk.com/blog/i-cant-believe-im-praising-tcl.html)

I wowed some students in my operations research class a couple of months ago by writing a few lines of code in the Python interpreter and popping up a window with a button in it with Tkinter. "You keep doing magic!"

<comment><USER10> I recall Philip Greenspun's (of the "tenth rule" fame) book about web development. In it, he explained how he was G$D with TCL and AOLServer while others around him were still arguing about how high to pile the Java towers of abstraction.

[http://philip.greenspun.com/panda/](http://philip.greenspun.com/panda/)

<comment><USER2> That link is to _Philip and Alex 's Guide to Web Publishing_. I'd looked at a _lot_ of pages on that site before a while ago, but didn't read that book, thinking maybe it's out of date and not worth reading. Boy I was wrong, it's gold.

Looking at it just now, I couldn't help thinking his style of illustrating with photos was an influence on your own books?! I guess so. (I've only read the 2 coffee-themed JS books, which I _really_ loved. Thank you! p.s. The most sophisticated JS program I wrote was "JavaScript REPL with allong.es" hehe.)

</comment></comment></comment><comment><USER11> I think it is a testament to just how far good design choices can outweigh the decision of which language. Two lifetimes ago, I worked at a company that sells testing software for CPE devices (consumer grade routers, et cetera). The entire core of that product is written in pure TCL - a fully tunable TCP stack with a knob for adjusting every metric, and a fully state driven architecture composed of TCL primitives that can emulate an entire ISP and a corporate LAN. There are so many languages that would be obvious better choices, but part of what allows a legacy of sledge hammered test cases to evolve is respecting the garden they are grown in - generally when you transplant a tree, you're going to kill it. Instead, a careful analysis of the existing implementation has allowed that product to continue, and grow, for many, many years.

<comment><USER12> > good design choices can outweigh the decision of which language

It sounds like you're saying the project succeeded by good design despite Tcl (fair - I don't know your project), but I'd argue Tcl itself _is_ a fine example of good design. With a small amount of study you'll be able to effectively reason about it. It's extremely regular, composable, and interfaces well be it text manipulation, networking, filesystems, GUIs, ..., or indeed, itself - it's well-established and takes compatibility seriously. I think I'm into it nigh 15 years, and it's still a proper first-goto tool for me.

<comment><USER13> It has evolved some. Initially, TCL used C strings, and there was no way at all to use any binary data with a null in it. No copying binary files, no non- trival sockets work, etc. And lists being runtime parsed strings of "{blah {blah}} {\\{blah}" remains slow and cumbersome. In the 90's, I switched to Perl to get past some of these things.

Don't get me wrong, I love it too, but it has warts just like any other language.

Ousterhout is clearly an outlier thinker though. Not just the father of TCL and TK but log structured filesystems, RAFT consensus, and more. I'd be excited if he jumped back into a new language project based on his reflective experience. I imagine a more pragmatic Perl 6 or similar.

<comment><USER12> You're right re: it's early internals, and we probably both know people who still (mistakenly) complain about that. _Conceptually_ the "everything is a string"(EIAS) model still holds though, even though it's supported by dual- ported "objects" w native representation, and the running is often byte- compiled instead of string parsing. We've got early smart fans who saw the vision and possibilities like Karl Lehenbauer, Don Libes, Richard Hipp, and the current core team like Kevin Kenny, Don Porter, Donal Fellows, etc who deeply understand What Tcl Is, and strictly maintain it, even while pushing it ahead (TclObj, finally an in-core blessed object system, native database framework, Miguel Sopher's(RIP) work on the stackless non-recursive engine (NRE) and coroutines that fell out of that work...

Back to Ousterhout though, you might dig his "Philosophy of Software Design"[0] book, or talks associated with it[1].

Lots to like in this space...

[0] [https://www.amazon.com/Philosophy-Software-Design-John- Ouste...](https://www.amazon.com/Philosophy-Software-Design-John- Ousterhout/dp/1732102201)

[1] [https://youtu.be/bmSAYlu0NcY](https://youtu.be/bmSAYlu0NcY)

<comment><USER13> Just bought the book. Thanks for replying with some valuable insights!

</comment></comment></comment></comment></comment><comment><USER14> I think it's interesting to look at Tcl's pedigree and compare it with Perl. Both definitely have a strong Unix heritage. Perl's initial use case was scripting where you went beyond both awk and the shell, and regarding syntax stuck to the former. The target audience certainly was supposed to know a bit about programming, but shouldn't

Tcl on the other hand is more shell-like in its core syntax, trying to simplify that. Not really because it's supposed to supplant shell scripts, but because it has a similar target audience, people looking to automate things (or customize them).

At least that's the beginning, and if it would've stayed that way, nobody would lament either language's passing, as they'd be good in their niche. To truly fall, one must rise first. Perl did that with early web programming (CGI), Tcl with UI programming.

I like both a lot. I've had a lot of fun programming with Tcl, and it was interesting how your workflow changes if a UI is really, really close to hand (sorry, TKinter doesn't come close to me, the only other language I'd nominate for that would be Rebol). Programming with BASIC I always asked for input, programming with Perl/Python I always pass command line parameters, with Tcl I often popped up small Windows.

<comment><USER15> There was a period in the early-Web days when Tcl looked like a serious contender to take the lead in Web programming too, thanks to its use as the main scripting language in the influential AOLServer (see [https://en.wikipedia.org/wiki/AOLserver](https://en.wikipedia.org/wiki/AOLserver)).

Of course that didn't end up happening, but it's interesting to think about what might have been different if it had.

<comment><USER12> It was also embedded in browsers[0]. It "could have been javascript".

Sort of a bitter-sweet scenario - I think some were excited that Tcl could have been out there more, in people's face, but others think Tcl dodged a bullet, as mass adoption would have laid a tough burden of backward compatibility and a bit of ossification that the core team is happy to not have mandated on them.

[0] [https://books.google.ca/books?id=GQIMAgAAQBAJ&pg=PA4&lpg=PA4...](https://books.google.ca/books?id=GQIMAgAAQBAJ&pg=PA4&lpg=PA4&dq=%22tcl%22+web+browser+ncsa&source=bl&ots=P7j7qSO1FQ&sig=ACfU3U0mC1wybigQnPqzpl_FOByVZecLEw&hl=en&sa=X&ved=2ahUKEwi_lrbWyarnAhVaHDQIHQmYDGEQ6AEwAHoECAQQAQ#v=onepage&q=%22tcl%22%20web%20browser%20ncsa&f=false)

</comment></comment></comment><comment><USER16> A longer love letter from antirez (Salvatore Sanfilippo) to TCL: [http://antirez.com/articoli/tclmisunderstood.html](http://antirez.com/articoli/tclmisunderstood.html)

</comment><comment><USER17> Tcl is very similar to LISP where the "list" is a delimiter-separated string instead of the car-cdr thing.

It's a clever language but it has the kind of sloppiness that Python has for better and for worse. In particular (in both languages) you can look up the stack and see and influence more than most people think you should.

I've come to appreciate the module system in Javascript which is static enough to allow tree shaking. You could not do that reliably for Tcl or Python -- you can't even do it in Java because almost all Java code does something with passing strings to the Classloader, even if it is just the standard library looking things up in resource files.

Many people who like Tcl have moved on to Lua for various reasons.

</comment><comment><USER18> Not to be mean about it or anything, but I really dislike TCL.

Granted, you could do much worse. Unlike shell scripts you at least have access to sensible data structures like lists, dictionaries, and so on. And unlike shell scripts or Makefiles, you can actually handle spaces in your data, so that's at least not horrible.

But when everything is a string, there is no type safety anywhere. So many things that should just be compile errors blow up on you at run-time instead. God help you if you're using code that other people are updating and silently changing.

The syntax is also pretty annoying at times. For instance, you can use unbalanced {} characters within comments, but not if those comments are within a proc. You can nicely write long lists over many lines with {...}, but you can't put comments in those.

Anyway, haters gonna hate. I hope other folks like it more than I do.

<comment><USER19> Lack of strong-typing isn't something specific to TCL or rare at all. Python and JavaScript are weakly typed too.

<comment><USER20> but not everything is a string in Python and JavaScript.

It's possible your parent didn't mean literally "strong typing" or even "static typing", but instead more generally "notions of types, whether at runtime or before".

<comment><USER18> Yes exactly. TCL is somehow even more weakly typed than conventional dynamically typed languages. For instance, in Python, len(3) is an error, but in TCL, llength 3 is 1.

</comment></comment></comment></comment><comment><USER21> No-one yet mentioned expect [0][1], which is the most amazing, general-purpose automation tool I've ever used.

IMHO it's creator Don Libes [2] is an original-thinker/innovator in the same league as Ousterhout.

[0] [https://en.wikipedia.org/wiki/Expect](https://en.wikipedia.org/wiki/Expect)?

[1] [https://www.tcl.tk/man/expect5.31/expect.1.html](https://www.tcl.tk/man/expect5.31/expect.1.html)?

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

</comment><comment><USER22> I still don't know of a faster way to go from zero to functional GUI than to use Tcl/Tk. Not Visual Basic (too much rat wrestling). Certainly not JavaScript with a browser, which requires either authoring considerable HTML alongside your code, using a heavyweight framework, or both (React!). With Tcl/Tk you just write a few lines to throw some controls up and wire them to send appropriate commands to your back end. It's amazing.

<comment><USER23> Rebol's View DSL has similar power to TCL/Tk. You can write all sorts of apps in only a few lines of code.

<comment><USER24> View is not a DSL, it's a graphical engine (based on Anti-Grain Geometry in case of Rebol and native in case of Red). What you are talking about is a combination of View and VID (Visual Interface Dialect).

<comment><USER23> Sorry you're right and thanks for correcting my error.

I guess I was just trying to say Rebol/Red have something similar to TCL/Tk in that you can trivially build powerful GUIs.

</comment></comment></comment></comment><comment><USER25> TCL have an interesting feature where user defined functions (or commands as it's called) can return TCL_RETURN, TCL_BREAK, or TCL_CONTINUE (in addition to TCL_OK and TCL_ERROR as you would expect) which directly affects control flow in the calling functions.

<comment><USER26> That's some crazy shit right there, thanks for telling us about it!

For those interested, here's a link that discusses it: [https://www.tcl.tk/man/tcl8.6/TclCmd/return.htm](https://www.tcl.tk/man/tcl8.6/TclCmd/return.htm)

</comment></comment><comment><USER27> One system I work with exposes a CLI. The whole system is written in C, and the CLI is basically just a frontend for a bunch of commands that take in [int argc, char __argv]. It is, to misquote Greenspun 's tenth, an ad-hoc, informally-specified, bug-ridden, slow implementation of a proper REPL.

My secret wish is to replace it with an embedded TCL REPL. TCL isn't perfect, but it's pretty easy to interface with C, and it fits on small targets. My main problem (aside from lack of time) is that I'd actually need a tiny version that would fit within dozens of kilobytes of code. Closest I've found is Jim [1], which is 100-200kB (depending on features). Compare that with Lua, which fits under 100kB (though excluding its standard library).

[1] [http://jim.tcl.tk/index.html/doc/www/www/index.html](http://jim.tcl.tk/index.html/doc/www/www/index.html)

<comment><USER28> I might have some time this summer, feel free to contact and explain ;)

<comment><USER27> I wish I could, but it's all for stupid-secret projects :(

</comment></comment></comment><comment><USER2> "The programmer is free to reinvent the language, write new control structures, and so on."

I don't remember that about Tcl.. How far can you do that? And how do you do that? (an example would be great). Thanks.

I've been getting into Forth lately, where you can redefine absolutely everything[0], and make your own anything, to a ridiculous degree. Not sure what this quote means. I'll be pleasantly surprised if it's true.

[0] Well, you are stuck with the stack(s) I guess. But that's about it.

edit: Thank you all for the great answers!

<comment><USER29> Here's a starting point: [https://wiki.tcl- lang.org/page/New+Control+Structures](https://wiki.tcl- lang.org/page/New+Control+Structures)

<comment><AUTHOR> tl;dr Tcl has an "uplevel" command that lets you execute code in the variable scope level of the procedure that called it. The classic example is a "do" loop, which Tcl doesn't include out of the box:

      proc do {body condition} {
        while 1 {
            uplevel $body
            if {![uplevel [list expr $condition]]} break
        }
      }

      set i 10
      do {puts $i ; incr i -1} {$i > 0}

output:

      10
      9
      8
      7
      6
      5
      4
      3
      2
      1

</comment></comment></comment><comment> ainar-g I wrote one of my term papers in Tcl/Tk back in the days. It was a version of the Towers of Hanoi, IIRC. Still the best desktop UI programming experience of my life (although arguably I haven't had a lot since then). Tcl is a very _nice_ language for small scripts. Kind of like a LISP for mere mortals.

By the way, does anybody know if anyone ever attempted to add a kind of static typing to Tcl? It would be very interesting to see how a stringly-typed language would go about that.

</comment><comment><USER30> So someone cited my HN comment[1] about Tcl from yesterday on this page. That's fine. I recall one issue I had with Tcl was lack of support for monotonic clocks (on Linux anyhow.) So a sleep might take a long time to expire if the system time changed to the past. I wonder if that ever got addressed.

[1] [https://news.ycombinator.com/reply?id=22174228](https://news.ycombinator.com/reply?id=22174228)

<comment><USER31> TIP 302 has been open to fix this in Tcl 8.7+, and there is atleast one implementation of the fix.

I looked at addressing TIP 302, but it was complicated since Tcl virtualizes the clock (like it does the filesystem).

</comment></comment><comment><USER32> Aha Tcl/Tk makes writing desktop apps fun! In my system admin days I used it for little UI's to interface with my bash scripts. Running scripts or little visualization tools on remote servers with X forwarding was pretty nifty too!

</comment><comment><USER33> My first experience of Tcl/Tk was circa 2000. The finance house I worked at had used it to implement a real-time order management system.

Even better was the ability to attach to the running ui or server (yes we had both), replace some of the code on-the-fly, and disconnect. Perhaps not so amazing these days, but it was way ahead of anything else I'd seen upto that point and pretty mind-bending for a C/C++ coder.

</comment><comment><USER34> Those first quotes are attributed to "deepchip.com", but that's just the archive of the E-mail Synopsys Users Group (ESNUG). For many years it was the main watering hole for talking about EDA ("electronic design automation" -> hardware design) software. Synopsys was only one of three big EDA companies, but because there were so many tools in the chain, and they were (sometimes) interoperable, all the different products from the different vendors would get discussed, sometimes mercilessly.

Someone who wanted to play folk historian could probably have a lot of fun going through the archive, assuming their eyes wouldn't glaze over at terms like "cycle accuracy" or "serial loopback".

</comment><comment><USER35> The only thing stopping me from using Tcl/Tk for literally every desktop application I write is the lack of a good web view (which is unfortunately a hard requirement for a lot of projects nowadays). If I can find (or develop) a WebKit or WebEngine or Gecko or Servo or whatever widget for Tk that actually works reasonably well, then I'd drop Python and Qt5 for that niche in a heartbeat.

<comment><USER36> Take a look at [http://www.androwish.org/index.html/wiki?name=jsmpeg+SDL+Vid...](http://www.androwish.org/index.html/wiki?name=jsmpeg+SDL+Video+Driver) for an experimental approach to displaying Tcl/Tk applications in a web browser.

</comment></comment><comment><USER37> I code perl and I code TCL. I like both.

Perl has the magic and TCL has the voodoo. Add both together you get voodoo magic which is quite fascinating.

<comment><USER38> The thing I like the most about Tcl is Tk and Tk works nicely with Perl.

I've used Tcl in various cases in which I needed to provide the client with and executable. Freewrap gives you a reasonably sized executable (it's a lot better than having your end-user install Java or even Perl).

<comment><USER39> Note also that while Perl's Tk.pm is based on an ancient fork of Tk, if you use Tcl.pm + Tkx.pm then perl embeds your "real" Tcl/Tk and talks to that so you get properly modern functionality.

This is how the tkdocs.com examples in Perl maintain parity.

</comment></comment></comment><comment><USER20> If I understood correctly, Tcl's metaprogramming capabilities are based on manipulating strings and not a syntax tree (e.g. lisp). Is that a key component of making it usable by "mere mortals"?

I think ideally I'd like both capabilities, which seems possible if you just expose the language's parser as a function.

<comment><USER40> The other comment mentions it in passing, but the ability to uplevel (operate within the scope of your caller instead of your own) means the difference between statements and function calls is blurred.

That, along with the ability to pass code block literals, lets you redefine the language into your own DSL with new control flow statements. You can define a "while loop" function, for example.

Before heavy use of closures and callbacks in dynamic languages (Array.forEach, for example) became the thing this was pretty huge, and it's still nicer syntax sugar than you get defining control structures with that route.

I used TCL with Squish for Qt-based UI test automation for a couple of years. For stuff like that where you really do want a set of domain-specific imperatives you can string together, it was really cool to work with. Biggest downside was you could get too fancy and find yourself alone off in the weeds of your own DSL.

</comment></comment><comment><USER41> My immediate answer to this question is/was, "The Samba team!". Messing around with Samba 3 beta and OpenLDAP back in the day was the reason I bought and read "Sams Teach Yourself TCL/Tk". I really enjoyed how easy it was to get results. All of my GUI programming until that point had been Borland Delphi and Visual Basic. So this felt so fresh and close to the metal. (No dragging and dropping and having 300 lines of code being generated behind the scenes) I have no idea when or why I stopped playing with it.

</comment><comment><USER42> I used Tcl today as part of some Xilinx fpga work. Interesting to learn there is such an ecosystem/community for tcl. I'll look into adding TK functionality to my Xilinx tools.

</comment><comment><USER43> Working in a betting company. The most important applications are still written in TcL.

I think it's a lovely language. If it had a debugger it'd be awesome.

<comment><AUTHOR> [https://github.com/flightaware/TclProDebug](https://github.com/flightaware/TclProDebug)

<comment><USER43> Thanks! I'll definitely check it out.

</comment></comment></comment><comment><USER44> I enjoyed using it back in the .com days for our own AOL Server like app server, at the startup I was working on.

Nowadays not sure if it still has viable market.

<comment><USER45> About 20 years or so ago, I was hired at a large online travel site to assist in porting the entire codebase from a mix of TCL and C++ to (then new, popular, exciting) Java. I had a strong background in both C++ and Java at the time but had never even heard of TCL. When I first started looking at some of the code, I could see why it was a natural choice for building websites: the TCL syntax seemed to just flowed naturally into HTML. When I, as the "new Java guy" inevitably got blamed for the shortcomings of Java against the old TCL codebase, I was hard-pressed to defend JSP against it. I never really worked with TCL much, but even 10 years later, long after the migration was complete, the old hands still missed it.

<comment><USER29> It was a perfect language for the web in a lot of ways. With some other guys, I made an Apache module that let you do PHP type scripts, back in the day: [https://tcl.apache.org/rivet/](https://tcl.apache.org/rivet/)

For a while, I know that [https://flightaware.com/](https://flightaware.com/) used it fairly heavily. Indeed, their careers page still shows an interest in Tcl skills.

<comment><USER46> Famously Ars Digita, founded by Philip Greenspun, started out using AOLserver and Tcl to design websites. The company wrote what I suppose would now be called a "middleware stack".

After he sold the company to Red Hat I worked there really briefly. Apparently half the sales fell through because Tcl wasn't regarded as "enterprisey" enough for customers (note the customers themselves would probably never write a line of code). There was an attempt to rewrite the entire engine in Java — it being 2002 — which limped along for a while before the project died.

But there's more! The original Tcl stack was open sourced and continues to this day as OpenACS ([https://openacs.org/](https://openacs.org/)).

The Java rewrite also still exists ([https://svnlegacy.ow2.org/byline/](https://svnlegacy.ow2.org/byline/)) but has been dead 15+ years, and just digging into those 7 level deep directories rekindles a feeling of dread in me.

<comment><USER47> I learned web development using openacs around 2005. I got alot of value out of the experience.

ad_proc and online documentation was awesome.

I also had to figure many things out from first principles because documentation was all for PHP and Apache, not aolserver and tcl.

</comment></comment></comment></comment></comment><comment><USER23> I bought Ashok Nadkarni's TCL book recently and TCL has a lot going on in a very small amount of code. It is seriously underrated!

</comment><comment><USER48> My favorite piece of TCL/Tk code is the official gitk git UI that comes with git and works on Linux and Windows; it's the single file here: [https://github.com/git/git/blob/master/gitk- git/gitk](https://github.com/git/git/blob/master/gitk-git/gitk)

</comment><comment><USER49> It's amusing to see Mike Doyle, founder of noted patent troll Eolas[0] being cited on this page.

[0] [https://en.m.wikipedia.org/wiki/Eolas](https://en.m.wikipedia.org/wiki/Eolas)

</comment><comment><USER50> uplevel and upvar..

Kinda strange how scope is restricted to the current level.

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

</comment><comment><USER51> If they exist, you are guaranteed to find them on HN.

</comment><comment><USER52> I do!

TCL is perhaps my favorite scripting language of all time.

</comment><comment> munk-a This is beside the main point, but my eyes bugged out a bit seeing block-quote style divs (or maybe code style) used to capture the author information but not the quote itself - I suppose someone dumped this into the website from a text file and didn't adjust it for markdown, but it is really bugging me.

</comment><comment><USER53> I love the Tcl language (it's fun). I love the Tcl community as well.

</comment><comment><USER54> any good tcl recipe book ? I'm curious on what non trivia tcl code should be organized

<comment><USER55> \- TCL TK 8.5 Programming Cookbook

\- TCL 8.5 Network Programming

Yes, we are in 8.6, but except OOP almost nothing changed.

<comment><USER54> Thanks a ton

</comment></comment></comment><comment><USER56> Tcl is single handedly responsible for billions of dollars of damage in the EDA industry

<comment><USER20> I wonder if you mean Tcl is bad, or that the damage is caused by Tcl being powerful and obviating the need for version upgrades of special-purpose software. Or something else.

<comment><USER57> Tcl itself isn't really the problem. EDA tooling is generally a dumpster fire (queue horror stories about checking bitstream files into VCS because there's no guarantee the compiler will ever spit the same one out again, even if nothing changed), and Tcl is used to make patchwork fixes to glaring tooling issues.

This is all fine and good, but when a vendor can no longer change or fix tooling without running the risk of breaking a large customer's Tcl abomination, the flexibility that it provided is now a problem that's dragging everybody down with it. All of this goes without mentioning that electrical engineers that often get saddled with this aren't very good programmers.

People are excited about SymbiFlow for a reason. The hype in spite of how unlikely it is that it will ever match vendor tooling is a testament to the situation.

<comment><USER58> The simple fact is that the vast majority of the people writing programs aren't very good programmers, even if they've been trained to be. We need more languages like Tcl and Lua that are quick and easy for beginners to pick up and become productive with. Add easy interfaces to AWS services for back-end programming, and a Tk-like interface that dumps out JS code for web app front- end programming, and you'd have a real winner...

<comment><AUTHOR> I'll quote another comment on this discussion:

Take a look at [http://www.androwish.org/index.html/wiki?name=jsmpeg+SDL+Vid...](http://www.androwish.org/index.html/wiki?name=jsmpeg+SDL+Video+Driver) for an experimental approach to displaying Tcl/Tk applications in a web browser.</comment></comment></comment></comment></comment>


NASA looking for new astronauts - <AUTHOR> http://latimesblogs.latimes.com/nationnow/2011/10/nasa-looking-for-astronaut-students-do-you-have-the-right-stuff.html

<comment><USER2> I wonder if I have a better chance of being an astronaut or getting accepted into YC W2011.

"The only guarantee I can give you is that, if you don't apply, you won't get in," he said.

<comment><USER3> Sadly there are only a handful of folks who get to be astronauts in each generation -- so your odds are much better for YC since they pick a new batch every year.</comment></comment>


The Startup Illusion - <AUTHOR> http://techcrunch.com/2015/06/20/the-startup-illusion/?ncid=rss

<comment><USER2> "Entrepreneurs are choosing to embrace the lie of probable success whilst ignoring the daunting statistics that contradict such thinking, such as the fact that 80 percent of startups fail within 18 months"

I think this happens this often because businesses are built around a cool idea, instead of a business model.

I now have 2 successful businesses built around a business model instead of an idea. I first figured out how to make money and then created the platform to do it.

I used to go to startup competitions in my area and the winners were always ideas that will never make money..like a Twitter clone that allows 300 characters. All failed within 6 months.

The other problem is that people don't realize it's not all about going to cool events and being a rock star. The majority of work done on a business is boring.

If you can't trudge through all of the boring work to get to the 1% that's cool, you won't make it.</comment>


Nirsoft Control My Monitor - <AUTHOR> https://www.nirsoft.net/utils/control_my_monitor.html <comment><AUTHOR> Submitted since this solves my, and thus perhaps others needs to control their monitors.

GUI and CLI application to get/set various properties of your attached monitors. For windows. Works over the Display Data Channel (eg over HDMI).

In my case, I couldn't (from Windows display settings) lower the display brightness of my external monitor, leading to eye strain when the room is not well lit enough. This enables my to reduce the display brightness with ease.

There is an alternative, which can only change brightness but does so with a minimalistic gui: [https://github.com/emoacht/Monitorian](https://github.com/emoacht/Monitorian) (have not tried it).

If not for ergonomics, you can use it to visually be notified when eg a script is finished, by toggling brightness back and forth.

An alternative to _that_ is to use the snoretoast application with something like this:

        alias wakeme='date && /cygdrive/c/Dropbox/tools/notifications-w10/snoretoast/snoretoast.exe -t "hello" -m "wake up goddamit" -p "C:\Dropbox\tools\notifications-w10\mindblown.png" -s "ms-winsoundevent:Notification.Reminder"'

thus, you can "longscript.sh ; wakeme". From [https://github.com/KDE/snoretoast](https://github.com/KDE/snoretoast)</comment>


Working at Microsoft – Day to Day Coding - <AUTHOR> http://foredecker.wordpress.com/2011/02/27/working-at-microsoft-day-to-day-coding/ <comment><USER3> Reading this almost makes me want to cry.

It's still all to common these days to find developers with 4 year old machines, comprised of scavanged parts (from people leaving) running Windows XP.

A level of bureaucracy forcing you to maintain 3 tickets (at least) in 3 different systems to make even a typo fix in a production system with 3 day minimum turn around time.

Servers with less RAM and resources then your 4 year old desktop. Laptops? Too expensive so just use this 8 year old IBM one when we need after hours support. Source control? Use TFS which is the most god awful ticket manager/source control system the world has ever seen.

Private office? No, shared space, with people having loud meetings behind the developers at all hours of the work day. Corperate firewall blocking things like stackoverflow. A view from the office? No, other people can have that, you look at a concrete wall.

I guess the moral of this is work for a company that values developers. Keep that in mind while looking for a job if you are one.

<comment><USER4> And for me, it hilighted some of what I've suspected for a while is wrong with Windows development.

I own a small company that handles a lot of end-users' various issues. Although I spend most of my time now coding, I spent more than my fair share of time working one-on-one with individuals and companies that were having problems with their systems. I still spend around 10 hours a week doing it.

My primary development machine is an aging laptop that can't even play YouTube videos any more without stuttering. I hate almost every minute of using it. It's slow, and limited, and it hangs.

So when I write something, I write it to work well on that laptop, because I know there are lots -- _lots_ \-- of people out there with similar old hardware, and to say they're frustrated with computers is an understatement.

How could a Windows developer possibly understand just how frustrating their product is when they spend all of their time using the most powerful hardware available?

How could they possibly understand that Windows file sharing in a mixed environment running SBS 2008 is still complete and miserable and utter garbage, when they're running on a network that hides those kinds of issues?

Their development process is _great_ for their developers. No argument there, and I'm totally and unabashedly envious.

It's also terrible and completely wrong for most of their many users.

<comment><USER5> I don't think that's actually the problem. Windows (and many other MS groups) have quite excellent performance and integration testing. They generally do a good job of keeping performance under control. I think the biggest problem is how they approach performance as a test signoff criteria, usually, rather than as a budgeted line-item with goals for improvement.

As to situations like what you describe with file sharing in a certain environment that mostly comes down to insufficient beta testing and straight up prioritization/de-prioritization of certain issues.

<comment><USER6> Treating performance as a minimum bar that has to be met rather than a goal in and of itself sounds exactly like the kind of development process that would produce Windows -- which always feels sluggish if you're using anything other than the latest hardware.

I don't think Microsoft realizes how enormously performance contributes to user dissatisfaction with their OS.

As a web developer, I know that adding just a second to a page load massively diminishes perceived usefulness of a system; Google spends enormous amounts shaving tens of milliseconds off their page displays.

At the level of an operating system, that kind of user sensitivity to performance must be at least the same if not magnified. It seems like performance, especially on older hardware, should be far more of a priority for Microsoft than it apparently is.

<comment><USER7> Consider that you can go to Bestbuy (or your local computer retailer or choice) and buy a $500 laptop capable of running Windows 7. A Mac is 2 to 5 times that. (Highest price PC at Bestbuy $1200, highest priced Mac ~$2200) (Macbook is $1000, pc is $300-$500).

I installed Windows 7 on 2 laptops of family members. These laptops were $300 from Walmart. Windows 7 runs just fine.

I installed Windows 7 on an Asus EEE pc. Runs about as well as Windows XP (only computer where I can tell it runs a littler slower).

Considering a ~$800 ipad that isn't a full computer...

I fail to grasp what kind of performance you expect to get out of Windows 7, while at the same time having a full featured OS at the same time running on _affordable_ hardware.

<comment><USER8> I can run a fully featured Linux system on a 800mhz laptop with 1gb of ram.

</comment></comment></comment></comment></comment></comment><comment><USER9> An assumption? We've been told pretty directly how complicated the process is (often with pride).

See the 14 steps which turn a 5 minute code change into a multi-man-month- mammoth: [http://blogs.msdn.com/b/ericlippert/archive/2003/10/28/53298...](http://blogs.msdn.com/b/ericlippert/archive/2003/10/28/53298.aspx)

Or the now infamous Windows Shutdown "crapfest": [http://moishelettvin.blogspot.com/2006/11/windows- shutdown-c...](http://moishelettvin.blogspot.com/2006/11/windows-shutdown- crapfest.html)

There's more. And I have no problem with the author stating how great coding is (because he has an office and a nice computer!). However, while your right hand is telling us how great it is and we shouldn't _assume_ otherwise, your left hand is telling us how horrible it is.

<comment><USER10> This blog post is mainly about the tools developers use day-to-day while they're in coding mode. Tools and development processes do tend to be well thought out and efficient at MS.

That's not really related to the organizational dynamics that come into play for planning products and features. That tends to be complicated, involving a lot of people, meetings, and debate. (I'm not defending it, just saying that's how it is.) That 14 steps isn't about a code change; it's about the end-to-end design, implementation, and shipping of a feature, expressed in the most detailed, far-reaching way possible, to make a point about how things operate in a huge organization.

Both points of view are accurate, IMHO. When you're strictly coding, things are pretty efficient. Not too surprisingly, those were the times I enjoyed the most. But it's equally true that at MS, coding is only a small piece of a larger, somewhat slow-moving process. And sure, all that other overhead can get tedious, even exasperating at times. It's just a separate subject from what the OP is writing about here. The _coding_ part is typically quite fun and autonomous.

<comment><USER9> I don't mean to drag this out, since I largely agree with what you are saying, and it's true that the OP seems to focus on that.

However, his intro blurb specifically says that we are wrong in assuming that writing software is a "soul-crushing bureaucratic exercise." Which, as you point out, the post never really says anything more about.

<comment><USER11> Remember, the intro blurb is discussion all the articles he intends to write on the subject. Together, they intend to _show_ you how the intro is true. As it stands, he has two articles on the topic. Most people are only reading the one (the one which is linked). Even in that, the introduction is a common introduction for all the pieces (the two so far, so I imagine the others as well). That the original article focuses on coding doesn't mean he's ignoring other areas. Rather, that other areas simply haven't been written about.

</comment></comment></comment></comment><comment><USER12> I've never read a post by Richard before, I don't want to seem like I'm giving him a hard time, and I'm a happy Windows user, so I'm a big fan of his work.

But this article isn't inspiring from a developer perspective. I've worked in a big IT department (300 people I think),as well as start-ups, so I'm not completely blind to the structures of different work environments.

When Richard first mentioned that everybody has an office, and that he was allowed to paint his, I thought about how uninspiring that is. Same with describing his hardware. Maybe it's just me, maybe it's Richard, but this article did very little to inspire me to go work for Microsoft.

I was hoping for some insight into code planning, the specific challenges faced by building the most popular (at least the most heavily used) desktop consumer operating system.

Richard makes it all sound very routine.

<comment><USER5> Microsoft treats developers very well. From offices, to hardware, to free gym memberships and health care coverage, to the idea that you're generally not expected to work more than 40 hours a week, it's all great. But that can't and doesn't replace the need for healthy corporate culture and good, intelligent, pragmatic leadership, a lot of which has increasingly been lacking at MS. You'll have a quad core desktop with 8 gigs of RAM, but that hardly helps you play the game of office politics that is often required to get bonuses or promotions (when the company bothers to provide them). It also doesn't help a corporate culture that is becoming increasingly bureaucratic and process oriented rather than results oriented.

A lot of talent is and has been evaporating up and out of Microsoft for just these reasons.

<comment><USER13> In the office I work out of only managers have private offices. There are also a few small offices with 2-4 people, but most work in groups of 6-10.

<comment><USER14> Dude... That is still better than work environment I had to endure - <USER2> developers in a single open area. If that weren't enough - someone decided to sit support for an entire team in the middle of this space, rationale being "that they would like to be close".

6-10 people in a room as long as they are developers is still awesome and productive environment.

Edit: I don't work for Microsoft - but wouldn't mind to :)

</comment></comment></comment></comment><comment><USER15> The thing here is not about if Microsoft let their developers use all the new shiny technology but the point to stress here is how much percentage everyday does a developer at MS actually codes, I bet it wont be more than 20%.

I am so sure of this because being at Amazon since April last year, I havent coded more then 700 lines of code, bulk of which was supporting new features in the already behemoth software.

I always wanted to work for a big company and I was super happy when I finally got a job offer but lately I have realized that the biggest downside of working for a big company is that you dont code, you just add features in to all the in use product, attend meeting and specific for Amazon, be on the pager 24X7.

For all you guys coming fresh out of colleges, head to bay area and join a start up, ditch these big companies.

<comment><USER16> That bad at Amazon? I've been at Google for a little over 2 years and have written about 160,000 lines of code for them. (And deleted about 30,000.)

Seems like a lot more than I expected, but just looking through my recent commit history, I wrote 830 lines of code just _last week_ on my _20% project alone_ , so 1600 lines/week doesn't seem that unreasonable. And here I've been complaining about how I never have time to get any work done...

<comment><USER17> I just had my two year anniversary at Amazon. I've written many more than 700 lines but I bet less than 160K. And yes, deleting code is the best.

I don't know the GP but their post is believable. Some parts of Amazon are mired in cross-team dependencies. Worse, to get anything done in those situations, hacks have been piled on top of hacks for tragic years. The right solution may be waiting in the wings but all the dominoes have to fall first.

There is a lot of variety at Amazon. There are high-pressure, high-reward teams like Kindle. There is cutting edge stuff at AWS and elsewhere.

My team is a leaf far out on the dependency tree. Approximately, we have only end users. It's a great situation, even with a pager (shared between five people, so one week or less a month). Our pager, on the average, does not go off. We get to ship software every week and we're profitable.

</comment></comment></comment><comment><USER18> I asked this in the comments section but it disappeared into thin air with no notification on what was happening(say, held for moderation etc).So I'll ask it here. Maybe an HN reader who works for MS might know the answer.

From the article,

"All managers have laptops. Most prety good ones."

Do _developers_ (testers etc) have laptops (pretty good ones)? Or are they "management only" perks? (fwiw all the bodyshopping companies in India follow the "only suits have laptops" pattern)

<comment><USER19> Laptops are officially only for managers and Program managers. As a dev/test you can get a loaner for a presentation or find one, somehow.

<comment><USER18> "Laptops are officially only for managers and Program managers."

Heh! That's what I thought :-p Not surprised to hear MS works that way :-). Funny way to economise, making laptops status symbols. I think Google gives devs nice laptops and is probably better off for it.

<comment><USER16> The number of hours of work-from-home that Google gets out of those laptops more than justifies their cost. Hell, I'm posting this from my work laptop, taking a break from writing out a whole bunch of use cases and product design decisions.

<comment><USER20> What do you do over at Google?

<comment><USER16> Very broadly, Search Features. I worked on the visual redesign that launched last May, and before that some of the search tools (particularly Wonder Wheel and Related Searches) and a bit on the move from having separate search properties (books.google.com, blogs.google.com, video.google.com, etc.) to a single search app. Then I spent about 6 months doing some infrastructure stuff with the webserver, and I'm now doing some feature work that's in the early stages of the project.

<comment><USER20> Cool. What tools do you use for daily design? I've been slowly moving from Photoshop to CSS, and want to start using stuff like Antetype early in the process. I've also figured out that Photoshop is good for finalizing a design that's been moved around, tested and iterated upon.

</comment></comment></comment></comment></comment></comment></comment><comment><USER21> The "individual offices" aspect is interesting. Back in the 1980s and early 1990s, when Microsoft went from success to success and the corporate culture got really established, software engineering research showed that developers were more effective with individual offices and big monitors.

By 2005/2006, when I was looking at corporate culture at MS, things had changed: with the advent of pair programming and agile methods, many designers and developers are more effective in shared spaces -- and many prefer those environments. NOT cubicle farms, which are the worst of all world, and NOT large badly-designed open-spaces ... but there are plenty of other good options.

However, "individual offices" for devs is now such a status symbol for the teams that still have them, that people at the management level are very unwilling to change. One designer I know spent literally a year trying to get permission to get his 12-person team into an open space. In the end he gave up and eventually left the company.

<comment><USER22> >with the advent of pair programming and agile methods, many designers and developers are more effective in shared spaces

I'd be interested in seeing a source for this. I personally believe any creative endeavor is better performed in isolation.

<comment><USER23> The great thing about offices is that you can go sit in someone else's half the day if you need to collaborate on something.

</comment></comment></comment><comment><USER24> "Most people in Windows have a private office – with a door"

At my office we've made an effort to keep our workspace communal to the point of removing the 12" dividers that were included with our work tables. This, as you might guess, does result in some distraction but in fostering the relationships at the office people are more apt to _like_ being there.

I'm curious how other large companies and startups handle this.

[UPDATE] Its important to note that we let people work from home whenever they like. So, in the case where they really need to focus, they have the freedom to do so.

<comment><USER25> I've worked in both environments. Honestly, the best environment, IMO, is working from home -- office is second. Shared office spaces are a distant fourth.

I'm the type of person who needs a lot of solitude at some times, and at other times, I love to blast music, pace, juggle, and gorge on chips.

When I need the solitude, when I'm in the zone, I don't want you taking a call from your gf, or deciding with some other guys in the office where to eat lunch.

Likewise, I may need to spend 12 hours doing nothing that looks productive. Just kind of thinking as I listen to music and do something mindless like pay bills. I feel like at even the most liberal of open floor plan offices I've felt inhibited if I spent a day or two doing what _looks like_ screwing around. And don't get me started on pair programming.

<comment> X-Istence I guess I am lucky, I can spend some time looking like I am screwing around or doing mundane tasks so long as I get my work done on time.

<comment><USER26> This is the exact opposite to me. I spend my full day working, hit (or better) all deadlines, come in about 2 hours early and I still get grief from the big boss for leaving on-time!

</comment></comment></comment></comment><comment><USER27> I'm a bit confused by this post. The author seems to celebrate a private office. I strongly prefer open work spaces that you share with others, as do many companies I've worked with/seen. Care to share your opinion? I'm curious...

<comment><USER28> In my experience open spaces are preferred by those who are less competent and want to bother me all day with questions.

<comment><USER16> You never ask people questions when coding?

<comment><USER29> My favorite argument comes from <http://www.joelonsoftware.com/articles/fog0000000068.html> : "Mutt can't remember the name of the Unicode version of the strcpy function. He could look it up, which takes 30 seconds, or he could ask Jeff, which takes 15 seconds. Since he's sitting right next to Jeff, he asks Jeff. Jeff gets distracted and loses 15 minutes of productivity (to save Mutt 15 seconds)."

If a question isn't an emergency, I queue it up by sending email. If it is, I ask in person, fully realizing I'm fucking up their day and hoping that doing so really is in the best interest of the company. I also only check my email a couple of times per day and wear heavy closed headphones for coding, because those elusive moments of flow are about half of what I live for.

<comment><USER30> "fucking up their day"

This is interesting--I would never feel this strongly about being interrupted unless someone was being overtly rude or annoying. I want to be productive, but I don't feel obligated to plow forward relentlessly hour after hour. If someone breaks my flow to ask a reasonable question, I don't think of it as a big deal. I think true flow is a lot less fragile than many give it credit for. It doesn't vanish anytime a pin drops nearby.

I think there's something to be said for the benefits of a less serious and more relaxed mindset. Working steadily, but not getting all caught up in "how productive am I?" like you're an assembly line robot. Coding is as much an art as a job and often you can be more productive by playing ping pong and chatting for 6 hours then having an insight that saves you 100 hours in the long run because your mind makes a lateral leap about the architecture that almost definitely wouldn't have happened if you had just sat at your desk typing all day.

I still see the benefits of private offices because it can be very beneficial to have the option of silence and intense focus when that is what you need to get over a hump, but it also seems like a lot of programmers are missing the great potential rewards of real creative collaboration--probably because they are used to collaborating in an uptight business-guy kind of way. Instead, they should take a cue from other creative people like artists, poets, and musicians, and allow their minds be free a good portion time through relaxation, speaking freely, and _gasp_ having plenty of thoroughly unproductive fun. The gains in inspiration will easily outweigh the lack of perspiration, and life will become more enjoyable to boot. Isn't that ultimately the point of all this toil anyway?

<comment><USER31> For me it really depends on what the question is - if I was in the middle of coding and someone asked me a coding related question (especially about whatever we were working on) then that really wouldn't require a context switch.

However, if someone non-technical comes and asks me something (which usually requires a lot of parsing) then that will require a context switch and I will loose a chunk of productivity.

<comment><USER30> Some of it for me is pure selfishness. I just care a lot more overall about having an interesting day than being productive. An interesting day includes work and solving problems, but it also includes conversation on both technical and random human topics, connecting with people on a deeper than working level, and just plain screwing around. Luckily this all tends to balance out (at least), because maintaining high spirits and an active imagination gives a boost to productivity that's at least as strong as having a private office and slogging away in it stoically every day for 10 hours.

</comment></comment></comment></comment></comment></comment></comment><comment><USER29> I'm startled to see actual use of Visual Studio. When I was there a few years ago, literally every dev I met shunned it in favor of vim (or rarely emacs) and build.exe and windbg, despite pleas from DevDiv for any feedback.

</comment><comment><USER32> 4 PMs to 5 devs seems like overkill. why do this?

<comment><USER33> Not sure why, but from what I hear from friends at MSFT, an approximately equal number of devs, qas, and pms is very standard.

<comment><USER25> I've heard the ratio is dev::test::pm ~= 4::4::1

</comment></comment></comment><comment><USER34>
      My paint job is well done and tasefull and failities didn't fuss at me about it.

      They key point is tha tthis is up tot the team (or team's) that own the code.

      This all sounds great, but everthign isn't unicorns and ponies every day:
      There are problems to be sure – somtimes the bug data base is slow,

Would have been cool if he had spell-checked this before posting it.

<comment><USER35> I'm not sure what is the more naff joke; to go with 'And _this_ is why Windows needs a native spellchecker' or 'Obvious over-reliance on static language compilers'. I'll go with neither, as it's a good read.

</comment></comment><comment><USER36> If anyone still wants to read this, the page has been taken down for some reason but I pulled the cached copy from google before they lost it: [http://opensource.osu.edu/~jfriedly/mirrors/working-at- micro...](http://opensource.osu.edu/~jfriedly/mirrors/working-at-microsoft- day-to-day-coding.html)

</comment><comment><USER37> Nothing about his description really does it for me except the prospect of being able to play Skyrim on my work machine when it comes out.

I don't like open spaces, but being all alone in an office seems pretty horrible as well: Wouldn't you rather work from home, then? Ah, you say, but then people can't knock on your door to ask questions. Which, again, seems like it's making things worse, I don't want to sit in a closet waiting for people to knock on my door...

Around here we work on laptops, coding questions are handled via irc, most of the devs (not that many, <10 total) share a room but there's plenty of space for going elsewhere to get privacy when the hack is strong.

edit: laptops with monitor/keyboard at workstations, that is. I don't want to imply that everyone is hunched over a laptop all the time.

</comment><comment> T-hawk Using whatever editor or CLI you want sounds like a nice touch, might not be so expected in such a big company.

Does this extend to browsers? Is it open to use Firefox or Opera or Chrome as your main personal web browser, or is there a corporate mandate to use Internet Explorer on every desktop within Microsoft?

(I know the OP on wordpress may not read this here, but any other input is welcome)

<comment><USER38> It's typical for Microsofties to use IE, search on Bing, etc. simply for dogfooding purposes, but it's not a specific requirement.

It does draw some raised eyebrows if you show up at the office with, say, a personal laptop that's a MacBook and a paired iPhone, but it's at the level of good-natured ribbing rather than actual managerial disapproval or job problems. I would usually say "Yes, but I convinced a family member to buy an XBox 360, so my corporate loyalty karma evens out!"

</comment></comment><comment><USER39> Everyone certainly does not get their own office. The way it works is that people are given offices sorted by their seniority (years at Microsoft, not your pay grade). So it goes:

* 2 people in a non-windowed office

* 1 person in a non-windowed office

* 1 person in a windowed office

* 1 person in a corner windowed office.. etc

and people just starting out do end up getting paired up with someone else.

<comment><USER40> Entirely depends on team and building. I wasn't doubled up until my 3rd year at MSFT. Even then, it was due to cramped space (bldg 9).

</comment></comment><comment> anon-e-moose If developers always have the fastest machines available, how will they test or care about speed? I hope they have automated benchmarks of common tasks at least.

(Although it is obviously good to have things compile as fast as possible.)

<comment><USER3> In the case of Windows im sure they have a large test suite which runs benchmarks over tasks to weed out the non performant areas. Not only that in the later builds im sure its tested on thousands of systems to ensure that this code is weeded out in most cases.

Honestly, giving your developers a slow machine to "encourage" them to write faster code is a fallacy. The average user is not running multiple databases, multiple IDE's, debuggers, editors, multiple browsers, help documents and all the other programs they require to get stuff done. By all means make the test machine match what the users have but invest (yes it is an investment) in a fast machine for your developers.

If nothing else it will make them feel appreciated which will return more then the $1000 odd it will cost to spec their machine up from your users base model.

</comment></comment><comment><USER41> It sounds like a startup situation :)

When you've got enough experience - sitting in your little silent dungeon - you'll find yourself longing for those hectic environments again...

</comment><comment><USER42> The author seems to be pounding his chest about how efficient the MSFT code world is, but I was struck by how _in_ efficient it all seemed. Is that just me?

<comment><USER43> If you think about the human and technical scale of what they are doing there, it seems pretty efficient to me.

</comment></comment><comment><USER44> I have interned at Microsoft. No intern has a private office. In fact, many interns do not work in offices at all.

<comment><USER40> Team/building dependent. On my team, the vast majority of interns get a private office. When they get doubled, they get doubled into a window office.

</comment></comment><comment><USER45> I turned down Microsoft when they recruited me in college. Wow, what a great decision.

Now, I run a software firm where no one has an office, everyone pairs (including owners and interns), we have a /slightly/ better ratio than 1 test per 100 SLOC, etc.

<comment><USER46> > we have a /slightly/ better ratio than 1 test per 100 SLOC, etc.

Has TDD really resulted in _this_ becoming a status symbol? :P

<comment><USER16> Problem is that all status symbols in the programming world are meaningless, so in the absence of any useful metrics, we latch onto useless ones.

Tests/LOC at least measures _something_ , even if it is imperfect. It's probably better than measuring LOC themselves, which are often a long term cost for the company, not a benefit.

<comment><USER47> but, Tests/LLOC seems to state even less than LLOC. LLOC gives an indication of the complexity of the application (or a component).

All Tests/LLOC seems to state is that some lines of code exist and potentially, some test cases are testing them.

<comment><USER16> It's also a measure of test granularity, i.e. for a module of given complexity, how many test cases cover it?

<comment><USER47> We can see _what_ it measures. I'm just saying that it's a pretty nebulous metric when used out of context. Taking 2 numbers and condensing them into 1 (à la Megapixels) is an exercise in marketing.

</comment></comment></comment></comment></comment></comment><comment><USER48> Is it just me or he needed to use some Spell. Check? Oh he was on Windows, as buggy as it gets (code or writing).

<comment><USER49> As much as this comment nosedived at the end, I have to agree that his typos and misspellings detracted from the article for me. A basic proofread would have prevented this from feeling like it wasn't too well thought out...</comment></comment>


You Can't JavaScript Under Pressure - <AUTHOR> http://toys.usvsth3m.com/javascript-under-pressure/ <comment><USER2> Thanks for immediately playing audio without asking me first. I know everybody just _loves_ it when web pages do that.

<comment><USER3> Because of your comment, HN will have a dozen "I am so disappointed in all of you" posts in the coming week declaring how mean everyone here is, and how it is no longer like it "once was".

I hope you are happy.

<comment><USER2> I'd be happier if this page hadn't blasted music into my conference call.

<comment><USER4> Your fault for not paying attention during a conference call...

<comment><USER2> Yeah, because we never have conference calls where we have to be there but don't really have to do anything besides listen for our name.

</comment></comment></comment></comment></comment><comment><USER5> Oh! Hello. This is my thing I made for usvsth3m.com. Hope y'all like it. HTML5 Webworkers made it possible - sandboxing user-submitted JavaScript so an accidental while(1) or document.write can't kill everything.

Do have a look at the source code. Oh, and try turning up your speakers and typing in the Konami code...

<comment><USER6> If you alert() something inside an infinite loop it doesn't seem to be able to detect it (nor does it show an alert box!)

<comment><USER7> Nothing like figuring out another way to kill your browser :)

</comment></comment></comment><comment><USER8> Fun distraction. For me it was:

30% figuring out the answer, 20% not having my editor shortcuts available, 50% figuring out how to check if a value is a certain type.

Am I the only one that gives their functions preconditions that the input is good? To me, throwing up when you're passed a non-number to a sum method is correct behavior.

<comment><USER9> TIL there is no typeof === 'array'. -_-

<comment><USER10>
        [] instanceof Array; // returns true

<comment><USER11> However this fails on "Array-like" objects like NodeLists.

</comment></comment></comment></comment><comment><USER12> Could there be a histogram at the end that shows distribution of finishing times? Or at least a leaderboard... I did pretty well [obviously ;)] but I'd like to see where my time falls in relationship to others.

I've confirmed that I can, in fact, code under pressure, but to what degree?

Other than that, fantastically fun game. My only regret is that it's a one- time game by nature, since obviously the second time around you'd simply be remembering what you did the first time instead of creating it.

<comment> Aco- A lot of people posted their results to twitter, you can get an idea of where you fall in avg by giving this a glance over:

[https://twitter.com/search?q=I%20completed%20%22You%20Can't%...](https://twitter.com/search?q=I%20completed%20%22You%20Can't%20JavaScript%20Under%20Pressure%22&src=typd)

</comment></comment><comment><USER13> The sudden music/talking that started was annoying and caused me to close the tab immediately.

<comment><USER14> No NoScript?

<comment><USER15> Maybe I'm naive but... I suspect that the rest of the page wouldn't have worked with NoScript. Since you're, you know, typing in JavaScript code and running it against some test cases.

<comment><USER16> I am using Noscript and the page works fine:

\- usvsthem is white-listed so Javascript runs, which is all that's strictly required.

\- White-listed sites are still blocked from running plugins including <AUDIO>. It's straightforward to override this on a plugin-by-plugin basis but I typically don't want to.

11:14. The 14 seconds were enough for the first two questions, but I find strings and array handling tough when switching languages.

<comment><USER15> Ahhh that's pretty cool!

</comment></comment></comment></comment></comment><comment><USER17> I took almost 40 minutes, am I in the wrong profession? I figured out how to do all of them right away but I got stuck on figuring out JS syntax in a few places since I barely ever use it and felt like googling was cheating. I did use google on the last one to see how to check if something's an array. I even ended up checking at one point if something's a number by (!isNaN(n/4) && n+n == 2*n), and checked for being a string or not with if(s.length!=undefined) (I know that returns true for an array as well). Would've been a lot easier with something like Intellisense - coding without it feels almost like I'm blind, after being used to it. That and I thought alert() didn't work until I noticed at the end it actually sent it to the output.

</comment><comment><USER18> Fun little puzzles. First 4 went pretty quickly (~8:00) and then the last one took ~7 minutes Googling around for this so I could test if a variable was an integer...

      n===+n && n===(n|0)

Wish I could see my answers after the fact though!

Edit: Read the initial requirements of the puzzle, it says sum all the _integers_ , not all the _numbers_. People using (typeof i[x] == 'number') just got lucky because the test-cases didn't exercise the full requirements of the puzzle ;)

      // i will be an array, containing integers and/or arrays like itself.
      // Sum all the integers you find, anywhere in the nest of arrays.

<comment><USER19> typeof n === 'number'

It didn't actually require differentiating between integers and floats, just numbers and other types.

<comment><USER20>
        > typeof 5.4
          "number"

<comment><USER18> Yea, this is what I realized once I saw the puzzle was throwing junk data like "false" on #5.

I mentally skipped over Justin_Time's solution, figuring I would just hit a float error case because it was going to be a stickler about integers.

</comment></comment></comment></comment><comment><USER7> That was fun! I just got in to work so I was properly sleeping. I also rarely use typeof, so I had to look up that 'integer' and 'array' do not exist :) Also, what was really annoying is the use of 'i' for the argument. That's what I exclusively use for the 'for loop' index! Tripped me up a lot, I had to consciously remind myself every time I accessed the array. Last 'also', the font is WAY too big for my small screen, the comment never fit in, I had to scroll... So I think I did bad, 12 minutes. But still fun :)

<comment><USER21> The use of 'i' set me back a bit, too. Caused me to go into an infinite loop at one point.

<comment><USER22> Exactly this. I had to rename `i` for indexes to `j` and that really messes my head up! :(

</comment></comment></comment><comment><USER23> It was a kinda cool thing, although I got some strange behavior when I was using `match` for determining whether the input is a filename - my regex was /. _\\.._ / (and so I did var match = i.match(/. _\\.._ /) ), and match[1] was undefined - turned out match[2] was what I wanted, and it was present, but the behavior was incorrect in the reporting console in the game.

I finished this in 4 minutes.

Edit: looks like HN doesn't like asterisks

<comment><USER24> I thought regex was overkill for that one and used:

return input.split(".")[1] || "";

<comment><USER9> I fully anticipated a test case like file.name.ext. Of course, you could still do what you're doing, but it'd be a lot more verbose.

</comment></comment></comment><comment><USER25> Lighten up, everyone, this is a fun little thing. Thanks for sharing.

</comment><comment><USER26> I'm a bit disappointed that it doesn't award points for my heavy use of regex and obscure variable names.

<comment><USER27> > obscure variable names

Absolutely! Being under the gun led me, at one point, to have a "longest string in array" method with a statement like

      if (i[z].length < qq) { ... }

</comment></comment><comment><USER28> there's a truly dubious test case in the File Extension test.

file called .htaccess is not filename "" and extension "htaccess" with a "." separating the two. .htaccess is a unix style dotfile. its whole name is ".htaccess" and it has no file extension.

<comment><USER29> I have to admit to cheating and putting 'if (i === '.htaccess') return 'htaccess';' to save time :)

<comment><USER30> I just did

return i.indexOf('.') > -1 ? i.substring(i.indexOf('.')+1) : false;

Seemed to pass all test cases

<comment><USER31> Aye, I did similarly, though for some reason I did >= 0 instead of > -1. I wonder what % of people choose one test approach vs. the other?

<comment><USER29> I chose >= 0, it's fun to learn!

</comment></comment></comment></comment></comment><comment><USER32> It's problems like 5 that make me sad that IE <9 doesn't have Array.prototype.reduce.

        return i.reduce(function(prev, next) {
            if (typeof(next) == "object" && next.length) { return arraySum(next) + prev; }
            if (typeof(next) == "number") { return next + prev; }
            return prev;
        }, 0);

Something that simple needs to be shimmed on earlier IEs. In fact, I had to look up Array.prototype.reduce for this since I usually use Underscore's. Javascript problems...

<comment><USER33> [https://github.com/kriskowal/es5-shim](https://github.com/kriskowal/es5-shim)

<comment><USER32> Cool project, but all the warnings on that page about the edge cases make me concerned about trying to exuberantly move to ES5, and so I just stick with Underscore and the same level of JavaScript syntax I've been writing since 2005. (sigh)

</comment></comment></comment><comment><USER34> The input argument name "i" is really annoying. I always use "i" as for-loop var. Made some mistake on this. But the Game is really great. :D

</comment><comment><USER35> I got 11 minutes and 14 seconds. Is that slow? The answer to my last solution was like this:

          function arraySum(i) {
    	var total = 0
    	for(var x=0; x < i.length; x++) {
    		if(typeof i[x] == 'object') {
    			 arraySum(i[x])
    		} else if(typeof i[x] == 'number') {
    			total += i[x]
    		}
    	}
    	return total
         }

<comment><USER9> You must've total+= arraySum(i[x]) right? Otherwise this couldn't work as the result of a deep dive wouldn't be utilized anywhere...

<comment><USER35> Yeah, I did, thanks for pointing that out. I made that mistake when writing the comment.

</comment></comment></comment><comment><USER36> Total bait and switch. As soon as I saw that random array in my array of strings I knew what kind of game this would be.

</comment><comment><USER37> Last one reminded me how awful JS is once again. There are 5 different ways to check if an object is an array, some are implementation dependent, and the obvious one doesn't work (typeof x == "array").

<comment><USER38> typeof(x) === typeof(["something which is certainly", "an array"])

or am i missing something?

<comment><USER39>
         > typeof ["a", "b"]

        "object"

Of course, since you're told you'll only get numbers, arrays, and strings, that is enough to solve the problem narrowly.

</comment></comment></comment><comment><USER40> I created a CoffeeScript version of it. [http://shovon.github.io/youcantcoffeescriptunderpressure/](http://shovon.github.io/youcantcoffeescriptunderpressure/)

</comment><comment><USER41> "6 minutes, 21 seconds for all 5 levels. Well done!" I feel like I should have done better considering JS is one of my primary languages.

</comment><comment><USER42> 9:10, had to Google a bit for type checking, and I had forgotten the proper syntax for a string split. :-/

</comment><comment><USER40> I got 3 minutes 39 seconds.

I used i.forEach for questions involving arrays, instead of for-loops. Saves me time.

</comment><comment><USER43> This was awesome. 5:48. I actually turned my sound on for the end.

</comment><comment><USER44> nice stuff but this is plain wrong! // return the file extension (with no period) if it has one, otherwise false

its like returning error codes in C for errors

<comment><USER42> I too shuddered at this instruction...

<comment><USER45> Or for using i as your input variable

</comment></comment></comment><comment><USER45> What's everyone's times? I did 7 minutes

<comment><USER46> 17 minutes, 47 seconds. slow poke here.

<comment><USER9> 26 Minutes. If you're a slowpoke, I'm a Slowbro.

</comment></comment></comment><comment><USER47> Would be great to see some solutions.</comment>


A standard library for the client-side Web (Rust) - <AUTHOR> https://github.com/koute/stdweb <comment><AUTHOR> <quote>

The goal of this crate is to provide Rust bindings to the Web APIs and to allow a high degree of interoperability between Rust and JavaScript.

</quote></comment>


Why has regional income convergence in the U.S. declined? Housing costs - <AUTHOR> http://marginalrevolution.com/marginalrevolution/2017/07/regional-income-convergence-u-s-declined.html <comment><USER3> IMHO the inflation of housing costs has many factors, but one of the ones that gets overlooked is the concentration of wealth near the top. Rich people need safe places to stash their money, and they end up buying real estate all over the country. This isn't just Americans either, US real estate is a popular investment all over the world. But when you are buying real estate as an investment where do you buy, not out in some no-name town in some flyover state. You buy in a place where the market is already hot and ride the wave. Thousands of millionaire investors piling into a market end up pricing out regular folks who just want a place to live.

I'm frankly surprised that we have not seen more real estate bubbles pop over the years. It's clearly unsustainable, yet somehow the market keeps going. Ask your parents if they could afford to buy their home today, even with their best yearly income. Most of them will say no if they lived in the city for a couple of decades or more. I know so many who bought their house for $70k-$100k in the 70s and now see their neighbors sell for $1m-$1.5m. It's insane.

<comment><USER4> I'd assume it was forced by all of the initiatives of making the "American dream" of owning a home a reality for as many people as possible.

Real estate shouldn't be an investment, it shouldn't raise in value, and it shouldn't be possible for a huge chunk of the population to fund the financial sector through mortgage interest. It's a tax on everyone designed to funnel wealth upwards towards a sector of capital owners that get paid for doing very little.

Regulations and taxes should be arranged such that it is very expensive to own real property that isn't for your own personal or business use. If you want to act as a gatekeeper for real estate, at least a large chunk of the profit should go to the state for the benefit of the public. If it's expensive and not beneficial to own things so others have to pay you to use them, the market will shrink dramatically and more people will actually be able to own homes.

<comment><USER5> Yep. And as you also know, there's so much money in it that we won't see it change in our lifetimes. Why work when you can let the land work for you?

<comment><USER6> Why spend all your income today when you can save and invest some for the future, thereby allowing you to consume more later in exchange for consuming less now?

Investments, including land, are owned on the backs of consumption foregone in the past.

<comment><USER7> Just no.

All investments are not owned on the back of consumption foregone in the past.

Unless you believe that someone with 100 million dollars is "foregoing consumption" when they invest (particularly in real estate).

<comment><USER6> I do believe that. They can take that $X MM and put it into an investment xor into a yacht/airplane/supercars/vacations.

One is consumption; the other is investing.

<comment><USER8> Fancy-ass houses and condos are consumption. Most of these people buy up a place, then completely gut it, replacing everything with the new trendy kitchen or whatever. Even if they sold it for more than they paid, there's no way they made money on it after renovations, taxes, utilities, upkeep, and staffing.

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> After decades of Federal policy to encourage investment in housing, the consequences are getting harder and harder to ignore, yet the blind faith in these sorts of paternalistic policies remains unabated.

The many tax breaks and loopholes for real-estate investors resulted in overbuild in many parts of the country... these were the parts that were hit hardest in the crash of 2008.

Not only was this a big misallocation of capital which robbed other industries of investment for decades, but the response to the crash was to prop up real- estate prices through other drastic measures.

These massively inflated prices enriched many of the landlords in urban areas, greatly increasing their political clout and ability to push for regulations that protect their incomes and harm the public.

Meanwhile, transit systems and roadways declined, further increasing the value of urban real-estate because of the great inefficiency of getting to and from a city if one lives outside of the city.

So now, real-estate-fueled urban price inflation has altered mobility patterns creating further economic distortion. Software engineers in SF make high salaries but live a lower standard of living than those in other cities:

[https://www.codementor.io/blog/best-cities-software- engineer...](https://www.codementor.io/blog/best-cities-software-engineer- earnings-271vpf599k)

Who is benefitting from all of this? The landlord class, builders, and construction companies.

When you see a politician wearing a hard hat chances are that politician is helping enrich those interest groups at the expense of everyone else.

<comment><USER10> Builders don't profit because they don't have places to build legally.

</comment></comment><comment><USER11> The problem has been popularly summarized as "housing cannot be both affordable and a good investment."

Of course that might be an oversimplification. Housing has been an investment class as long as it's existed and yet there hasn't been an affordability crisis like this since at least before WWII. What's different now?

<comment><USER6> Housing that you live in (aka "consume") has not been a particularly good investment, IMO. What confuses many people into thinking that it is is that you often end up holding it for a long period of time, paying down the mortgage and when you go to sell, you have a large gain, where you started with a very small downpayment. For most people, that gain is also tax-free, so it seems like a magic windfall.

The problem is that over that long a period of time, inflation may have halved the purchasing power, meaning your gain is a paper one, you spent a lot of years fixing and maintaining the house, paying taxes and insurance, working on the yard, maybe did some remodeling, etc. If you'd instead invested in the stock market any surplus over renting, you often would have come out ahead.

Most people would find a way for that surplus to turn into lattes, vacations, new cars, and large TVs rather than into shares of VTSAX, so for them, homeownership is a good idea, not because it's a better investment than equities, but because it's a better savings vehicle than nothing.

I'm a homeowner and very happy about that fact for our family (for lifestyle reasons), but even in a steeply rising market (Cambridge, MA), my other investments have performed much, much better (even including the 2007/2008 crisis).

<comment><USER12> What's your investment strategy? I recently started a Roth IRA and started maxing it out each year, but I don't know what else to do with my savings (that are extra over my ~6mo salary buffer + emergency fund, I mean). Dumping it all into something like VTSAX is something I've thought about for a while, but I'm not sure how well it works for long-term investment/"making my money work for me".

<comment><USER13> > I recently started a Roth IRA and started maxing it out each year

Huh? There's no limit on how much you can put into a Roth IRA each year, as far as I've ever heard.

[http://www.rothira.com/what-is-a-backdoor-roth- ira](http://www.rothira.com/what-is-a-backdoor-roth-ira)

<comment><USER12> The IRS website says its $5500 contribution max per year. [https://www.irs.gov/retirement-plans/plan-participant- employ...](https://www.irs.gov/retirement-plans/plan-participant- employee/retirement-topics-ira-contribution-limits)

<comment><USER6> Yes, but read the "mega backdoor Roth" technique. It allows many people to effectively contribute much larger sums into Roth IRAs, even though there is a $5500 "front door" limit.

If you have a low current marginal rate and a lot of money to stash away for retirement (that might be a semi-uncommon combination), it's absolutely something to look into. I have a high marginal rate, so I haven't done it.

<comment><USER12> So it's basically opening a Trad IRA, putting money into it, then immediately rolling it into a Roth IRA? I thought the contribution limit was across all IRAs you own, so you still wouldn't be able to put any extra into the IRAs in general?

This is complicated and weird. I might hold off until I understand it better.

<comment><USER6> Mega backdoor Roth primer is here: [http://www.madfientist.com/after-tax- contributions/](http://www.madfientist.com/after-tax-contributions/)

Don't get hung up/paralyzed into doing nothing for fear that something slightly better might be available if you did hundreds of hours of research. The most important thing is to get started, IMO.

<comment><USER14> Just to be clear. The Mega backdoor Roth requires a 401k that allows After-Tax Contributions. Most won't let you do that. Their software will say "that contribution percentage you have selected will result in more than $18k/year in contributions and that isn't allowed" or you'll get to the end of the year and they'll just refund you the extra contributions. Which also doesn't help you.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> In retrospect, the problem is the US has had poor property tax policies. Property tax should be based on 1) the land square footage and 2) the value of the location. If a lot is double the space of normal lot, the tax should be at least 50% higher. If the price increases sharply, the taxes should as well. This way large lots sizes and price fluctuations would stay in check. The property taxes in SF, by the way, are way too low for the current value and square footage of the lots.

<comment><USER16> Prop 13 has hugely restricted the ability of municipalities to tax land. Despite being sold as keeping the elderly in their home after retirement, that's a tiny subset of what was actually covered in the law.

I agree that a more Georgist tax policy is in order, but fixing Prop 13 is pretty tough. It gets older residents really really riled up when changing Prop 13 is mentioned.

<comment><USER17> With decent reason. There is no, and I really mean no reason why someone should be forced out of their house due to rising property taxes. That's just not what taxes should be used for.

Really, it should have applied to one's primary residence, and that's it. Maybe the primary office of a small/medium business.

</comment></comment></comment><comment><USER18> It always stuns me to hear so many people blaming NIMBY movements for housing prices while completely ignoring the effect that good job concentration has on the local housing markets. Housing is insanely expensive on the east and west coast because those are the only areas of the country seeing economic growth. If everyone is required to be in such a small area to even have an opportunity to get a good job, then of course it will be expensive to live there.

<comment><USER19> Perhaps you'd like to hear about a little-known, tiny little state named "Texas".

<comment><USER5> How is the tech job market there, especially outside of Austin, which also has skyrocketing rent? [https://www.rentjungle.com/average-rent-in-austin-rent- trend...](https://www.rentjungle.com/average-rent-in-austin-rent-trends/)

<comment><USER20> I've heard good things about San Antonio, but I don't know the specifics. Texas is just too hot and dry for me to live there, though, so if it suits you good luck

<comment><USER21> If you don't like dry, Houston is for you! ;-) It is one of the few places I know of where humidity can be 100% and it not rain...

</comment></comment></comment></comment></comment><comment><USER22> Inflation of housing costs wouldn't be _that big_ of a problem if we had cheap and fast public transportation.

I live in the Bay Area, and I've seen families forced to move further and further from the area to afford a reasonable house and good education for their kids. The problem is, now they have to commute for hours, driving in sub-optimal conditions to get to their jobs.

Imagine if BART charged a flat $1 fare? Or if the Caltrain ran every 15 minutes from 5AM to 1AM and charged $1/ride? Then living far away wouldn't be _that_ bad. But we're getting squeezed from both sides here: sky high housing costs, _and_ terrible commutes on gridlocked "highways".

<comment><USER23>
      Or if the Caltrain ran every 15 minutes from 5AM to 1AM and charged $1/ride?

Then you'd have absolute gridlock at all unseparated crossings (e.g. Castro Street, Rengstorff, Menlo, Redwood City, etc. Those would have to be separated first.

</comment></comment><comment><USER24> Well no kidding. You don't need to be a genius to see that housing costs in big cities have outstripped wage growth by a large margin for many years. Housing costs outside of the big population centers have grown at a much more reasonable rate.

</comment><comment><USER25> This article speaks to regional income convergence. However, national wages, according to Bureau of Labor Statistics data (1) for Usual Weekly Earnings (parsed by education level in particular) show clear divergence - along with a clear dissappearance of the middle class.

Perhaps regional economies are simply settling down and catching up to the economy at large (I'm not implying that wage divergence is good or fair - <USER2> just seems to be what is happening based on BLS data).

1\. [https://www.bls.gov/news.release/wkyeng.nr0.htm](https://www.bls.gov/news.release/wkyeng.nr0.htm)

</comment><comment><USER26> I don't know shit about real estate, be it property taxes or zoning laws. From my dumb angle, I see it as metropolitan markets across the country going crazy because of the decade-long-or-so trend of people moving to cities. In simple terms, what are governments doing/not doing that is causing such ridiculous costs?

<comment><USER10> Banning housing construction in "cities" through hight limits.

</comment></comment><comment><USER27> It is not a conspiracy or an inevitable consequence of growth. It is not because of the concentration of wealth (also a problem!). It is because there is not enough housing.

There are many kinds of restrictions, some you probably agree with. Most of the restrictions are popular with liberals, conservatives, Democrats, and Republicans.

Restrictions like:

      * must build parking per housing unit
      * zoning restrictions to limit density
      * long approval processes for construction
      * many blocks to construction approval even after complying with all the restrictions

This is a bipartisan problem, it's really a culture problem. It's understandable, even on the micro scale. When you move into a place (and are done renovating it), you'd prefer that the neighborhood never change and that no one does any construction in it. There's a little tinge of atavistic fear of strangers too, even though people are moving in and out of neighborhoods all the time.

In 1960, San Francisco population was 740,000. 50 years later in 2010 it's 808,235. The east bay and peninsula have been as reticent about housing.

Despite wanting to live in SF and ending up in San Mateo once they get there they don't want anyone to build anything - no more density. Despite wanting to live in the mission/noe valley/haight and ending up in the less dense sunset once people get there they vote against more housing.

The solution is more housing. Transit oriented development (denser zoning and no parking requirements near transit), allowing people to convert illegal inlaws to legal apartments, converting garages into apartments, and allowing people to add stories to their homes are all possible good moves. Maybe there are some of those you don't like, but each one we don't do is less housing and higher costs.

And when you do vote for more housing you are getting:

      * cheaper housing
      * less climate change
      * less pollution
      * less homelessness (because homes)
      * less inequality (housing costs are a regressive expense)
      * a more prosperous city (you personally will have more money)
      * a more interesting city (you personally will have more interesting restaurants and things to do)

You think that cute 4 story victorian in Noe looks cool? Maybe make it legal to build it anywhere in the city or bay area. The whole sunset and richmond are filed with 1 story single family homes. Even pretty dense mission/noe/haight have lots of individually low density properties. Regionally why not let people build 4 story houses with apartment flats anywhere along caltrain or bart?

But does it work in practice? Check out Tokyo: [https://www.ft.com/content/023562e2-54a6-11e6-befd-2fc0c26b3...](https://www.ft.com/content/023562e2-54a6-11e6-befd-2fc0c26b3c60)

(SF resident)

</comment><comment><USER28> The dirty secret of the tech industry is that their leaders and investors are making a killing in Real Estate. VC owners and their billionaire friends have bought a lot of land and buildings in San Francisco, Seattle, and other cities, and are "forcing" their companies to move into these cities. This has the nice side effect of making another fortune for them. At the same time, tech workers need to pay essentially a large tax for living where the jobs are, and other types of workers cannot even live in these cities anymore.

<comment><USER29> I hope this is not true. It just means all these tech billionaires are, not actually "tech" billionaires....

For some unknown, and Stupid reason, I personally think it is unethical to invest in Real Estate. Previously you would have to live in area like Seoul or Hong Kong to understand that. Now I guess people in London, Vancouver or San Francisco may understand a little bit more.

<comment><USER30> > For some unknown, and Stupid reason, I personally think it is unethical to > invest in Real Estate.

Here's the moral framework you might be unconsciously subscribing to:

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

</comment></comment></comment><comment><USER31> I don't think people who rent have a right to complain about the housing market. If there's a toxic spill across the street, they can just pack up and move. They also can't complain about gentrification of "their neighborhood" since it's not really their neighborhood, they're just visitors.

<comment><USER32> Yeah it's the investor's neighbourhood! Despite the fact that they live in a fancy part of town in some other city, or in China, or they're a corporation. Screw the people who actually live there. It's not like they _are_ the neighbourhood. /s

<comment><USER31> There's no need for snarkasm. You don't have to be a Chinese investor to buy an apartment. I simply have no sympathy for people who rent long term:

1) They can take off any time. A new job? A market crash? No problem, just pack your stuff and leave. 2) Someone else is doing all the maintenance and dealing with building codes and paying all the taxes, etc.

Because of the inherent risk in owning a home and the effort required to maintain it, it will always be cheaper to buy than rent. If someone likes their neighborhood, but isn't willing to commit and put in the work, they deserve what's coming for them.

<comment><USER33> >it will always be cheaper to buy than rent.

That's decidedly untrue. In many markets you can make the case that conservative assumptions result in a cheaper buy option. However, the Bay Area in particular throws that calculus in reverse for many neighborhoods and property types.

Your argument seems to rely on the premise that buying is monteraily cheaper in the long run as long as you're willing to put in nominal sweat equity and risk. And that labor buys you some sort of citizenship that money, for the same amount of tenure, does not. The Bay Area market does not reward that puritanical ethic.

<comment><USER31> Can you explain how buying in Bay Area can be more expensive than renting? The only reason I can think of is that there's an expectation that the property will appreciate greatly in the near term and can be sold for a profit, but eventually either the rents will raise to be above the buy option (in which case congrats to those who bought, well done) or someone will be left holding the bag.

So yes, I'll concede that in the temporary situation that buy is more expensive than rent, and there's a market correction coming, it's savvy to rent, but those aren't the folks that cry "Gentrification!".

And yes, owning a deed to your place or, even better, owning a business in the neighborhood, counts for more than just "having been there".

</comment></comment></comment></comment></comment><comment><USER34> We would have been much better off if politicians left housing alone and just cut checks to the people they are buying off with all the interventions into the housing market.

Of course that would run into the problem that people love to push for giveaways from the government but want it to be slightly obfuscated so they can tell themselves stories about how they never got anything from anyone. Witness the uproar over "you didn't build that."

Rent seeking is a fact of life, I can accept it. But the hypocrisy and self righteousness of some rent seekers just drives me bananas.</comment>