Stop Writing JavaScript Compilers, Make Macros Instead - <AUTHOR> http://jlongster.com/Stop-Writing-JavaScript-Compilers--Make-Macros-Instead <comment><USER3> I'd be afraid of inheriting any codebase that made extensive use of these JS macros.

You really have no idea what this is doing (the canonical example from sweetjs.org):

      class Person {
        constructor(name) {
          this.name = name;
        }

        say(msg) {
          console.log(this.name + " says: " + msg);
        }
      }

It's not javascript -- it's your own made up "language" of macros.

I do believe with a steady hand this could lead to some great things, but the example on sweetjs.org seems rather heavy handed. Having different `class` macro definitions between codebases that use sweet.js will devolve into madness.

<comment><USER4> I have only one thing to say here, to you and to all people who are opposed to macros and new languages in general: go learn some more (let's say 5) languages and then come back[1]. Don't bother before that.

Why? Because learning languages gets easier every time you do it. And it opens your eyes to languages' internal structure, the way languages are composed, which makes using given language effectively easier.

So now you know 5 or 8 languages and you discovered a few basic principles behind most of them and you understand how semantic constructs compose and you know about various syntactic representation of any given semantic statement (and the other way around, similar syntactic constructs having different meanings). And you come upon a macro, like the one in the example.

You don't know what it's doing - well, you just check the docs and then you know. It's as easy as learning what a function does, really. So what was learning those other languages for? It was just to reduce your fear of introducing new syntax for things. You won't think "oh, how dangerous this could be" but rather you just start using it, because you do it (change syntactical constructs you use) all the time when you switch between languages.

At this stage you can learn some Lisp. And write some real macros. And maybe try Nimrod, which has wonderful macros too. And maybe Rust, which I didn't try but I read good things about. After this you'll understand what macros are, how they are constructed and how they compose - and write many of your own - and then you look at the class example above and you instinctively[2] know that there has to be a syntax transformer which matches class keyword, a keyword and a block, and then there has to be another transformer, perhaps recursive (like in Scheme) or just iterating over the body (like in defmacro) and that all they do is to add some keywords here and there and a statement or two at the top of the block. In short - you know exactly what to look for and even docs are unneeded, you just take a quick look at a macro source and go on using it happily. Alternatively you can look at generated code and work out macro implementation from it easily, too.

I'm a happy user of LiveScript, and CoffeeScript before that. The only reason for not switching to JS with sweet.js is the fact that I would need to write a whole host of macros by myself, while in CS and especially LS they are already written. And of course modifying their grammar is not _that_ hard either. Had I somehow been unable to use LiveScript, I'd use sweet.js for sure. What I'd implement? Probably some kind of "let" statement for sane scope management, a loop macro for iterating over custom collection classes (loop in CL, for/* in Racket, also in others), function currying (partial application) and maybe something like "with" context managers from Python would be among the first. There are many things which are better abstracted with syntax than with (for example) functions.

Would the language be JavaScript? Well, hard question, it would be a superset with underlying semantics intact, but it sure wouldn't "feel" like JS. But would that matter? Not at all - syntactic extensions would save me a ton of time and I'm used to many different syntaxes anyway. And I expect anyone who'd like to work with me to be able to pick up any language in reasonable time - the ability to pick up a few additional syntactic constructs on top of already known language is essentially the same thing, so I think such person would have no problems with it either.

Anyway, macros are good; using them is good; the only dangerous thing is having many people implement essentially the same macro over and over again, but I think this could be solved with a sane module system for macros which I read is already planned. There should be more languages rather than less; more exploration of different syntaxes and semantics for things, not less - <USER2> macros are one way of making this happen. And if you have problems with learning what a "class name body" does, then I can only refer you to the first paragraph.

[1] After I wrote this post I realized I could sound a bit rude. It was not my intention and I'm sorry if I offended anyone; while written generally, it's actually only a description of a road I personally traveled, so obviously YMMV.

[2] I know completely nothing about sweet.js in particular, so I'm completely just guessing.

<comment><USER5> I have written non-trivial programs in C, C++, Java, Javascript, ActionScript, PHP, Python, Haskell, Scheme, Go, and Sawzall, and also played around with prototypes or toy-quality programs in Common Lisp, Ocaml, Dylan, Erlang, Ruby, and Perl. I've written compilers, templating languages, desktop GUIs, web GUIs, mobile GUIs, parsers, machine-learning based data extractors, and distributed systems. I also lead a team, and I'm trying my hardest to bring a large, heavily used product into the modern era when it comes to web technologies. I was a huge fan of macros in college and the few years immediately afterwards. I've now done almost a complete 180 on them, and would encourage anyone I work with not to use them.

The reason is because I've come to understand that social factors trump technical factors nearly every time. The hardest part of writing a software system is almost never solving engineering challenges or writing code, it's communicating the solution to everyone who will have to touch it. Over a software system's lifetime, you will have to read code much more often than you will have to write code. Macros make writing code really easy and communicating everything about what it does, how it does it, and what invariants need to hold for it really hard. That's usually a poor trade-off for anything non-trivial.

<comment><USER6> I've found that working with a DSL structured around the problem domain improves communication and readability. Macros are a tool to allow you to easily implement these DSLs and have them fit nicely into the host language.

<comment><USER5> I actually like DSLs, but I think the right level of abstraction to develop them is by exposing the tokenizer, parser, AST, typesystem, semantic analyzer, and execution engine of the language as libraries in the language itself. Things like 'ast' and 'parser' in Python, package 'go' in Go, Clang for C++, etc. I've tried to fill this gap for HTML5 with Gumbo - it was initially designed to support a semantically-aware templating language in Google.

The reason I think DSLs are good but macros are bad is because DSLs make you think long and hard about the costs of implementing a new language. You have to pay for it up-front by writing a compiler and hooking it into your build system, even if you have help from the host language's libraries, and then you'll end up with something that's clearly a separate language and must be documented and learned separately. That cost makes it clear that creating a DSL is not something to do lightly, and you need a problem domain where there really are much higher-level abstractions that can't be captured by an existing programming language.

The problem with macros is that you can create a new language construct with a half dozen or so lines of code, use it in a few hundred places in the codebase, and now your maintainers have a few hundred problems.

<comment><USER7> But at that point what is the difference between a macro and a function, from the maintainers' perspectives?

Is it just that, when a maintainer sees a function call it's easier to guess what it does, then when they see the use of a macro?

</comment></comment></comment></comment></comment></comment><comment><USER8> Glad someone finally wrote a post about this. Coming from the lisp world, that's the thing I constantly see missing from languages wrapping javascript. They generally change the syntax a bit, add a few features to minimize boilerplate in some areas, and call it a day. Why would I want to learn a new syntax to program in a language I already know well? Unless you give me the tools to write code that writes code, I'm not going to bother learning/using a new javascript syntax.

<comment><USER9> At least TypeScript brings to the table something very valuable: optional type checking.

<comment><USER10> And sweet.js macros can be used to implement the type system of your choice in otherwise stock Javascript. (For that matter, you could un-overload the + operator so that it only works with numbers, and invent a . operator to do string concatenation.)

I can see a potential argument that doing type checking via macros costs more than precompilation in efficiency terms, but on the other hand, that's not necessarily so. How does TypeScript do type checking for non-constant values? That is, if I define function foo(bar: string) in a TypeScript library, then compile it, load the library in a Javascript interpreter, and call foo(Integer.parseInt("42")), what happens? I'm guessing that either foo() misbehaves, or that foo() throws an exception.

In the former case, there is no benefit to TypeScript because your type annotations are evanescent and misleading -- you can't rely on them, so you either have to write fences around input values just like you would without them, or risk your code misbehaving because it's written to rely on unreliable type annotations.

In the latter case, TypeScript is adding those fences automatically, so that a function which expects an integer argument can check whether it actually got one and fail if it didn't. That's basically what a macro system implementing type checking would do, too, and it seems to me that in both cases optimization would be merely an implementation detail.

<comment><USER9> It's not practical to implement a type system using macros. The problem is the software ecosystem. First of all, I don't think sweet.js macros can implement a full type system like TypeScript has which can load type definitions from other files, do type inference and support interface definitions.

Secondly, it's difficult to get a community around a single type system. Thirdly, it's difficult to get IDEs to support these sweet.js macro type systems.

The fact is, a sweet.js macro type system which is widely in use and supports everything TypeScript has and is supported by many IDEs doesn't support, and is unlikely in my opinion, if not technically impossible. In theory it might work.

If you compile TypeScript and then call it using JavaScript with the wrong type the code will misbehave. It's a downside, true, but a dynamic type checking system written in JavaScript would be too costly. Sweet.js macro type system wouldn't bring any benefit in that regard either.

You can rely on TypeScript type checking to make sure your code is correct. Similarly, if you develop in JavaScript, you can use unit tests instead of type checking to make sure your code is correct. Unit tests nor type checking can't guarantee that _other code_ is correct, even if that other code happens to use your own code.

The benefits of TypeScript's type checking include the elimination of a class of unit tests, automatic refactoring, full intelli-sense support, better readability and automatic documentation (which doesn't remove the need of manual documentation).

<comment><USER11> You should have a look at Typed Racket [1] which is a type system for an existing language (Racket) built entirely with macros [2] that satisfies all of the criteria you want -- works with the IDE, safe interop with untyped code, etc.

[1] [http://docs.racket-lang.org/ts-guide/](http://docs.racket-lang.org/ts- guide/) [2] [http://www.ccs.neu.edu/racket/pubs/pldi11-thacff.pdf](http://www.ccs.neu.edu/racket/pubs/pldi11-thacff.pdf)

<comment><USER9> Wow, that's impressive. I didn't realise macros can be that powerful in practise.

<comment><USER12> Maybe this will help see the full scope of the power of macros: macros receive their arguments as an AST (i.e. a list) and are free to transform it as they please; they also have full access to the host language and are free to implement a type system checker that walks code and checks that all the types match. There are no restrictions here - the type checker would be regular scheme code that would be wrapped into a macro simply to make it run at compile time. So there's nothing less powerful about macros at all. It's just code that runs at a different stage (compile-time instead of run-time). After macros, in terms of power, you have reader macros, that receive their arguments as raw text and are free to turn it into any AST.

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> Since sweet.js code can't be directly run in the browser, you need some "compiling" or "interpreting" step. It's not obvious why this is any different from a compile-to-js language that had support for macros.

For example, someone wrote a macro system for coffeescript: [https://github.com/mrluc/macros.coffee](https://github.com/mrluc/macros.coffee)

Related discussions: [https://github.com/jashkenas/coffee- script/pull/3171](https://github.com/jashkenas/coffee-script/pull/3171) [https://github.com/gkz/LiveScript/issues/328](https://github.com/gkz/LiveScript/issues/328)

<comment><AUTHOR> This isn't intended for people interested in other languages; if you like CoffeeScript, certainly use it. I really like ClojureScript myself. But there's a lot of reasons you already need a build step for JS anyway (especially for client-side), and this gives you a lot of power without having to completely switch languages.

It's worth noting that sweet.js is a robust macro system grounded in academic research (the core of it from the Honu paper). That CoffeeScript system is a bit of a hack and its flaws would show it the whole community started using it (I don't have time to go into this right now, but things like hygiene, etc are really difficult).

<comment><USER14> Hi, I made macros.coffee, and I'd like to say that this guy is right. It's non-hygenic (on purpose) and it's a hack.

And _purely_ a labor of love! Slides: [http://mrluc.github.io/hammy/12-7-rum- macros/deck.html#1](http://mrluc.github.io/hammy/12-7-rum-macros/deck.html#1) Code: [http://mrluc.github.io/macros.coffee/docs/macros.html](http://mrluc.github.io/macros.coffee/docs/macros.html)

I wanted to see how easily I could add (non-hygenic) macros to CoffeeScript, and if I could do it as an npm-installable module instead of a fork of the language.

It was also an experiment in making macros very clear to myself. Non-hygenic (CL-style) macros are very simple conceptually.

But the basic hack that made it possible to get true CL-style macros also makes the whole thing incredibly dependent on the structure of the CoffeeScript AST. Which makes it _fragile_.

I'm excited by BlackCoffee, actually. This is the first I've heard of it. Thanks a lot for giving me a nod in the github PR, and of course let's mention Oran Looney as well, who wrote the best deepcopy ever for Javascript (I wrapped this up as owl-deepcopy and made an npm module for it).

</comment></comment></comment><comment><USER15> JavaScript compilers aren't only for syntax sugar. Closure Compiler, Dart2JS, and GWT are _optimizing_ compilers. Most large Google applications for example would be hideously large without an optimizing compiler.

<comment><AUTHOR> Definitely. It was a terse statement for simplicity. I was hoping that my sentence "it's not good for extending javascript" clarified that.

</comment></comment><comment><USER16> This is basically just saying "Choose Sweet.js in combination with some unknown array of macro libraries as your only language that compiles to JavaScript."

But because the article doesn't really frame it this way, it doesn't really explain to me why I would choose Sweet.js over ClojureScript or Scala.js or Black Coffee or whatever.

</comment><comment><USER17> I barely trust Guy Steele with macros. You know who I don't trust with macros? Random JS coder dudes that haven't learned what true hardship is, when debugging a macro that is 5 levels deep and subtly changes the language because, hey, I have a macro! And having a macro means using a macro.

Language design is hard. Scheme has gotten it wrong. Over. And over. And over. They didn't get hygiene right for more than a decade. They _still_ don't have it right. But people think they can easily invent new syntax that somehow doesn't do unexpected things. Your clever macro isn't so clever when some poor son of a bitch has been beating his head on a bug all day long just to find out your macro-that-looks-like-a-function isn't evaluating all its arguments because your macro-that-looks-like-a-function is really a function-that-is-a- macro. Don't get me started on missing IF branches and undefined behavior...

</comment><comment><USER18> I would also recommend the WISP: A homoiconic JavaScript dialect with Clojure syntax, s-expressions and macros. More details at: [https://github.com/Gozala/wisp](https://github.com/Gozala/wisp)

</comment><comment><USER19> I strongly agree with everything the author writes, but I believe that sweet.js might not go far enough. For example, I am very fond of TypeScript. I'm also very fond of React's JSX. Yet, I cannot mix the two, and neither JavaScript extension could be expressed as Sweet.js macros.

</comment><comment><USER20> >>>> "What if JavaScript actually adopted macros natively so that we never even had to run the build step?"

Honestly, that's pretty damn exciting. In my book, if JavaScript did that, it would very nearly complete a "worst to almost-first" transformation as a language. Starting with its early versions and all their ugly "bad parts", and advancing all the way to one of the most exciting, expressive languages to work with.

</comment><comment><USER21> I find the title kind of ironic, given that sweet.js is still a compiler. :P

However, it is true it would be better to have one standard-ish compiler that can just execute whichever macros you throw into it.

That being said, you still run into the issue that `sync` brought up.

</comment><comment><USER22> Best way I know of using macros in JS is [https://github.com/Gozala/wisp](https://github.com/Gozala/wisp), which generates pretty readable code. If you're going to pre-process, you might as well write in a nicer language...

</comment><comment><USER23> So, after puzzling around with the macro for swap a bit, it seems like macros are like functions, except without the scoping rules, which suggests to me that we now have two kinds of functions, to keep track of in the code, each of which look identical, but behave differently. swap(a,b) looks like a function, but can interact with all the variables in the same scope (or above) as when it's called (is this the same for global functions?). Maybe I'm missing something big, but that seems dangerous when the macro is declared in another file, and I have to go figure out how it behaves.

<comment><USER24> Macros are not functions, macros are a mechanism for adding features to the language itself.

<comment><USER23> Maybe I wasn't clear. I am not saying that macros are functions. I'm saying that without seeing the implementation, both look identical, and thus could be conflated, but do not treat scope identically.

</comment></comment></comment><comment><USER25> How do you deal with naming collisions of macros from different developers? Are you considering to introduce name spaces? To me macros as well as other surprise code modification stuff seem unfeasible in teams with more than a few developers. Don't you think you risk maintainability with a huge macro apparatus?

<comment><USER26> We're working on integrating macros and modules to address this. Once it's implemented you'll be able to do something like `import { m } from "macros.js"`.

</comment></comment><comment><USER27> sweetjs was a good idea, but I've found it hard to use, or rather..it's not the using part that's hard, but writing your own macro.

sweetjs has this hygienic thing that renames identifiers. To prevent it from renaming, there are many hoops that you have to jump through to prevent it.

sweetjs introduces of a lot of new concepts. These concepts are not as easy to understand as the ones in C. The macros are certainly more powerful. It's just that assuming it's C-like macro will give you the wrong kind of expectation with sweetjs.

<comment><USER10> Of course! These aren't C "macros"; they're Lisp macros, which is a wholly different, and far more valuable and reliable, proposition.

Granted, I'm not sure how much I like the idea of a macro system which finds macro instances by string-matching the source it's given. But in a non- homoiconic language, I'm not sure anything else is feasible, and I can easily see how something like this could improve Angular.js's dependency injection, for example.

<comment><USER28> Unhygienic macros aren't a C-ism: hygiene was an innovation (I think originally in Scheme). Ordinary Common Lisp macros are unhygienic.

<comment><USER10> So are sweet.js macros, or else they wouldn't need to have reimplemented GENSYM. But I get the impression (parent (parent)) had sweet.js macros mixed up with C-style string-replacement "macros", which was what prompted my comment.

<comment><USER29> Sweet.js is hygienic but you can choose to be unhygienic if you want.

It is the best of both worlds.

[http://sweetjs.org/#getting_dirty__breaking_hygiene](http://sweetjs.org/#getting_dirty__breaking_hygiene)

</comment></comment></comment></comment></comment><comment><USER30> I'm not super into the idea of code running on code because I likes it as simple as I can gets it. But, I know this notion is popular with lispers so I get it.

<comment><USER31> Don't be fooled by a legion of old-time lispers. Macros are a last resort in real-life Lisp (aka Clojure).

Hard to write (way harder than a function), hard to debug, hard to reason about, they're not functions (so fit worse in the rest of the language)... but powerful when you _really_ need them.

"When you have a hammer...", and a desire to stand out from other languages made the lisp-macro myth flourish.

<comment><USER32> Well actually, in a modern lisp (like Racket), you use macros in a variety of ways.

In addition to "deep" things, often you use them as practical, simple alternatives to using stuff like "snippets" or heavy IDEs. You can "DRY" annoying patterns, without resorting to external tooling.

Although macros used badly can be mysterious, so can any excessive pre- processing and build magic.

Macros provide "an API for the compiler", and since the compiler is involved, it can be smarter than external tools.

<comment><USER31> Racket? I said real life! (just kidding :P)

As I said, when you _really_ need them they're useful (e.g. in typed Clojure). Most (if not all) DRY patterns can be fixed using only functions.

The problem is, the macro mantra has been parroted for so long now it's part of the Lisp culture and its external image ( _" Lisp is homoiconic! You can modify code! Macros! MACROS!"_), when it's actually one of the ugly (but powerful) parts of Lisp you should avoid most of the time. This confuses beginners and people interested in Lisp.

I see macros fitting mainly in DSLs (which is probably a code smell most of the time) and extending the language, as typed Clojure does. What other real use cases do you see for macros?

<comment><USER32> The real use cases for macros boil down to 3 main areas:

1\. Changing order of evaluation.

2\. Creating new binding forms.

3\. Implementing a data sub-language a.k.a. DSL

Although arguably #3 doesn't _require_ macros, arguably it requires macros to do _elegantly_ (Rubyists might argue not) and _reliably_ (instead of monkey- patching, using hygiene and a macro-aware module system that can handle towers/layers of such systems).

<comment><USER16> Well, 1 and 2 are the only cases where they are absolutely required, but I've seen other use cases. For example, the ClojureScript templating library Dommy uses macros to optimize selector code at compile time, which gives some impressive speedups (IIRC Prismatic found it to be twice the speed of jQuery).

</comment></comment></comment></comment></comment></comment><comment><USER33> Did you had a look at [gorillascript]([http://ckknight.github.io/gorillascript/](http://ckknight.github.io/gorillascript/))? Its [prelude]([https://github.com/ckknight/gorillascript/blob/master/src/js...](https://github.com/ckknight/gorillascript/blob/master/src/jsprelude.gs)) is written in gorilla macros :)

</comment><comment><USER34> I enjoyed the article. I just have a factual correction: Lisp had real macros as early as the 70s, not the 80s. (Maybe even earlier, for all I know.)

<comment> daniel-cussen Lisp macros were introduced in 1963 by Tim Hart at MIT.

<comment><USER35> Here's the original technical report:

ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-057.pdf

</comment></comment></comment><comment><USER36> If you need the same for Java: [https://github.com/norswap/caxap](https://github.com/norswap/caxap)

</comment><comment><USER37> Very interesting! I've often thought that Javascript could actually be a pretty language with some syntactic sugar. It'd be even more interesting if you could run it client-side without preprocessing an sjs file into js first, sort of like how you can include LESS stylesheets and load a JS module to compile them in the browser.

</comment><comment><USER38> You won't have good IDE support.

You won't be able to directly debug your code.

Also it can be really fun to reason about nested macros.

</comment><comment><USER39> You can also use C macros with Javascript [http://vpj.svbtle.com/coffeescript- and-macros-clean-and-fast](http://vpj.svbtle.com/coffeescript-and-macros- clean-and-fast)

</comment><comment><USER40> So wait, what does this have that's better than C macros apart from hygiene? I'm afraid I really don't follow.

</comment><comment><USER41> There are many reasons why people are writing *->js compilers, lack of macros isn't the least of the problems for js. Please keep the compilers coming, no productive coder really wants to write js.

<comment><USER42> The author's point is that the best way to implement Javascript sugar like CoffeeScript is by writing sweet.js macros rather than by writing compilers.

</comment></comment><comment><USER43> I think things like syntactic sugar is perfectly fine, _as long as I can desugar it in a straightforward way_. I want to be able to programmatically desugar some piece of code, not have to Google it each time I am curious.

I think that if it is easy to investiage things like syntactic sugar, and not have it be buried in something like a compiler or lang spec, then DSL/language implementers (and anyone else, if the language permits it) could get away with implementing things that objectively make the language more complex to deal with, because to decipher it is only a query away, anyway.

<comment><USER20> Right. IDE features would be needed such as Emacs features which show the expansion of the macro you're on.

</comment></comment><comment><USER44> Sup dawg, I heard you wanted to stop writing JS compilers and start using macros so here's a JS compiler that implements macros.

/head asplodes

</comment><comment><USER45> Don't tell me what to do. If I want to write a JS compiler, I can write a JS compiler, and it's nobody's business to tell me not to.

<comment><USER37> Don't post garbage on Hacker News.</comment></comment>


The Iocaine Powder Strategy in RoShamBo - <AUTHOR> https://web.archive.org/web/20160819141717id_/http://www.ofb.net/~egnor/iocaine.html <comment><USER2> There was an amusing comment related to this over on the Metafilter thread on this earlier today which included this impressive detail:

 _Naturally, we did what any self-respecting half-in-the-bag Americans would do upon meeting so-called champions of the rock-paper-scissors arena on the streets of a foreign nation, and challenged them to a duel on the spot. We proceeded to go a spectacular 0-24 against our fellow countrymen, before realizing that maybe there 's more to the metagame than we had previously considered._

[https://www.metafilter.com/181225/Iocaine- Powder#7714208](https://www.metafilter.com/181225/Iocaine-Powder#7714208)

Any competitive RoShamBo players here willing to share their metagame strategies?

<comment><USER3> >Any competitive RoShamBo players here willing to share their metagame strategies?

Never go in against a Sicilian when death is on the line.

<comment><USER4> I came here to say this

<comment><USER3> Ha Ha! You fool, you fell victim to one of the classic blunders...

</comment></comment></comment></comment><comment><USER5> An excuse to post my favorite RoShamBo scene ever: [https://vimeo.com/210145683](https://vimeo.com/210145683) , from the show Patriot. (There's a lot of context that's missing but it's hopeless for me to try to explain it. I highly recommend the show.)

<comment><USER6> I guess this shows my ignorance, I had no idea rock paper scissors was called this. I only knew of the South Park version [http://southpark.cc.com/clips/103724/rochambeau](http://southpark.cc.com/clips/103724/rochambeau)

<comment><USER7> I was trying to think how iocaine powder would help in this scenario when I clicked in. Shows how our vernacular was shaped a bit though.

</comment></comment></comment><comment><USER8> I understand this meta-strategy on an intellectual level, but I'd find it easier to fully understand with a concrete example or an interactive example. It mentions that this meta-strategy only works if your opponent's strategy is consistent. I'd like an interactive version to play with to show that. Also, I'm curious how this strategy fairs against itself.

The only winning move is not to play. ;-)

<comment><USER8> Kudos to the submitter. It got me to watch WarGames again. (Even though tic- tac-toe is the metaphor used in the movie, not rock-paper-scissors.)

</comment></comment><comment><USER8> Perhaps the title should include (2016) as that is when this archive snapshot is from. It's unclear when the page was originally created.

<comment><USER9> A cursory Google search for the title of the paper points to around 2000

</comment></comment><comment><USER10> Ok, but what if your opponent also uses the Iocane Powder Strategy? Just the assumption they can puts you back at square one.

"You are using the Iocane Powder Stragety against me."

"I found it appropriate considering the terrain."

</comment><comment><USER11> The actual contest sounds really fun, does anyone know where can I find more of this "competitive" programming?

<comment><USER12> Another one I know of is Core War: [https://en.wikipedia.org/wiki/Core_War](https://en.wikipedia.org/wiki/Core_War)

</comment></comment><comment><USER13>
        > History matching: This is easily the strongest predictor in Iocaine Powder's arsenal,
        > In fact, it looks for the longest match to recent history; a repeat of the
        > last 30 moves is considered better than just the last 3 moves.

So LZW is a way to win at roshambo.</comment>


Making an app promo video: Lessons learned by an indie dev - <AUTHOR> http://welcome.totheinter.net/2014/12/02/building-the-promo-video-for-loose-leaf/

<comment><USER2> A rough breakdown of costs would be really helpful. Just basic ballpark numbers would help some of us who are on the fence about hiring a professional to do a video promo.

<comment><AUTHOR> I ended up spending around ~10k. With a 1 location shoot, it could've been closer to 4k or 5k. My advice would be to decide on a budget before you look for a professional, it'll help them give the best advice on what you can/can't do w/ that much $$.

</comment></comment><comment><USER3> Cool commercial.. is this app being marketed to real estate professionals, do it yourself home buyers or handy man types?</comment>


We're Better At Design, And That's Not Good - <AUTHOR> http://clayallsopp.com/posts/better-at-design <comment><USER2> The whole argument here seems broken. The OPs main point seems to be:

"So what's wrong with [good design]? The problem is we judge books by their covers. We're more likely to pick the prettiest object up first."

Why would you value a shortcut for assessing quality more than an actual improvement in quality? The fact that design is better is a huge all around win for everyone. Does it make every product good? Of course not, but so what?

Not too long ago, you could perhaps have measured the quality of a house by the question: 'does it have running water?'. If the answer was yes, you could assume someone put a lot of effort into the house, and that everything else about it was likely to be better too. Today, all houses have running water. Is that a bad thing? That would be an absurd claim to make. The fact that all houses (even the relatively bad ones) have running water is a huge win.

The point is that running water makes any house better, and good design makes any product better. Claiming that better design is a problem is not something I can make any sense of.

<comment><USER3> >Why would you value a shortcut for assessing quality more than an actual improvement in quality? The fact that design is better is a huge all around win for everyone.

I don't think that's the interesting point. The problem is that the focus on design means that developers spend too much effort on design and not enough on quality. We build tools to make _design_ easier rather than making _quality_ easier for developers, result in a market full of worse software that only appears better on first impression.

In some sense it's an evolutionary necessity: When people make choices based on eye candy, suppliers who provide better eye candy make more sales, and the rational supplier then spends more effort making better eye candy and some of that effort comes out of what could have made a better product in other ways.

But in theory, if there was a way to throw a wrench into that dynamic -- a better, faster, easier way for users to evaluate overall quality rather than relying on superficial aspects of design quality -- then we should welcome it (or work to create it, if you're so inclined).

<comment><USER2> The article clearly laments the fact that you can't use design anymore as a quick quality shortcut, and that's the point I attacked.

Your point seems to be:

"The problem is that the focus on design means that developers spend too much effort on design and not enough on quality. We build tools to make design easier rather than making quality easier for developers..."

To that I would say, design is one aspect of quality, and spending effort on it is spending effort on quality. What would it mean to make quality easier for developers, beyond making better tools for design, development, testing, market validation, support, and so forth? All of these tools exist and new tools are consistently released.

In fact, I think the surge in attention to design can largely be seen as a 'catching up effect'. For many years, all the other kids in the party got a lot of attention, now design is getting attention as well, but I'm not at all sure it's getting disproportionate attention.

Finally, new shortcuts for assessing quality always exist, and they're almost by definition at the cutting edge of their field. Maybe that's not 'pretty looks' anymore, and that's ok. Other areas of rare craftsmanship are still alive and kicking - communication quality is a good example. Lousy copy on pretty pixels abound.

<comment><USER3> >design is one aspect of quality, and spending effort on it is spending effort on quality.

I don't mean to say that making something beautiful is not worth doing, but rather that other things are important too.

>What would it mean to make quality easier for developers, beyond making better tools for design, development, testing, market validation, support, and so forth? All of these tools exist and new tools are consistently released.

That's pretty much what I mean. And sure, they exist, but it's a trade off. If we spend more effort on improving UX tools, we spend less time improving other tools, because there are finite resources. The key is to find the right balance, and the argument can be made that the pendulum is now swinging too far toward superficial design considerations as a result of that being (over-)used by users in choosing between products. But certainly reasonable people can disagree.

<comment><USER2> I understand. Generally, we should aim to build tools that address the greatest gaps in quality. You might say that design is currently not the most important gap to address, and that may be, although it hasn't been my experience. Although design has been getting a lot of attention in recent years, the tools for design are still very much in their infancy.

If you contrast the availability of design tools to say, development tools, I'm pretty sure you'll agree there's a huge gap there. I grant that there has been a recent surge in UX/sketching tools, but so many areas of design are still left untouched. Recently, for example, I was very excited by discovering <http://macrabbit.com/slicy/> and <http://iconfactory.com/software/xscope> \- both solve problems many designers have, and they both make my designer life so much easier.

Perhaps to return to your original point - the world is full of people who follow trends blindly. I run an app development company, and if I had a nickel for every time someone asked me to build an app that no one needs, well, you know the end of that saying. Still, if you're going to follow trends without good thinking, 'invest in design' is by far not the worst you could follow.

<comment><USER3> I think it turns on the distinction a lot of people have been pointing out between design as the superficial appearance of the app in the first fifteen minutes of use, and design as something that goes deep into the stack and brings everything together into something beautiful.

What you're talking about is more like the second kind, and I agree that the tools to do _that_ are sorely lacking.

The problem as I see it is that the world has been building tools that allow a college freshman to build a superficially professional-looking app in a month (which often turns out to be unusable crap upon close inspection), rather than tools that allow a team of seasoned professionals to build something awe- inspiring in six months instead of two years. Because the current market allows you to get your dollar from millions of suckers selling the superficially pretty junk before they realize what they paid for.

To extend the development tools analogy, it's the UX equivalent of having loosed Visual Basic onto the world and thousands of noobs are happily churning out Visual Basic software, when what we really need is the C family and its toolchain. So the hope is that the incentives can be to produce _that_ rather than just iterating onto the next version of UX VB.

<comment><USER2> Perhaps you're right, but I haven't come across much superficially pretty junk. Any high profile examples come to mind?

<comment><USER3> Most of Zynga's products come to mind. Mindless crap designed to be attractive and psychologically addictive without teaching the user anything or providing any intellectual stimulation.

I wouldn't expect many high profile examples though. By its nature junk tends to have a short shelf-life, last years junk just gets replaced with this year's junk.

<comment><USER2> I'm still not sure there's a real pattern here, beyond the always present 'make a quick buck' style of business, which has probably been around since business was discovered. Good discussion though. Thanks. You on twitter?

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER4> This reminds me of a an interview with Charles Eames. Eames was an industrial designer who is well known for his furniture. Even if you don't know his name his work will be familiar.

      Q: Does design imply the idea of products that are necessarily useful?
      Eames: Yes— even though the use might be surely subtle.

      Q: It is able to cooperate in the creation of works reserved solely for pleasure?
      Eames: Who would say that pleasure is not useful?

The point is—and perhaps I'm astronauting a bit—beauty is functional in it's own right. There has been some exploration into the relation between aesthetics and usability[1] that supports the intuitive notion that something visually attractive will be perceived as easier to use.

I disagree with the author's conclusion where he says that you should "make sure your product doesn't look terrible and move on". An investment in good visual design provides tremendous value which is not very evident at first sight.

[1] <http://www.sigchi.org/chi97/proceedings/paper/nt.htm>

<comment><USER5> _The point is—and perhaps I'm astronauting a bit—beauty is functional in it's own right._

That's different from what Eames said, at least in this quote. He said, "Who would say that pleasure is not useful?" Pleasure and beauty are not the same thing. If he limited himself to beauty, he could have designed beautiful, uncomfortable chairs, but that would have resulted in a great deal of resentment from (most) people who had to sit on them. When an object's functionality falls far short of its beauty, the user feels that his or her needs are taken to be superfluous given the beauty of the object. These "narcissistic" objects are nice to have around at first, thanks to the enjoyment of their beauty, but eventually you hate them as much as you would hate a person who felt entitled to be a jerk because of their physical beauty.

In any product, a web site as much as a chair, discomfort combined with beauty is a stick in the eye, because you can tell from the beauty that considerable work went into the design. An ugly, uncomfortable chair is just a bad chair. A beautiful, uncomfortable chair is the result of someone very, very good investing a lot of time, which _could_ have resulted in a comfortable chair, except they didn't give a damn about you or your comfort; they just wanted "their" chair to be beautiful.

<comment><USER4> Yes, many uncomfortable objects are designed as statements of form (the Reitveild Chair or the Juicy Salif).But I consider these examples of art, not design. The main use of a chair is sitting down, and thus a well designed chair will always be comfortable. This, of course, doesn't preclude it from being beautiful, as in Eames own work: <http://www.visualphotos.com/photo/2x3218172/.jpg>

<comment><USER5> In this context, I can't help hating the story of the Rietveld chair. As I understand it, Rietveld intended to design furniture that would be widely popular and enjoyed, and the simple design of his chair was influenced by his anticipation of mass production. If you look at the chair and see a reflection of his delusion about or indifference to the experience of the masses of ordinary people he hoped would sit in it, it doesn't look so good. Yet it became famous because it had value when viewed as art. The story of a designer who created an uncomfortable chair that none of his intended users wanted, yet it (and he) ended up being famous design icons... that isn't the story I want designers to think about as they work on a product I will end up using ;-)

</comment></comment></comment></comment><comment><USER6> We're better at making things look good. That is not design.

<comment><USER7> Taking another step from there: are we getting better at making things look good, or are libraries, display technology, and computing power reducing previously-imposed artificial difficulties to making things look good?

</comment></comment><comment><USER7> > I know someone might shout, "No! The important part isn't

> the visuals, it's all about the interactions and the core

> product!" And that's exactly right; but to get a feel for

> those deeper aspects you need to spend time with it, and we

> usually don't have that time.

So if we judge by looks, and the gap between how good products look these days is less pronounced, isn't that good? If the gap was bigger then an otherwise- terrible, but pretty, product could gain a much bigger advantage more easily.

<comment><USER8> Exactly. The hidden premise of the article is that in the past it was (mostly or solely) good products that had good looks, something which just is not true.

</comment></comment><comment><USER9> It's funny. I think that as a software developer I was disabused of the notion that visual appeal is an indicator of quality a long time ago. Software looks entirely different on the inside. A nice visual facade can front frightening internals and vice versa.

</comment><comment><USER10> Great visual design will get your attention, entice you to give something a try, but it sure won't make you use it forever. The product and the user experience still has to be designed well enough to make you want to use something. If the whole package works well, then who is to say you are not using the best product?

You are right in that startups, for example, should build something useful in order to validate the concept, and useful does not always have to be great looking. But in today's world when everyone is competing on design, you would be doing your product a disservice by not investing sufficient time and money in creating a stunning product.

</comment><comment><USER11> It used to be the opposite. You could tell which was the "better" product by choosing the one with the worst appearance. The train of thought went something like, assuming the companies paid the similar amount to develop the products and the design and engineering cost a significant amount of money, then the company that didn't put the money in design put it in engineering. So uglier products were better engineered, prettier products were crap. Lenovo/IBM laptops are one of my favorite surviving examples of this phenomenon.

<comment><USER12> " _Lenovo/IBM laptops are one of my favorite surviving examples of this phenomenon._ "

That is a bit harsh!

"Sapper proposed a design inspired by the Shōkadō bentō, a traditional black- lacquered Japanese lunch box."

<http://en.wikipedia.org/wiki/ThinkPad#Industrial_design>

</comment></comment><comment><USER13> I understand what he's trying to get at, but it's a moot point. Also the article painfully contradicts itself..

> We're more likely to pick the prettiest object up first.

...

> Just make sure your product doesn't look terrible, and then move on.

So if you follow that advice, according to the article you might lose out on customers because they'll be going for the prettier product instead of yours. Which probably _is_ true, so in fact everyone should always be trying to make the absolute best design they can. I fail to see how average design would ever be a good business decision.

</comment><comment><USER14> I'm a designer and I don't really understand this article. Should design be bad so we can judge the crap from the good?

It assumes that glossy buttons will keep people in a piece of software that's awful or hard to use. As kirillzubovsky said below, it will entice but not keep you in forever. People will simply move on.

I look to Dribbble for inspiration and I'm continuously learning and trying to improve by looking at the best work on the site.

The thing is someone who is great at visual design also has a great awareness of UX, they just don't define themselves in the same way UX'ers do. The guys and gals designing this stuff are interface designers, they don't just put things in places without thought. So you got stung but a app that looked beautiful in the screenshots, did you read the description and reviews?

What this article doesn't do is list some examples of products with amazing designs but poor user experience.

I think it's easier to find a poorly designed site with bad ux then it is to find a amazing one.

Right now it's a great time to be a designer - interface design is finally becoming important and is seen as a key differentiator. More time, effort and money is spend on UI/UX and this benefits everyone.

Do you know what the real frightening thing is? That so many designers are improving so quickly. Before Dribbble it wasn't really that easy to find them but now talented people so easily accessible. Want someone who's great at shopping cart design? Type in the search term, click on profile, click on the 'hire me' button.

Keeping up is the scary part

</comment><comment><USER15> "We could be looking at a dangerous, privacy-invasive service and still have some trust because it's wrapped in lickable buttons and subtle gradients. "

Since when did the design of a product ever say anything about privacy- invasiveness? If anything the correlation seems backwards to what he's suggesting; many of the companies who "got" good design early on and are best known for good design are the ones I trust the least when it comes to privacy.

<comment><USER16> It's the same reason old banks look so nice (and expensive): someone who has obviously invested in appearance is sending signals that they're sticking around for a while, which implies they won't take your money and run. I think it was Tim Hartford who wrote about this in a book, but I can't find the reference now.

</comment></comment><comment><USER17> The upside is that a poor product with an entrenched position does not automatically win just because its backers could afford polished design

<comment><USER18> The notion that something is 'entrenched' would indicate it 'won' something already, no?

<comment><USER3> The battle is not the war. You can be entrenched because you started 20+ years ago when nothing better was available and haven't improved since, but when new competition springs up to replace your anachronistic dung, you've got a whole new fight for the future on your hands.

</comment></comment></comment><comment><USER19> I think the OP is underestimating the sheer speed at which our expectations for design/functionality have been going up. A good looking static page is really a problem of the past at this point. We're moving much faster into the realm of high standards for more innovative UI/data presentation.

Just take the IOS Youtube app for example. It's simple as shit, looks rather good, and it has a solid UI/UX to switch to fullscreen, scroll through comments, etc. It's not groundbreaking stuff, but it's a notch above.

If we use Google apps as a baseline, then it's fair to say the threshold for what's acceptable is moving up, fast. The Youtube app is more or less just presenting info as basic lists, with image thumbnails. Is that the best way to represent a playlist, comments? Maybe it is, but we're just at the beginning of exploring how to fully present information, create an experience, all of which needs to look and feel good. If you stop at 'it looks good enough', you're going to get outpaced.

</comment><comment><USER20> Funny, this exact same thing happened to music. You used to be able to listen to a band's demo CD and immediately tell if they were any good by listening to the drummer, because a good drummer wouldn't play with a crappy group. Now with drum loops and better recording technology, even a crummy group could (on the surface) make a good-sounding demo. The underlying talent may or may not be good, but as the article says, it just takes more time to figure that out.

</comment><comment><USER21> This is retarded. We aren't better at "design". We are for the most part just as ignorant of its true nature. What we are good at as humans is mimicry of what we can sense, and thats what passes as good design these days.

Design starts at the most abstract level of creation with intent.

What is your intent, and what do gradients and lickable buttons have to do with it?

</comment><comment><USER22> I think the original article sort of falls short of making its point. No one ever designed their way to global domination. The market buys the entire package, not just the gloss. Pretty stuff that doesn't work well doesn't meet with success, its that simple. Design is just one piece of the puzzle.

</comment><comment><USER23> As a visual person I'm fine with this. I would gladly trade a little bit of insight for a better living environment. Think if someone where to say "There are too many beautiful women in this world, we can't accurately judge their personalities"

<comment><USER3> >Think if someone where to say "There are too many beautiful women in this world, we can't accurately judge their personalities"

I don't think that's the right analogy. It's more like saying "there are too many women who spend too much effort on makeup and plastic surgery and not enough effort cultivating their personalities." The problem is not that too much pretty is bad, the problem is that there is a trade off between pretty and other valuable things, and it's bad if pretty is the only thing that matters.

<comment><USER23> I, could, agree with that. I must have misinterpreted the article; I read it as good design has become the new baseline, so it can no longer be used as an indicator of quality.

<comment><USER3> I read it as the same thing, if you take design to mean superficial design rather than design as a stand in for overall quality or long-term useability. (Because it's pretty clearly not even true otherwise, since obviously not all current products have good "design" in the second sense after deeper inspection.)

</comment></comment></comment></comment><comment><USER24> The advent of Twitter Bootstrap is 19 years overdue. To have a common framework for UI and UX finally that's widely adopted, I should hope people would learn their lessons now and build a more standard interface for their sites as these lessons were already learned on the desktop the hard way.

There is a reason every GUI OS has standard components (windows, buttons, menus, etc). The web badly needs this to let the user focus on the interaction and the app and to allow them to pick up and learn any app easily.

There will be some exceptions, but ideally, we should take a cue from what people worked very hard over the years to built knowing it was the right paradigm (rather than the DOS app whatever goes or game interfaces which are a good example of the exception to the rule).

Mac OS and OS X, Windows, X-Windows (Motif, QT, GTK, etc.), OS2, et al.

The fanciness of sites is indeed, usually a detriment to usability and a detriment to their development, adding useless eye candy rather than useful functionality.</comment>


Bridging the Gap Between Programming Languages and Hardware Weak Memory Models - <AUTHOR> https://arxiv.org/abs/1807.07892 <comment><USER2> Could someone provide a non-academic summary of what this means? I am a programmer but not a computer scientist...

<comment><USER3> The simplest way to think about memory is as a place where one executed instruction might write a value into a slot, and the next be able to read it.

In practice, things are more complicated. The next instruction might be from a different process, executing on a different (hyper)core. Or the next instruction executed might not be the next instruction in the program, because the CPU may be performing out-of-order execution. The CPU will have several layers of cache as well, and cache coherency protocols aren't always engaged.

In a language like C, you can declare a variable to be volatile. When the program is compiled, this causes the compiler to emit memory barrier instructions - these barriers force the CPU to do the work to ensure some semblance of sequential memory access is restored across the two sides of the barrier. These may be implicit, in the memory semantics of the language itself, or explicit operations in the language.

However, it's not easy to be sure that the barriers that end up in compiled and executed code actually provide the memory semantics that the language specified. This is exacerbated by the different semantics of different hardware architectures, and the overall complexity of the problem space.

The paper provides a way to address this problem by introducing an intermediate memory model, which is amenable to formal verification of compiler outcomes. They map this model to a handful of popular architectures, showing that the mappings are correct (more or less, that for all possible execution flows, the observable behaviour is the same). They also map from RC++ (repaired C++11, fixing an unsound semantics in concurrent memory access) and Promise ("the promising model") to the IMM.

Assuming the proofs are correct (a non-trivial assumption in this field, unfortunately) this offers a step forward in the process of formally verifying that the output of compilers actually behaves in the way that the program should, according to the programming language's semantics. There aren't many formally verified compilers around, and those that do exist are for subsets of languages we might use, limiting their applicability.

<comment><USER4> > In a language like C, you can declare a variable to be volatile. When the > program is compiled, this causes the compiler to emit memory barrier > instructions - these barriers force the CPU to do the work to ensure some > semblance of sequential memory access is restored across the two sides of > the barrier.

That is the case in Java, but not in C (which is a source of confusion to those who learned Java first). In C, volatile only guarantees that the compiler will not use a cached value when reading from the variable, and will not omit an apparently redundant write when writing to the variable. It's mostly useless except when dealing with memory-mapped hardware devices (where reads and writes have side effects), with Unix signals on single-threaded programs (for instance, having SIGTERM set a variable read by the main loop - without volatile, the compiler might read only once), or with setjmp/longjmp.

<comment><USER5> Yes, it's useful for the problems that were around when it was invented and useless for the new problems that have arisen since.

I want my old problems back.</comment></comment></comment></comment>


Translator App for Apple Watch That Even Speaks Klingon from Star Trek - <AUTHOR> http://applewatchtranslatorapp.com/

<comment><AUTHOR> We thought you might be interested in our latest translator app for Apple Watch that even speaks Klingon from Star Trek.

We are excited to announce that Polyglot will be available on the App Store on April 24th: [http://applewatchtranslatorapp.com/](http://applewatchtranslatorapp.com/)

The app translates back and forth between more than 50 languages. All just by using voice.</comment>


I just lost my fifth job in six years - <AUTHOR> I've been struggling with severe clinical depression for at least seven years. I've struggled hard to keep it from impacting my work, but I still keep losing job after job.
It really seems like I can only invest half as much effort as my peers without experiencing severe burnout. I'm not talking about start-up people investing 80+ hour weeks, I'm talking about people doing 9 to 5 in big companies.
Programming is still on my short list of things I love, and I can't think of anything I'd rather try to do for a living. It's not my job that's making me depressed--I still want to shoot myself on the weekends, too. I'm really at a loss as to what to do.
Yes, I'm in therapy and on medication (not that it seems to do a lot--I've lost count of how many medications I've tried). No, I'm not about to attempt suicide, though God knows I'd like to.
Is there any kind of a career that you know of that I might still succeed in? Something where a week here and there of being stuck in I-fucking-want-to-curl-up-and-cry mode isn't a deal breaker?
As it stands, I'm broke enough that I can't afford Silicon Valley any more, and I'm getting ready to pack up and move back in with my parents until I come up with something. I have a couple lifestyle business ideas I want to try, but I don't have terribly high hopes for them. After that, all I can think of is trying some programming jobs outside the tech sector to see if they're less stressful, or abandoning tech altogether and working Taco Bell or something.
Any ideas? Help? <comment><USER3> My suggestion is to get a per hour freelance job and only take on 20 hrs per week. I found such work on odesk.com though its a crap shoot as you're having to justify value vs $2 an hour foreign workers. Still, the point stands: freelance for fewer hours per week, giving you flexibility during episodes and more personal time to work against your symptoms.

Also, exercise and cold showers can help alleviate your symptoms:

[http://www.medicaldaily.com/benefits-cold- showers-7-reasons-...](http://www.medicaldaily.com/benefits-cold- showers-7-reasons-why-taking-cool-showers-good-your-health-289524)

[http://www.webmd.com/depression/guide/exercise- depression](http://www.webmd.com/depression/guide/exercise-depression) [http://www.health.harvard.edu/mind-and-mood/exercise-and- dep...](http://www.health.harvard.edu/mind-and-mood/exercise-and-depression- report-excerpt)

</comment><comment><USER4> First, I'm genuinely sorry to hear you lost your job. I know how demoralizing that can be, especially when you add depression to the equation.

I, too, have severe clinical depression. On average, it manifests three times a year for approximately six weeks at a time. It's cost me at least one job in the past, and I know I've quit several on account of "not being able to take it anymore." I'm in the middle of an episode as we speak, trying desperately to hold down a SWE gig at a large Bay Area internet company. My fingers are crossed, as it's performance review season.

I don't have a solution to our mutual problem, but please remember you're not alone.

</comment><comment><USER5> I think my advice would be trying to find something part-time to pay the bills, and then shop around with your other time, in totally different arenas.

Try working on a farm, try fixing cars (maybe some you bought yourself), try buying & selling on craigslist, whatever floats your boat. I'd lean towards jobs that put you outside and aren't totally miserable.

Anyway, you might find you'd rather do something else, and scratch your programming itch part time, or with a lifestyle business project, or whatever.

FWIW I'm feeling & often performing similarly (without depression), and I have plans to do more-or-less what I've outlined here. I've bought a property in a fairly remote location (but with internet) and I'm going to spend as much time as possible working on other things, outside, and getting away from this screen. I expect it to help--it has in the past.

</comment><comment><USER6> While I realize you have tried a lot of medications and are probably not feeling the energy to try more, I think you need a better psychiatrist and/or medications.

Also, knowing someone with a less-common variant of bipolar disorder which doesn't tend to cause manic episodes, I would suggest that it is possible that your diagnosis of clinical depression could be incorrect.

I am not a medical professional -- merely offering these comments as someone who has realized that it is not merely the case that people with mental illness should be able to survive them, but that they should be helped to find ways to actually suffer less -- something our society tends not to emphasize, instead telling people to find ways to work through whatever discomfort they are having.

</comment><comment><USER7> Two years ago I gave up a very promising career in IT, after 8 years in I was in place to start making over 6 figures for the first time in my life... but I wasn't happy. I had money, things, tons of friends, could easily meet women (because of those friends, & money)... and I gave it all up. I sold all of my shit, gave away a ton or donated it to charity, what ever. Got rid of all of it. Then I rolled around to a few cities finally coming to a stop in Chicago, where I took up a position as a bike courier for a local company. I haven't been as happy since I was a messenger/bartender in the 90's.

I don't know the root cause of your depression. I do know that shaking things up can really make you look deeper into yourself, & find what your happiness is.

Also, I do find that when I am more physically active I tend to be more in tune with my emotions. I ride my bike for work, & usually put in about 30-40 miles a day working. The time I spend on my bike gives me a lot of time to talk to myself, & center my thoughts/emotions.

I agree with the others that have said move away from San Fran. Of all of the cities in the world, that is the absolute last place I would want to live. The yard stick that you measure yourself with, and other measure you with is about 10 feet too long in that overly entitled cesspool.

Good luck brother!

<comment><USER3> I would love to echo that point. Living in SF is depressing because you're stuck with a hard choice:

1\. Live in a nice place or 2\. Have money to do things in your free time

If you choose 1. you sit in your nice home alone and bored if you choose 2. you have to either have the mental fortitude to deal with cramped quarters, loud smelly neighbors, the tenderloin, OR ride the train for 2-3 hours daily (live in the surrounding area).

Maybe live in portland? Seemed like a nice healthy place, albeit the weather may exacerbate your conditions.

</comment></comment><comment><USER8> I'm not aware of jobs where you can not work a week -- and keep your job.

That being said, you sound like programming is your only employment avenue. I dunno think waaaaaaay outta the box for things more Social or Outgoing. Eg, maybe look into being a social worker, a county park ranger (like a city park, not necessarily Yosemite ...). These types of jobs are either people/interaction heave (social worker) or very soothing, open environments (like parks).

Being a programmer myself, and not with a team I can understand the stress and individualness of programmer can get 1 down.

As an example my god-mothers daughter used to work for Non-Profits overseas making alot of money. She married someone and now (barely) pays for rent in SF and they both teach Yoga ..... so that's what I mean when I say think outside the box. Life is full of ups and downs, even that 1 week of ickyness doesnt sound like all-time-consuming in the great scheme of a say 1 year ...

Or look for a type of job that isn't year round, eg, oil-rig worker ... or Antartic science research outpost maintenance (eg, you can do IT in remote ass research installations and make bank for 4 months couped up in a hole) ... but then you have the rest of the year to chill.

It's the world -- it's full of options. We need only find them.

<comment><USER9> "I'm not aware of jobs where you can not work a week -- and keep your job."

There are actually jobs like this provided by compassionate caring employers. You just have to keep looking until you find one.

At my most recent position, I was out for a full week for health reasons on 3 separate occasions in a 1-year period with no problems.

</comment></comment><comment><USER10> Most of the things you need to do, to fix something like this are tangential, and have nothing to do with your job, else you would have found a job that fits you.

You didn't mention anything about your social life, or if you are married or not. If you don't have at least one of those, it is very likely you would suffer some level of depression.

Since social skills take time, here are somethings you could do: \- Go to gym \- Care for cause or somebody or something, something that takes focus away from yourself. Like raising a garden or getting a dog, or joining a meetup for like minded people doing things that matter

And slowly build a social circle for the long term.

</comment><comment><USER11> Imagine you are happy. What are you doing, where are you, who are you with?

</comment><comment><USER12> > Is there any kind of a career that you know of that I might still succeed > in? Something where a week here and there of being stuck in I-fucking-want- > to-curl-up-and-cry mode isn't a deal breaker?

Academia.

I would also add though that from reading this - read it back to yourself - maybe you don't really _love_ programming - or at least being a programmer at big corporations. Maybe you haven't yet found what you really love? It sounds like you're <40, so the good news is you still have plenty of time to find what you love.

<comment><USER13> Academia is far more cutthroat and stressful than programming. It is not even close.

Coming to industry after being in academia was like being on permanent vacation.

One thing I would recommend: Try a programming job outside the Valley, preferably somewhere where tangible goods are produced. It doesn't have to be outside the technology industry, technology companies are not limited to Internet startups. Big oil, the automotive industry, defense and aerospace, these are all industries whose primary business is the development of technology.

And even "non-technical" companies like Walmart have demonstrated a lot more technical prowess than the average trendy startup, and my guess is that the hours are very reasonable.

<comment><USER12> Of course your experience is as anecdotal as mine - I find academia much more forgiving than startup land/corporate land. It's also worth noting that academia is a broad term with many different professions encompassed within it.

</comment></comment></comment><comment><USER14> This is probably not going to be a very popular reply, but I'll say it anyway on the off-chance it'll help you: get out of the Bay Area. You don't need to live in San Francisco to be a professional software engineer. I lived there for three months, and at the end, I wanted to jump off of a fucking building. I know that many people consider it to be a great place to live (albeit expensive), but it's just not for me.

If I had to make a recommendation, I'd say go stay for a few months in Joseph, OR. It's a very small town (you can walk the entire length of it in a very short amount of time) surrounded by a lot of nature. You may remember it from a Kickstarter campaign from not too long ago: [https://www.kickstarter.com/projects/708553749/the- jennings-...](https://www.kickstarter.com/projects/708553749/the-jennings- hotel-the-hotel-that-kickstarter-buil)

In any case, you can get away from big city life, work remotely (perhaps as a contractor? If you want, email me a resume and I'll pass along any contracting gigs that fit your skillset. I don't do any work on the side anymore, so it's good to have people that I can pass work to), enjoy nature (see [http://bit.ly/1Kbk2BB](http://bit.ly/1Kbk2BB) and [http://bit.ly/1MRBTw7](http://bit.ly/1MRBTw7)), and get your depression under control. An added bonus is that it's very cheap to live in Joseph, especially compared to San Francisco: [http://www.bestplaces.net/compare- cities/joseph_or/san_franc...](http://www.bestplaces.net/compare- cities/joseph_or/san_francisco_ca/costofliving)

In terms of medical facilities, Joseph has very little. There's a psychiatrist about 1.5 hours away in La Grande, though, and being a small town, a lot of people make that trip once/wk, and they love splitting the cost with somebody that's going the same way.

It's really a different lifestyle to live in a small town where it's not socially unacceptable to strike up a conversation with somebody on the street and where helping one another is a common thing. The Bay Area was almost the exact opposite, and I could totally see why you'd be depressed living there.

<comment><USER14> Note also that there is a bus that can shuttle you back and forth between La Grande and Joseph, if you're so inclined: [http://www.neotransit.org/wallowa/wallowa-link- intercity](http://www.neotransit.org/wallowa/wallowa-link-intercity)

</comment></comment><comment><USER15> Keep working, staying focused is its own flavor of therapy. Take a leave of absence here and there and you'll be able to retain your position while you take time to recharge yourself worth.

Being a developer affords you benefits that you can't get from the service industry. If you can stomach it, work from home where you have more personal control over your time, tons of opportunity out there to do that.

Or try writing about your struggles and self publish. Keep your head up.

</comment><comment><USER16> I've suffered in a similar way for over 40 years. Like you, I tried psychologists and psychiatrists, meds and meditation, all of which had varying success. Mostly I ended up with the same black dog following me around -- sometimes father away and sometimes closer, but always there. My life is a litany of jobs I quit, never again to talk to any of my co-workers, and jobs that were ended for me; lost friends and friends never made. Sadness at missing out on what might have been, and living in fear of the bottom suddenly dropping out.

Fat and out of shape, I started swimming. It was horrible, awful, painful, miserable. I sucked at swimming. The water was cold, I hated the people I had to talk to, I got athlete's foot and ear infections. Actually going to the pool took every bit of willpower I could muster. Many days I thought "why bother? I don't want to live anymore, anyway."

But I _made_ myself go. Gritted my teeth and went. First 10 minutes a day, 3 days a week. Then 15. Then 30. Then 4 days a week. Then 60 minutes. Then 5 days a week. I never thought about it helping with my sometimes crushing depression, but I knew that my obesity was hurting my back and my heart, so I kept going.

It's been 18 months. I've lost 50 lbs of fat and gained muscle. My back is better, my blood pressure is down and can walk up the stairs without huffing and puffing.

Sure enough, I still see the black dog around every once in a while, but less often. I'm starting to enjoy my job, frustrating as it is -- something about the rhythm of getting up, going to the pool and then going to work. Now that I feel like I'm getting _good_ at swimming, it's an incentive to keep going and a virtuous circle. And the bonus is I can eat what I want without stressing about my blood pressure and my weight.

This may or may not be the approach for you, but I strongly feel that there's are 2 things at work: fitness, and becoming _good_ at something.

Make no mistake, I'm no super swimmer, but I'm good for _me_. You may think you can never be good at anything, but trust me, it's possible to get very good at something you choose to do. Patient persistence, even when it hurts, _will_ pay off.

Caveat: this is _not_ an instant cure. It takes time and effort that I know you feel you can't muster right now. Take small steps and _make_ yourself do it. Grit your teeth and get out of bed even when you feel you can't, and just go exercise, particularly doing something at which you can build skill, even if it's for only 5 or 10 minutes. It might take 6 months, it might take 2 years, but DON'T QUIT!!

You _can_ do it!

And it _will_ work.

<comment><USER17> What a great comment. I'm actually trying to learn a new skill that's intimidatingly hard for me, and I kept a link to this comment to remind myself in the hard times that it will be worth it in the end.

</comment></comment><comment><USER18> I am sorry to hear your struggle. I have friends who were depressed and I understand suicidal thoughts are in your mind.

Here are how my friends dealt with his depression: they have 1 day a week to do what they want to do alone: surf or run. I honestly do not understand depression, but accordingly to my friends, it is a moment when they do not need to give a fuck to anything, embracing into the nature really helps them to relax and the results are that they have felt less depressed and I can really tell their difference.

One thing I also noticed, is that they also consciously try to be positive. I recently read a few books about our own subconsciousness (e.g. power beyond your subconscious mind, Subliminal: How Your Unconscious Mind Rules Your Behavior, etc.) and it seems like once you "tried to be", you will start to behave the way your mind told you to. And yes, I also see my friend's attitude is changing towards life.

In terms of jobs, have you considered being a photographer/ocean researcher/forester/bloggers who broadcast how to fight your own struggle (sure you can make some $$ if you get enough subscribers)?

</comment><comment><USER19> Which of these two options do you think would work better for you?

1\. Working 4 hours a day 48 weeks a year 2\. Working 8 hours a day for a month, working only every other month?

If you answered #1 that's part-time, if you answered #2 that's freelance or contract work. Those are obviously generalizations but the exercise is still useful.

You may want to check out UpWork or www.remoteok.io for contract and part-time jobs.

I hope this helped some.

</comment><comment><USER20> Having changed 5 jobs in last 1.5 yrs, I am finally feeling a bit better ! How? I started seeing a Consultant !

One exercise he did just changed my way I saw the world. I may or may not help you but it helped me.

He listed all problems I have on the left hand side. Why I feel bad. Why I hate myself. Why I think I'm a failure etc etc. Then he wrote all good things I have. He forced me to think all good things around me. I said there is no good thing around me. He asked do you have a job. I said Yes. Well there it is. One good thing. Suddenly we came up with around 5 items.

Then he asked. Where do you think you rank among all the population of the world. I said may be 50%. But you know where we all are? May be top 5% of most privileged group. It just changed the way I saw where I was and what I did or what I had to do.

Find a good consultant. It does make difference. My previous consultant wasn't good and I really didn't believe in therapy until I met the recent Consultant.

Best of Luck Mate !

Another thing: Talk. Talking does a lot of good.

Once you change the way you think, everything else will make sense and get better.

<comment><USER21> That's a pretty good advice, I would suggest OP should take it. I have exact same problem and after doing a lot of thinking alone, (yes off time in nature somewhere peaceful helps), I figured most important thing to do is to latch on to the positive side of the things, you have to fight with yourself to think positive, It could be scary but you have to do it and believe, world is a pretty good place. And as PanJaro said, you are among 5%. What you really need is someone in your life who can tell you everyday that you are fine, there is nothing wrong with you and, what you are doing is perfectly good in terms of amount and size, there is no more requirement to do any more, just keep on truckin. What you have is already pretty Good.

One more thing that is exceptionally important is to stay away from a lot of click-bait stuff, this will always leave you sad or feeling you lack something, and negative people. Basically anything that can amplify feedback loop of negativity that you are already struggling with.

And another most important thing is. Give your mind time to sort itself out. Don't force it to think anything, just let it go a little bit. Your mind has noticed that something in your life is not right, and it is trying to figure it out, like a puzzle, that is why it is trying to take you into a cave and curl up, so it can focus all it processing power on that one thing that it is trying to straighten out and squeze the answers and conclusions for future use.

</comment></comment><comment><USER22> Great comments here. My advice would be similar to what others have said. Try working with people. Last year I was tutoring high school kids and it was a great experience. Working with stressed out kids was much less stressful than working with stressed out adults and it put everything into perspective. Any kind of work where you are interacting with people in a non-competitive environment (or compassionate environment) but also using your intellectual skills (Don't work at Taco Bell!). Try contracting rather than permanent work. Contracts have an end and you're not committing in the long term which allows you to take breaks to take care of your health between contracts. Focus your energy in maintaining a healthy lifestyle (exercise, eat healthy, get enough sleep, meditate). Do as much as possible to keep your thoughts out there (talking and writing) rather than letting your throughts eat you alive. You're not alone, good luck!

</comment><comment><USER23> I am not a professional and I am probably not qualified to be an amateur either. I suggest taking a job that you could practically do blindfolded. Maybe it's "Taco Bell" or maybe it's pushing CMS content during the "grave yard" shift. The idea is to have something you can handle with the lowest possible stress triggers as possible. Perhaps this job is part time and you augment the rest of it with welfare or disability.

With all this in mind, you code at your own pace on your own free time. Pick a subject you like and master it. Take your time and relish in all the details. Become a virtual "Stephen Hawking" in the subject. With mastery comes accomplishment, confidence and self esteem and you are doing what you love

Also, I suggest exercise, it takes care of the fight or flight stuff or makes you more apathetic towards stress. YMMV.

I hope this helps, be well!

</comment><comment><USER24> On the plus side you have been able to find that many jobs. So if you can figure out why you keep losing the jobs you should be able to get a new one and keep it. I've had the same job for 18 1/2 years and have to get a new one. I haven't searched for long enough that I feel at a disadvantage.

</comment><comment><USER25> Loving programming and loving professional software engineering are two very different things.

SWE does have a certain amount of room for up and down--any objective-based thought work job does. But if you're going to be part of an organization, at some point you need to learn how to be constantly valuable.

But that is not necessarily the same thing as being constantly productive. There are other ways to contribute value to a team and, for that matter, other ways to structure your work so that you do harder stuff while feeling more up to it. Macros, metaprogramming, other tooling, all that stuff can be very useful for packing work into your useful moments and benefitting from it later (but can be an excessive timesink too, so watch out).

Sometimes you're not up to coding but you can put together an architectural plan for the next task in line. And to be honest, if you get very good at coding you may find that your hour of high-quality work in a day is enough to keep you employed because it has as much/more impact than someone else's four hours of mediocre work. I'm not even talking 10x programmer here, just that most good code is written in jumps and spurts, maybe capped off with a "holy crap the groove" all day session or three.

But the thing is, at some point you'll have a crunch deadline that won't accommodate the fact that you're not very useful that day. And early on, you're definitely going to be leaning more on the consistency of your beginner/intermediate work than anything. And no matter what, you always have to keep relationships going with your coworkers. The social/political aspect of software engineering is a pretty big deal in most companies. It's not something you necessarily notice when things go well, but you'll sure as hell notice when it doesn't. Depression hits that _hard_.

Overall, I think you've gotten some good advice here, though I will say as someone who has dealt with similar issues in the past, freelancing will require an extra level of self-discipline to pull yourself back onto the rails after an episode. But I also think it should be on the table to do something other than software engineering for a living. It's entirely possible this is something that, for you, would be a great thing to do on the side, not so great for a paycheck.

</comment><comment><USER26> If you do move, try to go somewhere that you have a support network of close friends and family. Contract work may be your best bet.

Please try your best to seek professional help if things seem to be getting worst, or you feel like you are reaching a tipping point. And if there are people in your life you feel safe with, it may be helpful to keep them in the loop as well.

I hope feel better in the near future.

</comment><comment><USER27> Get your shit together first. Get a job, any job to rebuild your confidence. Lack of enthusiasm or bringing emotional shit to work are ways to get fired, so leave that at the door and bring a solid attitude. These jobs are practice jobs to get back in the groove, so be on the look out for promotions and better gigs. (Just don't burn any bridges because it's a small world and that next seemingly "better" job might not be better.)

Then, save up a little coin and get a reasonably economical van, crash on a friend's couch or do whatever it takes to get back in the valley because going outside leads to lost income and fewer opportunities. Follow your passion and find a way to make a decent living at it. If you really want to do technical work at a nonprofit in a certain area, by all means, do that.

Renting, consumerism and ostentatious living like eating out all the time, going for coffee and activities like that are what will bleed you dry and keep you balance-sheet poor. Live cheap and don't be brow-beaten by the fools trying to rationalize their own indebtedness by mocking others that actually have an exit plan.

Good luck, never give up.

</comment><comment><USER28> Sex is a great "cure". Do you have a girlfriend? If you don't, then try to find one. Sex with different partners could even work better, but not everyone finds it appealing to them. Forget about work, forget about programming, forget about business. Go enjoy great sex.

</comment><comment><USER29> For what it's worth, it looks to me like you are taking positive steps toward wellness. And even if I am wrong, we both know wellness won't come all at once, but will happen over time and it sounds like you've got a support network in place to back you up.

Stay strong.

</comment><comment><USER30> Did you try Ketamine to treat your depression? There is some recent studys with rather interesting results. [http://www.bbc.com/news/health-26647738](http://www.bbc.com/news/health-26647738)

</comment><comment><USER31> Concentrate on finding the right medication first, above everything else, so that it curbs your depression. Go back home, and stay with your parents until you have solved this issue. You won't hold any job until this problem is solved.

</comment><comment><USER32> You may want to try to build your own online service or product. You'll have accountability to customers which is obviously important but you'll also have more flexibility in your schedule.

</comment><comment><USER33> You may find people in a similar situation at [http://devpressed.com/](http://devpressed.com/) Good luck and never give up!

</comment><comment><USER34> Keep pushing forward until you find a place that appreciates you and your skills, and you can contribute and thrive. The best is yet to come.

</comment><comment><USER35> Well, first let's not associate your 'depression' with 'work'. Sure, work can suck. Losing jobs and running through a cycle of them in a short amount of time can be sucky, too.

I've been in sales. Looking for work is the hardest sale. If someone doesn't want your vacuum cleaner, it's the product. If they think your life insurance rates are too high, it's the product. When job hunting, YOU are the product. And 95% of the time, you have no idea why you were rejected/ignored, and the few employers that tell you why either lie (unhelpful) or tell you things about yourself that you can't easily change (you're overqualified, your job history is not stable enough, you want too much money, etc.)

So, with a lot of job searches in a short amount of time, that can add to it. And I've had a LOT of jobs in my 20+ years of employment (some lasting only three days), so I know how you feel. Like you keep getting on the same roller coaster and you didn't even want to buy a ticket.

But let's be serious about one thing. This type of work - knowledge work - <USER2> detrimental to our overall health. You can do everything else right - fitness, eating healthy, pleasant and solid relationships, be a great parent (or son/daughter), have a great spiritual life - and sitting in front of a machine, no matter how much you love programming, and you and me are slowly killing ourselves.

Some people cope better at it. I happen to think grossly overweight people who consume large amounts of caffeine and sugary drinks and eat red meat are going to drop dead one day without warning, but in the meantime, they seem to excel at coping with such a sedentary lifestyle better.

For me, and maybe you can relate, it is incredibly unpleasant, increasingly, to be associated/tied to a machine. I love people. The "app-driven, put our life on social media, program your way to ninja/ping-pong coding guru" dream that we have been sold is hollow and pointless. And we all know it.

Balance is key. Finding it is hard.

My quick suggestions for you. Let me put it this way. Don't even think too much about these. I know, I know, you're an engineer/programmer mentality and over-analysis is all you know. But for once, since you're clearly struggling here, put some trust in someone else. I have a ton of children (way more than I can count) and have found this is hugely important stuff to maintaining balance. I hope it helps you, my friend.

1\. NO devices after dark. Yeah, I don't care how crazy that sounds. You can watch TV, but no in-your-face devices, including Kindles, after dark. Shut them down. If true emergency happens, use F.lux for your laptop to keep blue- light at a minimum if you absolutely must email mom back at 10pm. Else, keep them off.

2\. Walk 3 miles every day. Every single day. Throw your car keys in a drawer and walk three miles. Two miles is your 'off/easy' day. Three minimum. No device looking while you walk, except to play music or listen to a non-tech podcast. Learn a language, listen to American Life (stories about other people's problems), something. But no checking email. Go into airplane mode while walking. Ideally, have a PURPOSE or place to go to while walking. Could be work (once you get a job) if it is the right distance. Could be the grocery store. Could be a friend's house. Just try not to walk to/fro - it gets boring quick. Treadmills don't count. It MUST be outside.

3\. Talk to one stranger every few days. About anything but tech. Don't compare phones. Ask him/her about their coffee, their outfit, the book they are reading, the car they drive, their child's funny hat... something. Get outside yourself, and reach out to others. Don't try and "collect data" on these people, even if they are cool and friendly. Don't worry about getting their email, phone, or Twitter handle. Just talk and let them stream past your life. My rule is this: if I stumble upon them a second time by pure chance (i.e. no stalking the barista girls), then maybe I try to make more of a connection, assuming the interest is mutual.

4\. Get up early. Google it. I don't have time to sell it. But do it. 5AM is NOT early. But that will be a good start.

5\. Do not work out in a gym. I don't care how much you like it. Find a ropes or fitness course and replace it with that, if you were working out. If not working out, and are in okay shape, then leave it alone. Your walking alone will be a huge help.

6\. Don't compare yourself to others. I'm sure you have amazing talents and skills. So does everyone else. Nobody cares. Quit trying to be better and reading tech books, or how-to books (if you do). Read for pleasure at least every other book. Unsubscribe to tech magazines if you get them.

7\. Along those lines, unsubscribe to as many things as you can. Interuptus Annoyance. And that means (gasp) deactivating Twitter. Promise yourself you won't reactivate (if ever) when you are Truly Happy. Might be hard at first. Same with social media. Cut out bloat. More than 50+ friends are bloat. 100+ is insanity. Log into FB and other similar sites only twice a week. Ideally, never, but I'm not going to push you to be a scrooge.

8\. If you have a loved in your life, (didn't sound like it), give them a kiss and hug everyday and tell them you love them. Maybe for now that's your parents.

I hope that helps, friend. And don't let Silicon Valley be your standard. YOU be your standards. No one laments not affording it there. It's a crazy place to live. Live where you want. Follow YOUR dreams.

</comment><comment><USER36> After struggling with a similiar problem for nearly ten years I finally bit the bullet and took 6 month "me time" last year.

Had to beg friends and family for money, but now I'm more stable than anyone else.

You need to step out of the system. Meds and therapy won't cut it.

Afterwards move to finnland. Everybody is depressive here 8 month a year, so your boss will be happy if you curl up for a week instead of killing yourself. (Even if it sounds sarcastic ... it's true!)

</comment><comment><USER37> yoga. just an hour a day.</comment>


A river for the Occupy movement - <AUTHOR> http://scripting.com/stories/2011/10/05/aLinkblogForTheOccupyMovem.html

<comment><USER2> It's nice to see projects like Twitter's Bootstrap[1] being used to help reduce the amount of time it takes to get a site and its information on the web.

[1] <http://twitter.github.com/bootstrap/>

</comment><comment><USER3> I'd just like to pop back in to say that the low quality of discussion here is exactly why politics stories should be squashed as soon as they appear.

Please, this shit has already taken over reddit, let's not have it here.

</comment><comment><USER4> A friend and I created <http://occupycalendar.org> for communicating about Occupy events.

</comment><comment><USER5> The irony of Occupy being organised on Facebook is wonderful.

Will Gap provide the t-shirts?

<comment><USER6> Occupy is about an end to corruption and getting money out of politics. There's no irony in using Facebook to organize these events... unless you believe Facebook is bribing our governments?

<comment><USER5> Occupy Wall St is about whatever anyone is holding a sign up against and speaking against and that includes large corporations that are run by billionaires.

This would include Facebook.

<comment><USER3> Also the Jews! <http://www.youtube.com/watch?v=WLSvK2eIoBs>

</comment></comment></comment></comment><comment><USER7> I didn't realize there were so many popping up all over. Its pretty amazing.

<comment><USER8> The leftist bias of academia is present all over the country, so I'm not surprised that there is a young constituency for a vague leftist protest movement in most geographic areas.

<comment><USER9> By what criteria does one delineate "leftist bias of academia" from one of the many mainstream American cultural norms?

<comment><USER5> [http://en.wikipedia.org/wiki/Higher_education_in_the_united_...](http://en.wikipedia.org/wiki/Higher_education_in_the_united_states#Political_views)

It's just like there is a substantial bias toward being a Conservative for people in the military.

</comment></comment></comment></comment><comment><USER10> I find this movement fascinating to spectate as well. I'm glad someone set up a site for it.

<comment><USER11> I find it exactly as fascinating as the Tea Party movement, which is to say silly and ignorant. I hate when political posts make it on hacker news with just enough hacker context to qualify under the site guidelines.

<comment><USER12> Friend of mine (and very successful entrepreneur, so he is not really nobody) said: the end of recession will be when you stop seeing banks renting the most expensive real-estate available (important intersections, downtown, etc.) for their offices.</comment></comment></comment>


Lytro review - <AUTHOR> http://www.theverge.com/2012/2/29/2821763/lytro-review

<comment><USER3> Great comprehensive review. Just as I thought when I first heard of Lytro - <USER2> falls into the 'cool but useless for now' category', we have to wait till the technology is used in a better tool.

Only the summary bothers me a bit: 7.5 points when image quality is crap. Reminds me of this <http://xkcd.com/937/>

</comment><comment><USER4> I wish it had a way to trigger a flash, even if it's a separate unit. Without that it's basically useless in bad light.</comment>


Ask HN: How can a Software Engineer/Developer/Programmer attain fame? - <AUTHOR> At the risk of seeming vain, I ask this question.<p>There are so many great programmers & teams out there working on great things like Browsers, Distributed Systems, Operating Systems, Cloud etc., it seems I as an engineer stands hardly any chance to fame.  What can set me apart to attain fame and glory? <comment><USER2> Write a compelling application that is significantly better than what is already available. People complain that the GIMP is not as good as Photoshop, and that Libre Office is okay, but Word and Excel are better. If you were to write (or contribute to) alternative apps and make them superior to the established leaders, that would be a start.

Look at Fabrice Bellard's body of work at bellard.org. He wrote QEMU, FFMPEG and TCC, applications that are in wide use today (the first two, anyway), and he's a hero to many of us.

Or, simply write a compelling game like Minecraft or Pokemon Go.

(For extra credit, write it in a language that deserves more attention, like Scheme or Oberon-07.)

</comment><comment><USER3> Be a founder.</comment>