New Rust hash table leads Benchmarks Game - <AUTHOR> http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=knucleotide <comment><USER2> In other Rust/benchmarksgame news, I just submitted a simple fix to the Rust program for "reverse-complement" that makes it faster than the fastest C++ program, on my computer. The old version was spending 2/3 of its time just reading the input into memory, because it wasn't allocating a large enough buffer up front.

[https://github.com/TeXitoi/benchmarksgame- rs/pull/44](https://github.com/TeXitoi/benchmarksgame-rs/pull/44)

I'm also working on some additional changes that make it even faster than the C version (again, on my computer) by improving how it divides work across CPUs:

[https://github.com/TeXitoi/benchmarksgame- rs/pull/46](https://github.com/TeXitoi/benchmarksgame-rs/pull/46)

These improved Rust programs have not yet been added to the benchmarksgame site. Previous entries are ranked at:

[http://benchmarksgame.alioth.debian.org/u64q/performance.php...](http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=revcomp)

Minor improvements to the Rust programs for "mandelbrot" and "binary-trees" are also awaiting review!

<comment><USER3> Thanks!

I like Rust for what it does in advancing the state of the art of the languages, but I also like how this example demonstrates how hard it is to avoid "unsafe" constructs and remain competitive.

[https://github.com/TeXitoi/benchmarksgame- rs/blob/master/src...](https://github.com/TeXitoi/benchmarksgame- rs/blob/master/src/reverse_complement.rs)

<comment><USER2> For what it's worth, this alternate implementation has only one line of unsafe code (a call to the libc "memchr" function) and is only 9% slower than the fastest unsafe version:

[https://github.com/mbrubeck/benchmarksgame- rs/blob/reverse_c...](https://github.com/mbrubeck/benchmarksgame- rs/blob/reverse_complement_bytes/src/reverse_complement.rs)

It's very easy to write extremely fast safe Rust code. (The safe Rust version above is faster than the fastest C++ submission, on my computer.) Using "unsafe" for optimization is usually only helpful to get a few extra percent speedup in an inner loop. If this were production code rather than the benchmarks game, I'd probably ship the safe version.

<comment><USER4> _> one line of unsafe code (a call to the libc "memchr" function)_

Is burntsushi's Rust implementation of memchr notably slower than libc's?

<comment><USER5> The rust-memchr crate uses libc's memchr if it's available and known to be fast. Otherwise, it falls back to a pure Rust implementation (written by bluss, not me).

I expect this to change once we get SIMD. ;-)

</comment></comment></comment></comment></comment><comment><USER6> Previously std::collections::HashMap was used with the default hash function --

[46.03 secs] [http://benchmarksgame.alioth.debian.org/u64q/program.php?tes...](http://benchmarksgame.alioth.debian.org/u64q/program.php?test=knucleotide&lang=rust&id=1))

and then the hash function was changed to FnvHasher --

[17.10 secs] [http://benchmarksgame.alioth.debian.org/u64q/program.php?tes...](http://benchmarksgame.alioth.debian.org/u64q/program.php?test=knucleotide&lang=rust&id=2)

and then better use of quad core with futures_cpupool --

[9.44 secs] [http://benchmarksgame.alioth.debian.org/u64q/program.php?tes...](http://benchmarksgame.alioth.debian.org/u64q/program.php?test=knucleotide&lang=rust&id=3)

and now use of std::collections::HashMap has been replaced with an experimental hash table inspired by Python 3.6's new dict implementation --

[5.30 secs] [http://benchmarksgame.alioth.debian.org/u64q/program.php?tes...](http://benchmarksgame.alioth.debian.org/u64q/program.php?test=knucleotide&lang=rust&id=4)

 _afaict_ comparing #4 to #5 is all about differences between that experimental hash table and std::collections::HashMap --

[9.14 secs] [http://benchmarksgame.alioth.debian.org/u64q/program.php?tes...](http://benchmarksgame.alioth.debian.org/u64q/program.php?test=knucleotide&lang=rust&id=5)

<comment><USER7> > experimental hash table

When discussing whether or not to use this at least someone mentioned that there company was using it in production. I don't think it really counts as experimental.

<comment><USER5> "experimental" is descriptive, not prescriptive:

> Experimental hash table implementation in just Rust (stable, no unsafe > code).

[https://github.com/bluss/ordermap](https://github.com/bluss/ordermap)

</comment></comment></comment><comment><USER8> Java is showing quite impressive numbers! 50% overhead over native C implementations was often cited as a good guess for the ultimate efficiency of JIT code generation back in the _Self_ Hotspot days.

People who were trying to castigate Go early on as having "Java-like speeds" were really just showing their ignorance of the state of the art of JIT compilation for managed languages and the JVM. Such outdated folk knowledge of performance in the programming field seems to be a constant over the decades. (Programmers have had such distorted views since the mid 80's at least.) Maybe this kind of knowledge needs to be a used in job interview questions for awhile? Very soon, people will just memorize such trivia for interviews, but it would serve to squash this form of folk programming "alternative fact."

<comment><USER9> HotSpot has had great speeds for numeric computation at least since 2005. I was doing financial software in Java in my first job out of college, our CTO was an ex-Sun architect who literally wrote the book on Java, and the speeds we got on numerical computations were basically equivalent to C.

The part where Java really falls down is in memory use & management, which you can see on the binary-tree & mandelbrot benchmarks, where it's roughly 4x slower than C. There are inherent penalties to pointer chasing that you can't get around. While HotSpot is often (amazingly) smart enough to inline & stack- allocate small private structs, typical Java coding style relies on complex object graphs. In C++ or Rust these would all have well-defined object ownership and be contained within a single block of memory, so access is just "add a constant to this pointer, and load". In Java, you often need to trace a graph of pointers 4-5 levels deep, each of which may cause a cache miss.

Rule of thumb while I was at Google was to figure on real-world Java being about 2-3x slower than real-world C++.

<comment><USER10> > The part where Java really falls down is in memory use & management, which > you can see on the binary-tree & mandelbrot benchmarks, where it's roughly > 4x slower than C.

binary-tree is not useful for comparing GCed and non-GCed languages. For non- GCed languages, you are allowed to use a memory pool of your choice (the C version uses the Apache Portable Runtime library), for GCed languages you are required to use the standard GC with the default settings (no adjustment of GC parameters permitted). This is apples and oranges.

For mandelbrot, the C version uses handcoded SIMD intrinsics. I.e. it's not even portable to non-x86 processors.

<comment><USER11> > For non-GCed languages, you are allowed to use a memory pool of your choice > (the C version uses the Apache Portable Runtime library), for GCed languages > you are required to use the standard GC with the default settings (no > adjustment of GC parameters permitted). This is apples and oranges.

Doesn't that match with how a library would be used in the real world? A c library can create it's own memory pool but a GC one has to live with however it's host is configured.

<comment><USER10> If I were to run a performance-critical application, I'd definitely tune the GC accordingly. It's why the JVM offers several garbage collectors in the first place, for example.

Also, GCed languages aren't prevented from using memory pools, but often they are not part of their common libraries, because there's less need for them.

<comment><USER11> > If I were to run a performance-critical application, I'd definitely tune the > GC accordingly.

But you have to tune it for the performance of the whole application (AFAIK), you can't tune it for an individual algorithm like you can with c. It's a one size fits all approach.

<comment><USER10> 1\. That goes towards the other point that I made [1] about how microbenchmarks have only limited relevance for the performance of large applications (the performance of memory pools can also change as a result; as an extreme case, multiple large memory pools can lead to swapping).

2\. Many GCs allow you to tune performance for individual computations. For example, Erlang allows you to basically start a new lightweight process with a heap large enough so that collection isn't needed and to throw it away at the end; OCaml's GC parameters can be changed while the program is running.

[1] [https://news.ycombinator.com/item?id=13747876](https://news.ycombinator.com/item?id=13747876)

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> It seems to me that there are a lot of apples-to-oranges comparisons here? Some implementations are using the language's standard library hashtable implementation while others are using 3rd party version (with different algorithms and data structures across all of them), some are using multiple threads while others are single threaded etc. As a result, I wouldn't read too much into the rankings you see here.

<comment><USER13> And some languages are allowed to use FFI to make their impl faster. There's some rule about this that I don't understand, but oh well. It's all for fun, not serious.

But come on, now Rust can legitimately be called "faster than C" ;)

At least until the Clang C version is added... or maybe it will still be faster.

<comment><USER14> I suspect all languages without exception use some standard library functionality in at least a few of those sample programs, and most "standard" libraries aren't constrained to be self-hosting - so all of em use some native code, probably written in C or C++. I suspect that's true of rust too.

FFI is a fact of life. I can imagine it would be perverting the intent of the game if you explicitly used FFI to delegate the actual core of the benchmark program to C as opposed to using "standard" building blocks, but the distinciton is necessarily vague.

<comment><USER15> > I suspect that's true of rust too.

rustc uses LLVM and jemalloc (by default). Other than that, it is all Rust.

</comment></comment></comment></comment><comment><USER16> When SIMD goes stable rust may dominate that game. Still wish they would use clang so it was apples to apples with c and c++. Edit: actually I wish they would add clang for those languages and leave GCC for comparison. Then I'd want FORTRAN to add gfortran for the same reason.

<comment><USER17> Yeah, I think SIMD will be the next big jump for these benchmarks. I also wish we could see clang used with the C/C++ cases.

<comment><USER18> Is there any reason why we can't have a "C clang"? Or has just nobody bothered yet?

<comment><USER19> Circa 2011 the maintainer of the benchmark game decided to mostly only allow one implementation of each language[0] following pypy developers trying to get program alternatives which weren't pypy-pessimal.

[0] some languages get a bye for some reason e.g. MRI and JRuby, but no pypy, and which implementation is blessed is also arbitrary e.g. javascript is v8 but lua is lua.

<comment><USER13> 2011 didn't have as widespread Clang/LLVM usage. Now that it is so ubiquitous, probably a good time to revisit for C...

C needs to defend its reputation now!

<comment><USER20> I am saying this as someone who loved C for my entire life, when I was in college I did implement most of the assignments in C when prof said python is okay, but I did in C because I loved it and I thought I would learn more by doing them in C.

So no hard feeling involved.

There is no reputation to defend. You mean security problems everywhere ? do you mean old, broken, nasty build systems ? Do you mean not having single good package management ? The language (C/C++) is clearly intractable (parsing wise), it is 2017 and we don't have single good IDE for them (I don't use IDE at all, but I am sure you agree with me how much an IDE is important for newcomers)

If that is the case I think writing assembly would outperform C like shit, and with that logic asm is much better than C.

And to be honest, I am in job finding phase and preparing for jobs, if this wasn't my plan right now, I would abandoned C and C++ (even C++{11,14}) for Rust in heartbeat.

The language (Rust) clearly is awesome language, well designed, does have perfect build system (have you seen Cargo ? it is wonderful), flexible language design (you can write OS in rust -not having runtime- and you can write web app in Rust). I am stuck with C and C++ for now, but if my opinion counts , Rust is superior in every aspect to C/C++.

Even if Rust were slower a little bit (+/\- 10%) I wouldn't mind. Because its ecosystem is so healthy I would trade 10% of my program performance to having something as nice as Rust.

<comment><USER13> Right. The only thing C had going for it was that it was the fastest non- assembly language.

I'm biased, I want all C development halted and moved over to Rust. If C is no longer the _fastest_ , for some definition of that, then no one should be defending it at this point.

Honestly, I want the LLVM optimized C version specifically so that this last argument for C in any context will be taken off the table. I'm sure there are some people saying, "but it's not using the same compiler backend and optimizer...", I want this to counter that.

Rust all the things.

<comment><USER20> I am asking this genuinely, I always thought and heard LLVM optimizer is inferior to GCC's. Am I wrong ? is there any scientific benchmark for this ?

<comment><USER21> My understanding was that GCC was better in more scenarios most of the time, but now it seems like Clang has caught up. and Maybe Clang 4.0 is even faster in more.

Here are some recent benchmarks from phoronix: [http://www.phoronix.com/scan.php?page=article&item=gcc7-clan...](http://www.phoronix.com/scan.php?page=article&item=gcc7-clang4-jan)

<comment><USER14> Yeah. But in this kind of tuned benchmark, I doubt clang will do any better across the board - especially not considering the fact that the current programs are likely to be at least somewhat tuned specifically for gcc.

<comment><USER21> Clang does well enough to be the default compiler for Apple and Google. It can't be that far behind.

<comment><USER14> Oh yeah, I have no reason to believe it's worse; it's just that I also doubt it's going to help much either.

But... trial and error and all ;-).

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER22> Just FYI in case it happens to others: I was confused because the page I get shows Rust coming in fourth. I had to reload it/re-sort the columns a couple times to see the new Rust #4 entry.

</comment><comment><USER23> LLVM IR could squeeze out some more. I should take a crack at it. Did something similar to show DuPont why Criterion rocked.

<comment><USER24> The hash table is implemented in safe Rust (By using std's Vec). It has some inefficiencies that could maybe have been polished off using `unsafe`.

<comment><USER25> I had a quick look at it a while back, there aren't many (any?) inefficiencies there like that.

</comment></comment></comment><comment><USER26> > Some language implementations have hash tables built-in; some provide a hash > table as part of a collections library; some use a third-party hash table > library. (For example, use either khash or CK_HT for C language k-nucleotide > programs.) The hash table algorithm implemented is likely to be different in > different libraries.

> Please don't implement your own custom "hash table" \- it will not be > accepted.

> The work is to use the built-in or library hash table implementation to > accumulate count values - lookup the count for a key and update the count in > the hash table.

The C++ implementation is thereby testing an old version of a non-standard extension of libstdc++ that I had never heard of and which was likely contributed once by IBM and never really looked at again (by either maintainers _or users_ ;P), while the C implementation is testing the specified khash library, which is apparently something a number of people actively contribute to and attempt to optimize, giving it some notoriety.

If I were to do this in C++, and I wasn't allowed to use my hash table, I would almost certainly not be using __gnu_pbds::cc_hash_table<>. If I were to just want to use something "included", I would use the C++11 std::unordered_map<> (note that this code is compiled already as C++11). But we all know the STL is designed for flexibility and predictability, not performance, and the culture of C++ is "that's OK, as if you actually care about performance no off-the-shelf data structure is going to be correct". If I decided I wanted speed, I know I'd want to check out Folly, and I might even end up using khash.

Reading other comments, what happened here is the Rust version is now using some "experimental" hash table based on ongoing work to optimize the Python 3000 dict implementation. This is just not a useful benchmark. What we are benchmarking is "how maintained is the implementation's built in hash table and is it tunable for this particular workload".

That's why you should not be surprised to see Java doing so well: the code actually being written here is just some glue... your programming language has to be incompetent to do poorly at this benchmark (especially as many commenters here are using a "within a power of 2" rule of thumb). There are even multiple listings for the Java one, and the one that is faster is using it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap?!?

What we really should be asking here is: why is _any_ language doing "poorly" in this benchmark? It just isn't surprising that Rust is competitive with C/C++, nor is it surprising that Java is also; what _is_ surprising is that Swift, Go, Haskell, and C# are not, and so I bet the issue is something (such as "is allocating memory for a thing which is not required") that can be trivially fixed for each (though by the rules of engagement, it might... or might not :/ as Java "cheated", right? ;P... require a minor fix upstream).

I mean, since the "work" explicitly is not "write a hash table using nothing but primitives from this language", there is no particular reason why Perl and Python (which is using a non-destructive array .replace, which is likely _brutal_... again: I bet this is almost always a benchmark of ancillary memory allocations) should be doing as poorly as they are: if we all made "optimize for this benchmark" a top priority for a weekend hackathon, I bet we could get every open source language to nail this under 25s. But do we care?

<comment><USER6> > If I were to do this in C++ … I would use the C++11 std::unordered_map<> …

[http://benchmarksgame.alioth.debian.org/play.html#contribute](http://benchmarksgame.alioth.debian.org/play.html#contribute)

<comment><USER26> The thesis of my comment was that we should be surprised that any language does poorly on this benchmark, particularly ones that have similar kinds of targeting, and that if we cared about this benchmark (and I claim we don't), we should all pitch in, possibly _upstream_ to fix various languages and their standard libraries to nail this benchmark. However, I also believe the rules of this benchmark are awkward and even flawed, and that it isn't clear to me that it is worth anyone's time to do that.

I am not lamenting that someone should spend more time on this: I am lamenting that tons of people seem to care about it at all, it is not a "microbenchmark" (as some are calling it), and I think the main lesson we can learn from it is "there is something subtely wrong, either with the implementation that was contributed for this benchmark, the language's runtime, or it's standard library", as given these rules we really should expect every language to be similarly in performance.

And so, if we all cared about this benchmark, I bet we could figure out what is going on and get every open source language down under 25s. Past that point, I think the rules are such that this isn't even a fun game much less a useful metric of anything worth measuring, and you are probably wasting your time contributing. I guess, to make this subthread go somewhere: why do you disagree?

<comment><USER6> > it is not a "microbenchmark"

Home page -- "Will your _toy benchmark program_ be faster if you write it in a different programming language? It depends how you write it!"

[http://benchmarksgame.alioth.debian.org/](http://benchmarksgame.alioth.debian.org/)

</comment></comment></comment></comment><comment><USER27> I'm not a system programmer, but it makes me very happy to see Rust taking off, with all its potential to, hopefully, replace currently most used unsafe system languages.

</comment><comment><USER28> Is there something fishy going on with the NaiveHashMap here? What's happening?

      impl Hasher for NaiveHasher {
          fn finish(&self) -> u64 {
              self.0
          }
          fn write(&mut self, _: &[u8]) {
              unimplemented!()
          }
          fn write_u64(&mut self, i: u64) {
              self.0 = i ^ i >> 7;
          }
      }

<comment><USER29> NaiveHasher (declared as "struct NaiveHasher(u64);") is a tuple with one 64-bit field named "0". (Tuple fields are implitly named as 0, 1, 2 ...)

It implements a very simple hashing function for 64-bit numbers, each hashed number _n_ overwrites the state with _n_ xor ( _n_ >> 7). finish() will return the last written state.

This seems to work okay since the hashed structure "Code" contains exactly one 64-bit field.

I don't know if it's fishy, but it's certainly very _custom_. For a generic hashing implementation you'd at least want to mix in the previous state. I assume it was done more for brevity than performance though.

</comment></comment><comment><USER30> Cool! Is Rust's hash table open addressed?

<comment><USER31> Yes. It's open addressing, linear probing, Robin Hood hashing.

[https://doc.rust- lang.org/std/collections/struct.HashMap.htm...](https://doc.rust- lang.org/std/collections/struct.HashMap.html)

<comment><USER19> The program which reached the top of k-n does not use the standard library's hashmap, it uses ordermap: [https://github.com/bluss/ordermap](https://github.com/bluss/ordermap)

Though that's also an open addressed map.

</comment></comment></comment><comment><USER32> It is new Rust hash table from external crate.

<comment><USER33> The default hash table has better security against malicious input by using a slower hashing algorithm. Its the right default, but if you really want performance and to compete with C/C++, you have to use an algorithm that makes different tradeoffs, or you would be comparing apples to oranges.

<comment><USER34> Do the hash tables in use by the C/C++ entries use low-security hash functions? Seems like that needs evidence.

<comment><USER2> The first-place Rust program uses this very simple low-security hash function:

        impl Hasher for NaiveHasher {
            fn write_u64(&mut self, i: u64) {
                self.0 = i ^ i >> 7;
            }
        }

The second-place C program uses the exact same hash function as the Rust program, except it also truncates the result to 32 bits:

        #define CUSTOM_HASH_FUNCTION(key) (khint32_t)((key) ^ (key)>>7)

The third-place C++ program uses the identity function as its hash function:

        struct hash{
            uint64_t operator()(const T& t)const{ return t.data; }
        };

Sources:

\- Rust: [http://benchmarksgame.alioth.debian.org/u64q/program.php?tes...](http://benchmarksgame.alioth.debian.org/u64q/program.php?test=knucleotide&lang=rust&id=4)

\- C: [http://benchmarksgame.alioth.debian.org/u64q/program.php?tes...](http://benchmarksgame.alioth.debian.org/u64q/program.php?test=knucleotide&lang=gcc&id=1)

\- C++: [http://benchmarksgame.alioth.debian.org/u64q/program.php?tes...](http://benchmarksgame.alioth.debian.org/u64q/program.php?test=knucleotide&lang=gpp&id=3)

</comment></comment></comment></comment><comment><USER35> Does this have anything to do with: [https://news.ycombinator.com/item?id=13742865](https://news.ycombinator.com/item?id=13742865) ?

<comment><USER19> No. The Rust program uses [https://github.com/bluss/ordermap](https://github.com/bluss/ordermap) which is an implementation/variant[0] of Hettinger's naturally ordered hash map.

</comment></comment><comment><USER36> I'm really curious what this benchmark would be for JavaScript V8? Anyone have the time to recreate the same functionality to test in Node?

<comment><USER15> There are two "Node.js" entries on this page.

</comment></comment><comment><USER37> quite a decent perf from the ML family at around 19 seconds (F# and Ocaml). Top of the functionals, at least, twice as fast as Haskell.

Also look how ginormous the binaries are for all the VM languages. Kinda would have thought it would be the opposite what with not needing to link in as much runtime?

<comment><USER38> You could even argue that Rust is a member of the ML family seeing as the ML family of languages were major inspirations and furthermore I believe the original implementation of Rust was written in OCaml.

<comment><USER39> Before Rust was written in Rust it was indeed written in OCaml.

</comment></comment></comment><comment><USER40> Does anybody know what happened to the image charts like this one for example? [https://web.archive.org/web/20121218042116/http://shootout.a...](https://web.archive.org/web/20121218042116/http://shootout.alioth.debian.org/u64/ats.php)

This was my favourite feature of the benchmarks game.

<comment><USER6> Those charts provide an instant without-thought comparison (which can be helpful in other situations and with other data sets).

In this situation: it's helpful to slow-down, look at the source-code, think about what's being compared …

</comment></comment><comment><USER41> The rust version is using multiple cpus using a pool concept (which looks a lot like the multiprocessing module from python so kudos there). But the C version is single threaded from what I can tell. So rust is safe but threaded to be faster than single threaded C which isn't that much slower. Hmm...

<comment><USER42> That's not true. If you look at the comparisons, the cpu time taken by C is actually more than rust, and the cpu load looks about even. Note the C version uses:

        #pragma omp parallel sections

<comment><USER43> >.. and the cpu load looks about even.

318% is 20% bigger then 265%.

<comment><USER42> And 5.30s is about 20% faster than 6.46s. We're just throwing around numbers now.

My point was that the cpu load is "about even" compared to if the C version was single-threaded, in which case it would look more like 200-300% bigger cpu load instead of merely 20%.</comment></comment></comment></comment>


Learn Haskell Fast and Hard - <AUTHOR> http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/ <comment><USER2> This is a tremendous resource, but may I suggest you rather point here: [https://www.fpcomplete.com/school/haskell-fast- hard](https://www.fpcomplete.com/school/haskell-fast-hard).

It's the same course/series, but with interactivity, so Haskell can coded/evaluated from the browser. In fact, one "dir" up, you will find a bunch of similar tutorials here : [https://www.fpcomplete.com/school](https://www.fpcomplete.com/school).

<comment><USER3> I was going to say the same.. To me the Fast-and-Hard introduction made most sense off all intros I tried (pretty much every one I could find online).

Thumbs-up to FP Complete for integrating it with their tutorial suite!

<comment><USER4> Regarding the site with the turotial suite: I am not a big fan of harvesting community knowledge, input and ideas and then go commercial

On a second note, how many will use a platform like fpc's, where an external entity has immediate access to your code, for serious projects ?

<comment><USER5> I'm a big conflicted about that as well.

I think I'm ok with it as long as they have permission/cooperation from the author (a cursory glance looks like they do; could be wrong), especially since the introduction of inline code evaluation makes it so much easier to get into. I know the content probably would have gone into my bottomless "to read later" bookmarks folder if I couldn't knock some stuff out right then and there.

Thinking about it, I guess that's just a licensing issue. Give the author the tools they need to decide how their work can and can't be used.

<comment><USER6> School of Haskell is actually a website where people can create their own tutorials, so most likely the author added it themselves. (EDIT: I just checked, they were created by user Yann Esposito, which most likely belongs to the author.)

Furthermore, while FPComplete are commercial, I don't believe they're monetising SoH in any way, other than its being good marketing for the company and Haskell in general.

<comment><USER5> I thought it might be something along those lines. Just didn't have much time to look around.

I would say, though, that it should be (and really is) up to the author where their work can or can't be displayed.

I think it would be good for the community either way, but if an author doesn't want their work in any way tied to a commercial interest, then it's their right to apply licensing in such a way to ensure that, and for others to respect that (though I'm not saying you're implying otherwise; just clarifying).

The monetization here would be brand exposure and site traffic to the domain/website, using the works of others (which I'm not inherently against).

</comment></comment></comment></comment></comment></comment><comment><USER7> I tried dipping my hands into Haskell over the summer. I fell in love with two resources:

1\. Yann Esposito's Haskell Fast and Hard (on FPcomplete -- [https://www.fpcomplete.com/user/yogsototh/haskell-fast- hard](https://www.fpcomplete.com/user/yogsototh/haskell-fast-hard))

2\. Learn you a Haskell by Miran Lipovaca [http://learnyouahaskell.com/](http://learnyouahaskell.com/)

The latter author decided to write the book based on his experience in learning Haskell. It's definitely one of the simplest and clearest programming books I've read.

<comment><USER8> did you get all the way through it?

If you did, you are a substantially smarter person than I.

<comment><USER9> Yeah, I got bogged down in monads, but I've promised myself I'll finish it this year. Learn Yourself a Haskell[...] is extremely well-written and entertaining, so it deserves completion.

<comment><USER8> I've said the same thing, unfortunately.

All the resources I've seen for Haskell start the same

They are insanely easy to follow at the start, so simple that even first time programmers won't have much trouble following. Then the type algebra hits and everything goes out the window.

I've made 3 attempts to get through it. I can even see situations in my work where monads and monoids may very well be applicable. I still can't work with Haskell, nor get through any resource that discusses them.

It's possible I'm an idiot, but I suspect my co-workers would fare worse, and it damns the language in my book.

<comment><USER10> In college I was required to take a course using SML (which has a type system that is sort of like Haskell's I think; Haskell's may have been based on it). I was not all that academically driven that semester, and I was kind of taken by surprise by how hard the language was, once I started doing the later projects, and I barely got through the course. That was my only exposure to functional programming until after college, when I wanted to make up for that and I undertook to learn Scheme. I didn't have much trouble with Scheme, and the functional concepts I'd heard about in the course finally made sense. If you're trying to learn the functional style, I don't see the point in learning at the same time a complex type system. The type system isn't a natural consequence of functional programming, it's something that's not really related but adds a lot of difficulty.

I don't want to start a flame war, but I view types as being sort of peripheral to the task of getting the computer to do things. If type systems are getting in the way of programming, priorities are getting mixed up.

<comment><USER11> Type systems aren't supposed to "get in the way of programming". Instead, they are supposed to assist you, and they do. This is why there is the perception that, for instance, code written in languages like OCaml commonly turns out to be correct once it compiles correctly. It's certainly not the case that language designers deploy a complex type system to make your work harder.

<comment><USER10> I don't question that they're created with the best intentions, but the most important thing is the end result, not the programming language. And well- intentioned language features don't always work out like they're supposed to.

<comment><USER11> Is this a problem of the language or the person using it?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> Ok so here's the problem I'm having with trying to get into Haskell, and it's a problem Carmack identified: there's way too many "toy examples" out there.

I've always learned languages because I need them for something. C/C++ because I wanted to write a game. Python because it's the complex scripting language of choice in Ubuntu. JavaScript for obvious reasons.

What I really _really_ need is something which walks me through doing something significant with Haskell - like, a GUI app on Linux or something (my current focus: I've never really done it, but if I'm learning something new I'd like there to be a practical product at the end).

A bunch of language constructs, while technically interesting, don't help me to grok the language at all.

<comment><USER13> > _there 's way too many "toy examples" out there._

I am not sure what you mean. Tutorials can only deal with toy examples. Once you understand them, then you can (and you should) write bigger projects. About Carmack, that's exactly what he did, he implemented Wolf3D in Haskell to have a real impression about Haskell. (Assuming you're talking about this video where he discuss functional programming for games)

Aren't you just being lazy? :)

Edit: that video:

[http://functionaltalks.org/2013/08/26/john-carmack- thoughts-...](http://functionaltalks.org/2013/08/26/john-carmack-thoughts-on- haskell/)

<comment><USER14> I guess he's just as tired as I am of seeing (yet another) quicksort implementation in Haskell!

99% of the time I spend coding does not deal with data structures or algorithms, but basic business logic.

How does Haskell perform there? I don't know, but I know Haskell's quicksort oneliners are pretty (and pretty meaningless too).

I know my way around monads, I'm fluent in functional programming and grasped typeclasses... but I still can't see what's so great about Haskell beyond algorithmic beauty. I'd really like to be taught real-world-Haskell just like I was taught real-world-Lisp.

<comment><USER13> Well, I would argue that this article really is _an introduction to functional programming using Haskell_. Most of the concepts he/she introduce are not specific to Haskell but are more or less specific to functional programming languages.

But the author doesn't seem to be very well aware of that. Quoting the article: _" Haskell is very different. The language uses a lot of concepts I had never heard about before."_

All that to say that if you already know some functional programming this probably isn't for you.

Edit: clarity.

<comment><USER14> Exactly!

Don't get me wrong, I don't think that most Haskell tutorials are inherently bad, I just couldn't find a good introduction to Haskell targeted at programmers which are already familiar with functional programming concepts.

</comment></comment></comment></comment></comment><comment><USER15> How much interest would there be in a 0 to full Haskell development environment set of ansible scripts (and or Vagrantfile)? I'm working on a start up using Haskell at the moment and I've been capturing all of my set up in this way. If folks are interested I can make some of this stuff available.

<comment><USER16> What do you install and setup apart from ghc/i?

<comment><USER15> Emacs config. Latest versions of cabal cabal-install. A work around for the brokenness of the Haskell platform on ubuntu 13.04. Threadscope. Proper cabal setup for testing. Jenkins setup for CI from the start.

Also investigation dockerizing Haskell services too.

<comment><USER17> Do you have a good ~/.cabal/config auto-installed with library profiling enabled?

<comment><USER15> Yes, but I have moved to doing most stuff in sandboxes now and cabal repl is not playing nice with profiling at the moment.

</comment></comment></comment></comment></comment><comment><USER18> _" Instead of being in your way like in C, C++ or Java, the type system is here to help you."_

I'd still say the type system is there to help you in C, C++, and Java, it just doesn't do nearly as good a job of it, and winds up in your way more often because it's less expressive.

<comment><USER19> I'd go as far as to say it doesn't get in your way at all except for verbosity, I just wish it were better and could do more. I'd love for the type system to prevent null pointers.

I'm only speaking from Java experience here.

<comment><USER20> If you are using Java and the JVM: Kotlin[1], a JVM language that attempts to improve on Java, has non-nullable references.

[http://kotlin.jetbrains.org/](http://kotlin.jetbrains.org/)

</comment></comment></comment><comment><USER21> Learning a functional language is a great idea _especially_ if you never intend to use one after you've learned it. It's like speaking a second language. Has a great effect on the understanding of your own language.

At university the first thing everyone had to (in programming) do was a Haskell course. Felt weird at the time, but in hindsight it was fantastic. It meant everyone had to throw their preconceptions about programming out the window.

It didn't occur to me until recently (10-15 years later), that functional concepts are actually a _good thing_ to apply in any language; that it makes code parallelizable, modular, maintainable, testable, and so on. I just thought functional was functional (i.e. elegant but hard) whereas imperative was imperative (inelegant but easy). Much like the difference between algebra and arithmetic.

So go learn a second language, or even a third. Even if you intend to speak english and Java for the rest of your life. I'd choose Haskell and Spanish.

</comment><comment><USER22> Pretty awesome, I've steered clear of Haskell preferring Scala instead (easier syntax for me to grok), but this tutorial makes Haskell far more accessible.

Off topic but does anyone know of a Rails/Play + Linq to SQL/ScalaQuery equivalent in Haskell?

Beyond that just being able to generate PDF invoices, send out emails and have access to a decent date/time library (like JodaTime) would cover the essentials for web development.

<comment><USER23> For Rails/Play, we have three web frameworks:

* Snap * Yesod * Happstack

I think all of these have techniques to build web sites in a modular fashion, but I have only used Snap myself.

For querying, I personally just use postgresql-simple and write SQL strings, but this tends to be a major source of runtime bugs so I'm reconsidering that. For type safe alternatives, we have things like HaskellDB ([http://chrisdone.com/posts/haskelldb- tutorial](http://chrisdone.com/posts/haskelldb-tutorial)) and esqueleto ([http://hackage.haskell.org/package/esqueleto-220.127.116.11/docs/Da...](http://hackage.haskell.org/package/esqueleto-18.104.22.168/docs/Database- Esqueleto.html)).

We have a fairly decent date time library in time ([http://hackage.haskell.org/package/time](http://hackage.haskell.org/package/time)) but I don't know if that matches JodaTime (because I don't JVM libraries). For PDF generation I'm actually not sure at all - but have a search on [http://hackage.haskell.org](http://hackage.haskell.org) and there may be something.

<comment><USER24> time (sadly) isn't comparable to Joda Time.

<comment><USER25> As someone who has never used Joda Time, what makes it so great?

<comment><USER22> Generally immutable (supports mutable state for some edge cases) along incredibly rich functionality covering everything you could imagine needing time-wise, and does so concisely.

It's a godsend given the built-in Java alternative.

</comment></comment></comment></comment></comment><comment><USER26> ASIDE: I've been using _learn you a haskell for great good!_ [http://learnyouahaskell.com/](http://learnyouahaskell.com/), and found it helpful, insightful and the examples nicely paced so you can treat them as exercises as you go.... up until the module chapter, which is more like a reference, very long, detailed, tedious. I got up to here [http://learnyouahaskell.com/modules#data- char](http://learnyouahaskell.com/modules#data-char) (check out how small the scroll bar slider is on the right - this is a big chapter).

Did this stop you or how did get past it?

How does _Learn Haskell Fast and Hard_ compare?

<comment><USER27> After that chapter it goes on the same way as before. I think the chapter is just a reference for "good places for beginners to get acquainted with".

</comment></comment><comment><USER28> If you want to learn Haskell slow and easy, this is brilliant: [http://learnyouahaskell.com/chapters](http://learnyouahaskell.com/chapters)

</comment><comment><USER29> I have been perusing Learn You a Haskell but I like this more. Fast and hard indeed. Will read this over tonight.

<comment><USER27> Word of warning, though. While this article looks pretty decent it's skipping over lots of tiny details that are covered in LYAH, which may lead to annoying gaps in your knowledge/understanding later.

</comment></comment><comment><USER30> PERFECT. Relaxed but intense. Perfect! ... for me. This is exactly the kind of tutorial that works best for me. (I'm sure many people will find it unusuable. But that's OK - we have as many ways to learn as we have learners.)

The selection of artwork is pretty nice too.

Very very good. Thank you author and poster.

</comment><comment><USER31> NB: if you're trying out haskell and you're on a mac with xcode 5, you'll be hitting some weird CPP related errors due to GHC 7.6 and older not playing nice with Clang's CPP.

I shared a number of work arounds with the general haskell community a few weeks ago here: [http://www.haskell.org/pipermail/haskell- cafe/2013-September...](http://www.haskell.org/pipermail/haskell- cafe/2013-September/110320.html) (there are alternative work arounds, but I only listed the ones which are simple and easy to communicate with other people and be able to expect them to follow the steps correctly.)

</comment><comment><USER32> I have been wanting to look into Haskell for a long time now. Never really got the time. Also the syntax was a bit off putting.

Just skimmed through. I see that there is a bit of Javascript and C in the code too as reference matertial. Most people dont like such a way of teaching but it looks like the tutorial isnt really trying to teach Haskell in terms of Javascript or C. Really makes me want to look into this. Thanks for putting the efforts.

<comment><USER33> I'm a bit surprised that you say the syntax if offputting, most people I've met say otherwise. Could you point to something you specifically don't like?

<comment><USER32> I didnt mean in a sense that it sucks. Its way different from the traditional C style or Lisp style syntax that I've used. Regardless of whether it is good or bad, it would have taken me some time to adjust to it and I never had that kind of time.

Also as someone who doesn't know Haskell at all, I have great difficulty reading Haskell. I dont think I would have that kind of problem reading a language with a more traditional syntax.

<comment><USER5> I think some folks are misreading your comments a bit as an indictment of the language. I read it as saying, "Haskell doesn't have syntax that's similar to any language I know and that means I have to learn something I don't know, which takes time, and I don't have a lot of time."

Personally, I'm with you. I've used other functional languages (F#, clojure, erlang), I'd say I'm pretty familiar with a lot of the ideas Haskell uses (comprehensions, partial application, anonymous functions, pure functions, pattern matching) and I actually _really_ want to learn Haskell, but I have a hard time intuiting the meaning of a lot of Haskell syntax just based on other syntax that I know.

I also realize that the syntax probably fits the language very well, which makes sense, and that it's a good thing. I wouldn't want it to compromise it's purity for familiarity. Just makes it more work to learn.

<comment><USER32> Hah! yes. Maybe I should have put it the way you did.

My view of Haskell is the same as a non-Lispers view of Lisp. Cry about too much parens and it making things difficult to understand. Doesn't mean the language needs to be changed. I am all in for learning Haskell although most introductions to haskell are really time consuming and dense, so I never just did it. Which is where I was really glad that this tutorial was put up.

Hating any language which actually does serve its purpose is pretty stupid. If anyone actually has some issues understanding a sightly different but very well respected language, then the fault is mostly with that person and not the language.

<comment><USER5> I think lisp is a really good example for how I feel with haskell, and one I'm more familiar with.

When I first started learning lisp, the syntax was foreign, and while lisp syntax is arguably really really simple, composition with that syntax is a little weird if you're not used to it. Yet, at the same time, the syntax is a fundamental part of the language, especially with respect to homoiconicity, simplicity and macros. It was a time-sink to get used to it, but totally worth it.

<comment><USER32> very much agreed.

</comment></comment></comment></comment></comment></comment></comment><comment><USER34> Minor nitpick: Using pattern matching instead of `if xs == []` is not just to make code prettier and cleaner.

First of all, you should be using the `null` function instead of `== xs` because the `==` operator only works if your list contents are Eq-able.

But the most important thing is that pattern matching is more type safe. If you use `head` and `tail` you, as a programmer, need to make sure that you only call them on a non-empty lists or else you get an error. On the other hand, if you use pattern matching the compiler helps you make sure that you always covered all the possible cases (empty vs non-empty) and you never need to worry about calling the unsafe head and tail functions.

</comment><comment><USER35> I really like the art images in the tutorial. Nice touch.

Although I am not sure about the premise - I doubt Haskell, as a language close to mathematics, can be learned fast. This tutorial seems quite shallow on some things, like monads.

<comment><USER36> It does sort of bail on you instead of explaining what monads are. A couple of examples of monads is not the same as understanding what the underlying abstraction is. That said, it isn't hard or long to learn monads. A monad is something that can be mapped over and concatenated.

<comment><USER35> > That said, it isn't hard or long to learn monads.

I am not sure any definition does that justice. It's similar with concept of recursion - it's easy to define (function calls itself), but to put it into programming practice (writing all loops as recursion), that's a lot harder.

I read "Learn Yourself a Haskell" as a tutorial (which is in my opinion great) and still it was a lot of work to figure out this: [http://blog.tmorris.net/posts/20-intermediate-haskell- exerci...](http://blog.tmorris.net/posts/20-intermediate-haskell-exercises/)

Then I started reading [http://www.haskell.org/haskellwiki/All_About_Monads](http://www.haskell.org/haskellwiki/All_About_Monads) but didn't finish it yet (I was playing with Haskell, just figuring out how to structure the application). IMHO, unless you understand all that, how to put monad concept into practice, you don't really know monads.

</comment></comment></comment><comment><USER19> I'd like one of these beginner tutorials to have a chapter named, "learning cabal and using a library". That was a pain point for me (especially developing on windows). Well, not so much a pain point as a mortal wound.

</comment><comment><USER37> Thinking about Haskell, reminds me of this [http://www.xent.com/pipermail/fork/Week-of- Mon-20070219/0441...](http://www.xent.com/pipermail/fork/Week-of- Mon-20070219/044101.html)

</comment><comment><USER38> Nice tutorial, but old story: [https://news.ycombinator.com/item?id=3806841](https://news.ycombinator.com/item?id=3806841)

</comment><comment><USER39> Okay so i completed this tutorial in about 5 hours , gave everything due , but still i only understand like 30 % of it and that too of the starting part.

</comment><comment><USER40> Check out [http://learnxinyminutes.com/](http://learnxinyminutes.com/). Loads of languages/tools to learn.

</comment><comment><USER41> Commenting to bookmark.

<comment><USER42> If you upvote an article on HN then it shows up via the "Saved Stories"[1] link in your profile (not visible to others).

[https://news.ycombinator.com/saved?id=pa5tabear](https://news.ycombinator.com/saved?id=pa5tabear)

</comment></comment><comment><USER43> a monad is like a taco salad.

</comment><comment><USER44> I haven't seen this Haskell syntax before:

      [1,3..10] ⇔ [1,3,5,7,9]

Imagine running into this one on a production system... Someone needs to make a 'Haskell: the good parts' or at least a lint.

<comment><USER27> How is that weird, it's just uses the increment from the first to second value as step and repeat as long as it's smaller than the end value. Python does the exact same thing:

        Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53)
        [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
        Type "help", "copyright", "credits" or "license" for more information.
        >>> range(1, 10, 2)
        [1, 3, 5, 7, 9]</comment></comment>


U.S. judge finds that Aetna misled the public about its reasons for quitting ACA - <AUTHOR> http://www.latimes.com/business/hiltzik/la-fi-hiltzik-aetna-obamacare-20170123-story.html <comment><USER2> I've said it before, we need a single payer system.

Insurance companies and Pharmaceutical companies can more or less dictate the prices they'll charge because if you're chronically ill, you can't just choose not to be treated (unless you're ok with dying.)

This behavior should not be surprising. Until the American people get pissed off enough, we'll continue to have these shenanigans.

<comment><USER3> Single payer would be ideal for most Americans, but those in power (both government and industry) seem to prefer the high deductible health plans with health savings accounts.

Unfortunately I don't see high deductible plans working for anyone unless healthcare providers and pharmacies are required to list all prices up-front. As it is there's no way for consumers to "shop around" because they can't get prices for most tests, procedures, or even medications until they bill through insurance (which can take weeks).

<comment><USER4> Exactly this. It's a falsehood to think that HSA/HD will cause you to be a better consumer because you can't be a better consumer when the sellers refuse to provide price information. We had our first child this year and the hospital coded some things to my wife and some to my daughter which caused us to pay two deductibles. I tried to get an itemized breakdown repeatedly from the hospital and was met with "we can't do that."

Never mind the fact that you can't exactly shop around for places to deliver when your OB/GYN only has admitting privileges at one hospital. I'm about as free market as they come but when the providers flat refuse to tell you what they are going to charge you. Try going to one of those corner ERs, you'll have to sign a form saying you are solely responsible for all charges but they sure won't tell you what those charges are until you sign it.

<comment><USER5> Does anyone claim that HD plans make people more savvy consumers? I've always thought it was a transparent way to make people of moderate means think twice about any care that could be considered elective. Whether it's a good idea or not, paying out of pocket for a $3000 procedure might make you question the need for a CAT scan.

High deductible plans definitely don't make anyone smarter consumers. The market is opaque and your options are limited to in-network in the best case.

</comment></comment></comment></comment><comment><USER6> On paper, none of the Star Wars movies ever made a cent of profit. On paper, Google and Facebook had not profits in America.

ACA insurance profit are loss are similar. With enough creative accounting the business could be made unprofitable to squeeze concessions from the Obama administration.

Look at all the major insurers stock price since Obamacare began. That will tell you all you need to know about this story. If you think they are making all that money because the non-ACA health insurance business suddenly got real good, I have a bridge to sell you.

<comment><USER7> I've heard of these accounting shenanigens. If you are ever faced with a contract where you get "residuals"/net-profit, how do you protect yourself?

<comment><USER8> All of the Star Wars movies made profits for their distributor. The accounting loss was recorded only in the special-purpose holding company (SPHC) that was specifically set up to disburse profits to net-profit participants. To ensure that this type of entity has no profits, all production and distribution expenses of the studio and distributor are generally charged to this entity, usually in advance lump sums. The studio and distributor record and are taxed on their income.

In many cases, any licensing income is earned by a separate but related company that paid the SPHC for the rights to re-license the film (but usually the distributor also acquires licensing rights). The SPHC is generally a profit-participant in the licensing company, but its share of the licensing profits usually varies based on industry politics (i.e., leverage).

A-listers with sufficient leverage and competent representation can sometimes participate in the profits...of the distributor. It's not enough to get gross profits since gross profits take into account COGS/COSS. What you really want is "first-dollar gross", meaning "gross income" before distributor expenses.

For example, say, "Gravity 2" makes $100m at the box office. That $100m is first-dollar gross. If WarnerBro's COGS were $80m, gross profits were only $20m. If Sandra's share of profits was 1% of first-dollar gross, she's looking at $1m; but if she only had a gross-profits participation, she's looking at only $200k. If Sandra was a net profit participant, she wouldn't make anything at all since Gravity Special Purpose Movie-Making Entity has an $X million dollar loss related to production expenses for making the movie and the distribution expenses WarnerBros is expensing to it.

[source: I do this. But not for WarnerBros or Gravity, those are just examples that are easily Googled if you want to follow up with your own research.]

</comment></comment></comment><comment><USER9> Am I misreading this, or are they forgoing profit purely out of spite? Or I guess the idea is they could make more profit in the long run if they generate enough bad publicity for the ACA. These quotes almost seem too on the nose to be real:

> "I just can't make sense out of the Florida dec[ision]," the executive, > Christopher Ciano, wrote to Jonathan Mayhew, the head of Aetna's national > exchange business. "Based on the latest run rate data . . . we are making > money from the on-exchange business. Was Florida's performance ever > debated?" Mayhew told him to discuss the matter by phone, not email, "to > avoid leaving a paper trail," [the judge] found.

<comment><USER10> ACA was designed to drive consolidation. Because large companies are easier for the government to control.

Source - ACA author: [http://www.wsj.com/articles/i-was-wrong-about- obamacare-1469...](http://www.wsj.com/articles/i-was-wrong-about- obamacare-1469997311) (How I Was Wrong About ObamaCare: The law's drafters wanted consolidation)

Which why, all of a sudden, all the hospitals are buying each other, and insurance companies are buying each other.

It seems Aetna felt that the government didn't live up to its side of the bargain.

<comment><USER9> Ok, but on its own that doesn't make sense as a business decision. Assuming they are profit-driven businesspeople, they either they thought their best option was to try and sabotage the ACA, or they really thought this would work as a negotiation tactic, which seems absurd.

<comment><USER10> Why does it seem absurd as a negotiation tactic? They use what leverage they have against the government.

<comment><USER9> I don't know, does this kind of thing usually work? I don't really know anything about this, but it just seems sort of obvious that Aetna is in a much weaker position than the US government and can't possibly strongarm them that easily. But I guess if the prospect of making the ACA look like a failure is part of the leverage then it makes more sense.

</comment></comment></comment></comment></comment><comment><USER11> There are 2 simple things we can do to fix health care. First, make it like public school. If you want to pay for private school, go ahead, but health care should be socialist like school and sewage. 2nd, make it illegal for the AMA to limit the number of doctors admitted to med school. Its a cartel that reduces supply.

<comment><USER12> > First, make it like public school.

We can learn from our mistakes there and, if we really feel we need to make medicine socialized (as opposed to deregulated like the excellent private healthcare in Mexico or India), we can at least do it on a voucher-based system. Everyone gets $x tax money a year to spend on medicine, and you can choose where to spend it.

<comment><USER13> What if you need more than you're allowed?

<comment><USER12> What if you need more than the government is willing to spend on you in the "public school" scenario?

I had a longer, more detailed response, but I realized that what you asked isn't really a fair question. In the end, the answer is "you die", and by elaborating on that it made it sound like I agreed that this _isn 't_ an issue in socialized medical care.

<comment><USER13> I figured you'd want to say more about it because that obviously doesn't work. But.. OK.

</comment></comment></comment></comment></comment><comment><USER14> TIP: If you're having trouble viewing the page because of the pop-up telling you to turn off your adblocker, Click the little 'i' by the address bar (Chrome only) and disable Javascript for the site.

<comment><USER15> And there is reader view for firefox users.

</comment></comment><comment><USER16> A company lying to further it's goals, well I never!

</comment><comment><USER17> Note that both things can be true: that Aetna lost money in the individual marketplace (which would square with the experiences of other insurers in guaranteed-issue markets) and that their tolerance for loss was sharply influenced by support for their proposed merger.

<comment><USER18> Even if this was true, which the article states it is not, isn't that the point of insurance? To spread the risk and cost across a geographic or demographic populace while making a reasonable, but steady profit?

<comment><USER17> I want to be clear that I'm not saying Aetna should have left unprofitable markets; I think, for instance, that it would be reasonable to require that any insurer wishing to offer group coverage in a state also offer individual market coverage.

But the claim Aetna is making is that, at least in some of the markets it abandoned, it was making a net loss on insurance contracts.

<comment><USER19> This a million times over. Aetna makes huge money in the group business. By allowing insurers to take all the healthy people in group business, but absolving them from taking the sick people in a market, you essentially create smaller pools of "unprofitable" customers. But essentially it is a giant subsidy to the group insurance providers.

</comment></comment></comment></comment><comment><USER20> Shameless misdeed by a greedy corporation.

That being said, I fail to understand one thing about those who propose a single payer system (and I mean this with all sincerity): If we cannot afford to pay for doctors, hospitals, and medications, how can we afford to pay for doctors, hospitals, medications, plus a bureaucracy to manage all of it?

To me, "negotiating" better deals doesn't work. As a single payer system, that's just a rephrasing of "price controls".

It seems game theory could be put to good use here, as life is effectively a single round game where many (most?) participants will spend everything they can for the game to not end (i.e. extend their lives and postpone their death). This one attribute seems destined to really challenge insurance of any kind (including single payer) given the large aging demographics in the US (aka "Baby Boomers").

<comment><USER21> > If we cannot afford to pay for doctors, hospitals, and medications, how can > we afford to pay for doctors, hospitals, medications, plus a bureaucracy to > manage all of it?

The same we are doing it now. Do you think the insurance companies are not bureaucracies? A regulated monopoly is the most efficient form of bureaucracy, because of efficiencies of scale.

Also, insurance companies still generate profits, profits that can directly go towards health care, instead of being used as an investment cushion or for god knows what.

Also, having every single person under 1 health care umbrella is a systematic reduction in risk, which further lowers costs.

</comment></comment><comment><USER22> I was pretty sure the news orgs I was following pointed this out at the time the merger was approaching its conclusion.

I'm glad a judge with access to more information that the average news consumer was able to make a judgement and reduce the uncertainty around the claims (both Aetna's and the news coverage).

</comment><comment><USER23> Wake me up when charges are filed.

<comment><USER9> I don't think this is really illegal. What would it be, libel against the Obama administration or something?

</comment></comment><comment><USER24> I'm for universal healthcare but the ACA _is_ collapsing in many states. I happened to ride back to Santa Fe with the CEO of Blue Cross of Omaha who told me that BC/BS of NM lost $100m on the ACA in 2015. That's a lot of money for anyone to lose. He believed there were a few relatively simple fixes that would go a long way to bring some sanity to the system. And let's face it, tax penalties are not the way to achieve health coverage for all Americans. Boo on Obama for not even bothering to try for Universal Healthcare...

<comment><USER25> >Boo on Obama for not even bothering to try for Universal Healthcare...

He tried to include the public option but it only had 59 votes to the 60 required to pass it

<comment><USER26> You only need 51 votes. If Democrats really cared they could have just sit in the senate until the republican speakers collapsed. And it would have gotten to a vote.

It may have taken a couple of days but whatever.

Edit: Can anyone explain the downvotes please? A filibuster can be overcome by just siting and listening to the other side until they can no longer speak from exhaustion.

<comment><USER27> They can trade off speaking during the filibuster.

Say only 20 of the minority decide to be completely intransigent. How many weeks do you think it will take to exhaust them when they each only need to speak for ~9 hours a week to maintain the filibuster?

<comment><USER26> They don't have the right to leave the senate hall I think. So I do think they will have to make number one and two from time to time. The answer also is as much as needed.

<comment><USER27> The Senator that _has the floor_ can't leave the Senate. They can leave if they aren't holding the floor.

So 52 weeks later, maybe you compromise to get some things done (or maybe sooner)?</comment></comment></comment></comment></comment></comment>


Perchance to Dream - <AUTHOR> http://www.reverseshot.org/features/2546/sleep_whitney <comment><USER2> "Aye, that's the rub" thought the audience while contemplating escaping their life to escape the boredom.

</comment><comment><USER3> > Andy Warhol is in the process of making the longest and simplest movie ever > made: an eight-hour long movie that shows nothing but a man sleeping."

I've heard that people, unknowingly, eat spiders while asleep. Curious if this happened in that film.

<comment><USER4> I've heard that as well. It's not true though.

[https://www.snopes.com/fact-check/spiders-inside- her/](https://www.snopes.com/fact-check/spiders-inside-her/)</comment></comment>


Sun wants to free up rest of Java, have it shipped as part of Linux - <AUTHOR> http://www.thestandard.com/news/2008/04/22/sun-looks-free-rest-java

<comment><USER2> 2-3 years ago this would have been interesting. I'm not sure how many Linux developers are going to start writing Java software all of a sudden.

<comment><USER3> I don't know, there's a fair few people out there in the community using Mono and a comparable high-level competitor could tempt many away.

That requires things like java-gnome to be top notch but it's getting there. There's also always Jambi for KDE.</comment></comment>


Playstation Suspends Facebook Advertising - <AUTHOR> https://www.gamesindustry.biz/articles/2020-07-02-playstation-suspends-facebook-advertising <comment><AUTHOR> "The platform holder joins Coca-Cola, Honda, Unilever, Ford, Starbucks and Microsoft".

<comment><USER2> They'll be right back soon enough.</comment></comment>


Ask HN: How to sync virtual machine (virtualbox) image accross two computers - <AUTHOR> If I have a virtualbox image on my desktop, and I want to travel and take my laptop with me, how can I sync the virtualbox image from desktop to laptop
I can do rsync, but it would cause an issue of "virtual machine moved copied issue"
I'm looking for some simple solution, and something tried and proven <comment><USER2> First hit on Google for "copying virtualbox vm to another machine" gives you three options:

[http://superuser.com/questions/633431/whats-the- recommended-...](http://superuser.com/questions/633431/whats-the-recommended- way-to-move-a-virtualbox-vm-to-another-computer)

<comment><AUTHOR> I'm not looking to copy VMs, I want to sync them. work on one computer, then continue my work on another. I copied VMs between computers countless times

</comment></comment><comment><USER3> I often thought this would be handy when I was using vagrant, it would be nice to sync VMs without doing a whole rebuild.</comment>


Ask HN: Your Hacker Workspace - <AUTHOR> Every hacker has a workspace and coding/working environment that has been personalized, optimized, improved, tweaked and hacked for countless hours and days. This is one of the, if not the most, sacred things each hacker posses.
Share it with the community so we can learn from each other while improving our own.
Share yours. <comment><AUTHOR> I will start.

My two primary work horses include a desktop computer and Thinkpad with Fedora core 10.

 _Desktop server:_

\- Gnome -> 8 workspaces on two monitors { Web (regular), Web (work), Emacs, Emacs, Emacs/Compile, Emacs/Debug (GDB/DDD), 4 shells, Thunderbird/IM/IRC/Music }

\- Fluxbox on VNC with 4 virtual { 4 Shells, ServerStats, Void, Void }

\- Screen session just in case I want to drop in

 _Laptop:_

\- Gnome -> 5 Virtual { Web, Emacs, Emacs/Compile/Debug, Void, Thunderbird/IM/Music }

 _Both:_

\- Emacs (all instances are new-frame so shared buffers, heavily use gdb-mode, and for compiling)

\- Synergy desktop sharing Keyboard/Mouse with Laptop

\- Zsh + scripts for common tasks (backups, syncs)

\- NFS shares mounted both ways

 _Other_

\- Pencil Sketch pad (no rules) as my idea pad, doodling, I keep several of these everywhere

\- Post-it's for quick notes

\- Emacs/C/C++/Python cheat/reference sheets printed and posted

 _This is modest if not simple by hacker standards, but it makes me feel comfortable for my usual tasks and most at home_

<comment><USER2> _This is modest if not simple by hacker standards_

I'm not so sure about that ;-) My setup is simpler than yours:

I do all my development on one machine - a macbook pro (Tiger, haven't got around to upgrading yet).

I run only three applications pretty much all the time, and they're all full- screen - Firefox, Emacs and iTunes, and alt-tab between them. Occasionally I also start a Terminal, if I want to ssh into a server somewhere.

Usually my Firefox tabs are gmail, yammer, ganglia, <http://irc.justin.tv>, and often some documentation to help with whatever I'm working on.

Typically I have a dozen or so Emacs buffers open - mostly python, javascript and haxe source code.

I never write notes by hand. I either write them in an Emacs buffer, or I send myself an email.

This is where I work (at justin.tv): <http://abstractnonsense.com/workspace.jpg>

<comment><USER3> Do you actually work from that couch all day? I can't imagine that being comfortable for more than a few hours.

<comment><USER4> I have the smaller version of that couch (Ikea) and I can attest to the fact that it is a uncomfortable piece of shit. But it was cheap.

</comment></comment></comment></comment><comment><USER5> (Fairly) soundproof room; lots of lamps, none too bright; Aeron chair; new desk designed by Kate Courteau (the architect who designed the YC offices), with a steel frame and butcher-block top; Macbook Air; bluetooth mouse; 23" Apple monitor; a bunch of terminal windows running either vi or the Arc toplevel or tail -f of some server log; Firefox windows with Gmail, HN, and localhost; cup of tea; UHU tac earplugs (disengaged); postcard of smiling Wodehouse, age 92, with dachshund.

<http://wodehouse.ru/photo/phdach.jpg>

<comment><USER6> Why Wodehouse? BTW: If Stephen Fry invited you as a guest on QI, would you go?

<http://www.imdb.com/title/tt0380136/>

</comment></comment><comment><USER7> It's dirty, crappy, no dual-screens, no mac prettiness, no butcher-block table, no glass, no stainless steel, but it's awesome and it's very productive. :)

<http://www.flickr.com/photos/scumola/3508980363/>

<comment><USER8> I don't understand why you wouldn't switch to a place with sunlight eventually (after 9 startups)?

<comment><USER9> You must not be very superstitious.

</comment></comment></comment><comment><USER10> _Every hacker has a workspace and coding/working environment that has been personalized, optimized, improved, tweaked and hacked for countless hours and days. This is one of the, if not the most, sacred things each hacker posses._

Sorry, don't buy that. Many hackers just work from anywhere, and many who do work from a regular spot don't care about it as much as you do.

This is a valid question, mind you, I just disagree with your first point.

<comment><USER11> Between work and home I interact directly with more than one hundred machines, from IBM Risc 6000 running AIX to Ubuntu laptops to WinXP drones under corporate lock-down. These machines are not even speaking to each other. My most important piece of kit is my thumb drive, which I keep chained to my car keys.

I'm not big on aliases or scripts to do simple things. Better to make a one- liner or throw-away script to do exactly what I need now, something that will work on many machines. Automation is only useful if it can significantly reduce repetitive effort.

I'm no master or hacker, I just get on with my projects without much frosting. I'm partial to a cheap (dropable?) Ubuntu laptop with emacs, gdb, wireshark, k3b, and lots of medium-length cables and adapters.

</comment></comment><comment><USER12> Two thinkpads, one running XP and the other running slackware. LispWorks and emacs/slime/sbcl on the win32 box, tested there first, and when I need to implement Unix FFIs I have two putty terminals to the linux box. I have been using linux since 1996, and I don't think I ever ran a full Unix desktop for more than a year (FreeBSD and xfce then)

Stuff get passed around between the XP and the linux box until I am happy with them, then they're sent to 2 slackware VPSes and a Solaris box elsewhere.

More important than code is my Skype phone. Half my work is done walking around with a phone glued to my ear.

Essentials include, a yahoo currency converter bookmarklet, a timezone time calculator, various inhouse tools for lead management and tracking (I have a mailer I wrote in Lisp that I paste email text to and rewrites all URLs as mysite.com/redir?url=FOOBAR; I use this to track who read my emails, when and how. Couldn't live without it.)

OpenOffice and Unipad for funny Arabic text handling. Copernic Desktop Search for the massive library of documents that I have and need to share.

2-3 notepad windows open at all times. An emacs org-mode buffer that contains my life's work.

A separate Firefox installation that has the annoying but very essential SEO- Quake plugin for doing _stuff_.

GNU GPG integrated with Thunderbird. 20+ email accounts in thunderbird, Pidgin, Chatzilla and a twitter window open at all times.

Paint.NET for the necessary graphics editing. MS Paint for quickly resizing images. Mingw and MSYS to make Windows habitable.

Various Lisp implementations to check my sanity when something doesn't work with SBCL.

Opera, left running at all times with the home page set to the Common Lisp hyperspec, the hunchentoot manual in another tab.

Skype running at all times, but goes to my cellphone when I have a call.

Various powershell and bash scripts to make life easier.

Firefux plugin to remember passwords for 100+ social networking websites that I submit press releases and other stuff to.

Mozart/Oz, Ocateve and R for prototyping "stuff"

[Edit: I wouldn't use a laptop other than a Thinkpad if it was given to me for free. I am a proud owner of 4 Thinkpads at the moment, about 10 of them in the last 10 years.]

<comment><USER13> which password plugin?

<comment><USER12> lastpass. more security addons here:

[https://addons.mozilla.org/en- US/firefox/search?q=&cat=1...](https://addons.mozilla.org/en- US/firefox/search?q=&cat=1%2C12)

</comment></comment></comment><comment><USER14> Nope, I hack most of the time with a macbook on my dining room table. Sometimes on the coffee table.

At work I have a 30-inch screen for Vim next to the macbook, but it's optional.

<comment><USER15> Upvoted since I just got done with six hours of tweaking my iPhone app on my macbook on my dining room table. :) More often, I'm reclined on the couch, though.

I used to be a cave-type, but now I find that I'm more productive when I'm around people (as long as they aren't actively engaging me). So I'll work from home with the kids playing around me and get more done than I do in my isolated cube at the office.

</comment></comment><comment><USER16> Physical whiteboard in the same room.

Big screen.

A command line (Terminal on mac, cmd.exe on windows).

A launcher app (Quicksilver on mac, Colibri on windows)

An editor (TextMate in mac os, NetBeans in windows).

A mindmap editor for planning, design and notes. (Freemind, cross platform)

(I purposefully stay cross-browser, cross-OS, going back and forth between my MacBook and my Wintel desktop pc. This forces me to keep using and testing both my product and dev environment in several different OS'es and browsers - plus it provides redundancy; if one env blows up in some way, I can just fall back on the other.)

<comment><USER17> Physical whiteboard is a very good idea. I think I'll be taking that from you.

<comment><USER18> I've been able to make do without a whiteboard at my current job by keeping tons of scratch paper around. I'm given lots of 1-sided printouts I never need, so I just throw them in a drawer for when I need to sketch something.

</comment></comment></comment><comment><USER19> If you're interested in that, check out:

<http://www.deskography.org/>

There are some pretty crazy and inspiring setups on there, and you can share your own.

</comment><comment><USER20> On the screen: Gentoo running Xmonad in simpleTabbed layout. Opera, emacs, terminal with Screen multiplexing 5 zsh terminals (emacs -nw, irssi, ghci, irb, guile at the moment), Xchat, Pidgin, Skype, and Quodlibet; all running mostly in separate full-screen tabbed workspaces.

Meatspace: a battered wooden desk I found in the trash years ago, and a similarly battered armchair missing most of its upholstery. The desk surface is hidden beneath ashtrays, coasters, coffee mugs. My cat peers over the monitor, half asleep.

<comment><USER21> Screenshot, please?

<comment><USER20> Screenshots of Xmonad aren't that interesting. They don't show you how easy it is to do stuff without ever using the mouse.

</comment></comment></comment><comment><USER21> Just a request to all those who'll be responding: Please add screenshots!

I'll be setting up xmonad and working on my layout for the next few days, if this post is alive until then, I'll post my screenshot.

</comment><comment><USER22> I couldn't live without my 5 screens:

[http://www.deskography.org/people/yjg1097qMx/desks/786/photo...](http://www.deskography.org/people/yjg1097qMx/desks/786/photos/1254/)

<comment><USER23> [http://www.deskography.org/people/FgR504TfT/desks/359/photos...](http://www.deskography.org/people/FgR504TfT/desks/359/photos/517/) has you beat :P

<comment><USER24> And:

[http://www.deskography.org/people/oPi254rbd/desks/197/photos...](http://www.deskography.org/people/oPi254rbd/desks/197/photos/405/)

:)

<comment><USER25> this guy wins... but ill throw mine in for good measure...

<http://www.flickr.com/photos/9864615@N06/756229467/>

</comment></comment></comment></comment><comment><USER13> The problem with these threads is that skill is largely in how you use these tools. It's very hard to communicate techniques with just a list of tools. I have no solution.

<comment><USER26> Furthermore, there are very diminishing returns in obsessing about your tools themselves. Sometimes, tinkering with your emacs config (or whatever) is just procrastinating.

<comment><USER20> Sometimes, though, this procrastination does wonders. Like bonzai tree gardening, or a Zen gravel garden.

As someone who uses Gentoo, Xmonad, Zshell, and Emacs, there's more than enough config code to tweak than there are hours in the day. The happy result is that if I'm stumped, I always know I can pop open a buffer and hack something a bit.

Hell, the alternative to wasting your time in a fully hackable environment is wasting your time on the interwebs.

If you're going to procrastinate, you could do worse than by hacking .emacs. Like Runescape.

<comment><USER26> I don't think the problem is so much that it's procrastination, but it's procrastination that _seems_ like work. Like people noodling around with their "productivity systems". Having the option to customize things is worthwhile (I use Emacs, dwm, and screen, and have accumulated a lot of settings for each), but it's a means to an end.

When I'm hitting a dead end, I usually find it more helpful to get away from the computer entirely and go for a bike ride, work out, talk to someone, have some fruit, etc., and see the problem with a fresh mind later.

</comment></comment></comment></comment><comment><USER27> 2 desktops connected with synergy..a laptop..huge speakers..bottle of scotch..and a coffee pot.

</comment><comment><USER28> Here is mine... both :P

<http://tobal.extra.hu/karik/PICT4672.JPG>

<http://tobal.extra.hu/karik/PICT4673.JPG>

<http://tobal.extra.hu/karik/PICT5571.JPG>

</comment><comment><USER29> <http://njoubert.com/images/workspace1.jpg>

Dual 22" monitors hackintosh running OSX 10.5.6 6 spaces, normally 2 spaces per project and one for random stuff. (I like to arrange all my code in one space and all the docs and the like in another and switch between the two as necessary).

You'll notice the Macbook peeking out from underneath the desk on the left - if I need more screen space I pop that one open. Or if I'm not at home!

M-Audio speakers are crucial - good music is a help! And lots of paper / binders / books to refer to all the time.

At least 3 lights sdjustable to whatever conditions I prefer, and black shades in front of the blinds to block out sunlight and heat.

<comment><USER30> I've struggled with hackintosh for freakin' ages. Please share info.

Big problemo was usually the 9800GT 512mb.

<comment><USER29> Funny, I'm running a 9800 GTS 512mb, with no issues.

My secret was using the iDeneb 10.5.5 distro, that thing works wonders on my system. I'm running an Asus P5E-Delux motherboard, with is also a well- supported system. Everything I did is textbook from insanelymac.com

</comment></comment></comment><comment><USER31> The office: White enamel, 92" Oval Ikea table 24" Dell monitor on articulating arm Macbook Pro Speakers on Airport express

The rest of the house: Old Macbook Pro connected to 42" LCD TV, mounted on the wall running Bittorrent with RSS subscriptions / iTunes Logitech 5500 connected to MBP + speakers built into the wall About 700GB NAS

[http://www.flickr.com/photos/wehriam/369719626/in/set-181528...](http://www.flickr.com/photos/wehriam/369719626/in/set-1815288/) (Slightly old photo)

<comment><USER32> I hope you don't buy cable :)

</comment></comment><comment><USER33> Well here you guys go, pretty simple small desk, although it is all glass which is kinda nice looking. Nice big monitor, but only one. And then my computer which is really the reason I'm posting it has an acrylic case and uv lighting over reactive tubing, neato huh?

<http://tinypic.com/r/2eewug5/5>

here's one of the computer all alone: <http://tinypic.com/r/15qufc2/5>

</comment><comment><USER34> MacBook + 24" Dell

[http://farm4.static.flickr.com/3130/3219406843_af228d3a04.jp...](http://farm4.static.flickr.com/3130/3219406843_af228d3a04.jpg)

(Not pictured: Airport Extreme with a USB drive for Time Machine--critical stuff I backup to Github if it's source code and Drop Box if it's not source code)

Software-wise I work with IntelliJ, TextMate, vi or Xcode depending on the task at hand.

</comment><comment><USER17> I've got a Hackintosh tower - the first PC I've ever built (and I learned a LOT doing it!). I threw a Core 2 Quad, a Velociraptor drive, and 4GB memory in there. This is attached to a 30-inch monitor and a split, ergonomic keyboard, upon which I type in Dvorak.

Considering how much time I spend in front of this machine (e. g., most of it), I don't mind investing a little more in my setup to make the experience as comfortable as possible.

I've got a refurbished Rev. A MacBook Air to carry around with me when I'm out and about. I'm thinking of buying a wireless card or a MiFi to have Internet access everywhere.

I synchronize all important files over Dropbox and use The Cloud for everything else. My brain goes into Evernote. Bookmarks are synchronized across my browsers with Xmarks.

I use Spaces heavily and Expose a little. I use Launchbar and mouse gestures through xGestures to get around the computer.

My code is synced up using git.

</comment><comment><USER35> At work, I have a standard issue cubicle with L-shaped desk. We all have docking stations and one monitor, but I have _acquired_ a second one from the cubicle's previous inhabitant. So, I run dual 19" 4:3 monitors from the docking station.

At home, I've tried to match the environment as best as possible. I bought a simple Ikea table that I use as a desk and a thrift store bargain task chair that really needs to be replaced. I run dual 19" 16:10 monitors on an identical docking station, acquired from my father. When I work from home I just plug in my USB keyboard and mouse, dock the laptop, and the monitors auto-detect and switch over. If I'm not working, my i7 gaming rig powers the dual displays.

For general computing. email and web development unrelated to my day job I use a MacBook Pro from 2007. I wouldn't trade it for anything; except maybe a new unibody MBP.

</comment><comment><USER36> Mac Air with Philadelphia Brewing Co. sticker over the Apple logo for iPhone dev; cheap Toshiba laptop for web hacking; Chromium for browsing; Firefox/Firebug for dev; Gimp; Postgres; whatever aesthetically pleasing environment the coffee shops around me offer; sometimes getting pumped up listening to good musak on the iPhone; from time to time use one of the many white boards at Wean Hall at Carnegie Mellon.

MacAir (lil guy next to it will soon drown): [http://2.bp.blogspot.com/_QdVzmQAz0JQ/ShEHWvpIW1I/AAAAAAAAAE...](http://2.bp.blogspot.com/_QdVzmQAz0JQ/ShEHWvpIW1I/AAAAAAAAAEg/X3uQWoazUTM/s1600-h/IMG_0133.JPG)

White boards (my friend is in the pic): [http://2.bp.blogspot.com/_QdVzmQAz0JQ/ShEHIm3Q9vI/AAAAAAAAAE...](http://2.bp.blogspot.com/_QdVzmQAz0JQ/ShEHIm3Q9vI/AAAAAAAAAEY/fTcBW777660/s1600-h/IMG_0851.JPG)

</comment><comment><USER37> I have a MacBookPro running Ubuntu 9.04. It boots to Gnome with StumpWM which has three groups (virtual desktops):

\- emacs and terminal (fullscreen, I'll just swap between those two) \- mail, irc, and cplay (screen split between alpine / ssh+irssi, with a horizontal pane for terminal running cplay) \- browser (split vertically about 1:4, with nautilus on the left in the smaller pane and Shiretoko in the larger pane, usually in one window). I also watch movies, view pictures, PDFs etc. in this larger browsing pane.

I've settled for three virtual desktops that wrap around: this way I can always move to any of the desktops with just one move command, either left or right.

</comment><comment><USER38> Here are a few pics of my workspace. It's essentially an unfinished room in the basement. I keep my computers, power tools, collections...everything in this room. It's not fancy, but I can get things done. The main computer is an imac with VMWare and VirtualBox for Linux and Win XP. There are also a few PCs scattered around for robotics work. I use the Netbook for microcontroller interfacing...in case I fry something. The Netbook is cheap enough that I won't be too upset if it get ruined.

<http://www.flickr.com/photos/wheagy/sets/72157618418142512/>

</comment><comment><USER39> I travel _a lot_ so I keep everyhthing I need for hackery on my Dell XPS m1530 with a lot of VMWare images.

Currently this gets synchronised with a Debian server, due to be replaced with a Mac Mini in a week or two.

</comment><comment><USER40> Couch, laptop in lap, and Norwegian soap operas in the background.

</comment><comment><USER41> My current desk. Macbook for dev work, server under the desk. Fairly simple setup but I've got a lot of space to work and room for my betta fish.

[http://www.deskography.org/people/TME1103EMJ/desks/789/photo...](http://www.deskography.org/people/TME1103EMJ/desks/789/photos/1258/)

[Edit: running macvim, terminal and safari with either vlc or itunes for music]

[Edit 2: forgot to mention quicksilver. Kind of funny, but quicksilver is the only osx application I absolutely cannot live without.]

</comment><comment><USER42> Large self-designed and self-built U-shaped desk. workstation on one edge, permanently cluttered workbench on other, clean empty space in middle segment.

Three displays + old character-cell terminal (useful for looking on logs and such things) for workstation (with one monitor going thru KVM switch to few other computer for testing on obscure architectures). Sun Type 7 keyboard and mouse.

Old NCD thin client on edge of workbench part (incredibly useful).

</comment><comment><USER43> 2 apple laptops, previous gen(late 2007 / early 08), same software everybody runs: leopard, WinXP, FreeBSD, openBSd, ubuntu 8.04, openSUSE 10.3, vim, textmate, komodo;

\- current-gen apple, matias keyboards

\- whiteboard (me too)

\- moleskine notebooks, postit notes, Bic 4-color pen

\- cheap Ibanez-clone guitar; Duncan , diMarzio pickups;

\- m-audio MIDI controller, garage band, ProTools, digidesign mBox

\- looking to get piccolo, flute or alto sax

\- yoga mat and props from Iyengar studio

</comment><comment><USER44> My MacBookPro is the heart of everything. Usually running are: Eclipse, Mail, Adium, Safari, iTunes, OmniFocus.

When I'm at my desk, that's usually hooked up to a 30" display, wireless keyboard and mouse, and SoundSticks.

I'm actually about to build a custom desk and shelving in my home office to make things _perfect_. I use an Aeron chair which has saved my back.

<comment><USER44> On that note, does anyone have any good experience with building a good desk? Any tips or tricks? Grommet plugs you love, great cable management techniques, etc..?

My current plan is to use pre-finished maple plywood as the surface, and I haven't figured out exactly how I'm going to handle cables, power, etc...

</comment></comment><comment><USER45> My desks: <http://www.deskography.org/people/jfd/>

</comment><comment><USER46> i found this site too : <http://www.deskography.org/>

</comment><comment><USER24> A few different desks:

<http://www.deskography.org/people/gs/>

Current setup includes:

\- Aluminum MacBook

\- Apple Cinema Display (24")

\- Apple Wireless Mighty Mouse

\- Apple Wired Aluminum Keyboard (recently switched from wireless)

\- A functional IKEA desk.

\- A not-so-great IKEA chair (we're getting new chairs!)

\- vim (and MacVim)

\- mutt

\- Python (automate tedious tasks)

\- CS4 Suite

Total revamp as soon as we've found the office of our dreams.

<comment><USER24> Forgot to mention one of the most important parts of our work environment: the whiteboard! We make pretty good use of that.

</comment></comment><comment><USER47> macbook air, a mouse and a rtw ticket.

<comment><USER48> Seconded. I buy a new loaded Apple notebook every 3-4 years, and each cycle I debate on getting a Mac Pro that will wipe the floor with the notebook for even money. I never do, because I can't stand to be chained to a desk.

<comment> bjelkeman-again A MBA for working in the sofa and in the garden. A Mac Pro for when you are chained to the desk. Happiness.

<comment><USER48> I can't disagree. I just haven't had the budget :)

</comment></comment></comment></comment><comment><USER49> Here is my workspace. I really like the 3 Acer 22" monitors. They were cheap and work well. I also have a laptop with Mac OS X for my iPhone work.

<http://www.websmithing.com/my_workspace.jpg>

Nick

</comment><comment><USER50> Here's our space. We recently added a third desk to the room.

[http://www.flickr.com/photos/33766454@N02/3146045372/in/set-...](http://www.flickr.com/photos/33766454@N02/3146045372/in/set-72157611757081379/)

</comment><comment><USER51> To facilitate traveling to client sites for my day job: MacBook Pro, vim, firefox and a (paper) notebook. When I work out of town, the one thing I miss the most about my home workspace is my 3x4 foot whiteboard.

</comment><comment><USER52> Here's a picture: <http://is.gd/AU6T>

Typically I have Emacs, Safari, Terminal.app, and iTunes open all the time. Once in a while I open up MacVim and do some editing.

</comment><comment><USER53> <http://www.flickr.com/photos/jemjabella/3296058718/>

Really need to get off my butt and get some shelves up.

<comment><USER35> Wow, that's tiny! I vaguely remember working on counter tops bolted to a wall, and our space was about that size per developer.

<comment><USER53> This is only my space at home, thankfully (not that my work desk is much bigger). I actually quite like my little cupboard because it's dead space in the house. I can shut myself in if I need privacy or time to myself and not have to worry about anything :)

</comment></comment></comment><comment><USER46> I have a PC with 17" screen, also a HP laptop, Microsoft Mouse and Genuis Keyboard, Wifi Router, External Disks, lot of CDs and MP3 Player.

</comment><comment><USER54> the only "tweaking" I did to my workspace, was build a cover for the desk's surge protector Power button. I always kept hitting it and its pretty inconvenient having your computer die in the middle of working on things.

</comment><comment><USER55> I used to have a pretty normal desktop setup, the one thing that was the constant catalyst which finally pushed me over the edge to "fix stuff" was my uncomfy series of chairs (read: all of them, any chair under 500$ I've ever tried, for extended periods of seating is absolutely not something I am capable of effortlessly maintaining concentration during).

At first I thought, it's been over ten years you've been at this game clearly you're going to be at it for a long time more, why don't you just spring for a very expensive chair and get it over and done with? Well, I wasn't entirely certain that an Aeron or Leap or Freedom would actually fix my issues. Sure, people talk about them, but I wanted to _know_ for sure that it would be the end of my problems once I had gone and fixed everything up, and the only way I could know that would be to actually buy one. Seemed like too much of a gamble so I skipped that.

It seemed strange to me that all these chairs at the high end were more than I'd spend on a new midrange system altogether, so I started to think about the entire problem rather than just the chair aspect and came to the conclusion that a nice recliner is probably about the most comfortable chair I've ever had, so why not work a system around that? I ran into several examples in the DIY sphere of people doing exactly this and being rave review happy with the results, as well as examples of high end full solution workstation setups like the Zero-Gee one and a few others based around the same idea that I based my initial plans on.

Interestingly enough, a good recliner will run you less than half the cost of an aeron, but seeing as I just wanted to prototype a setup I thought well what can I use that I have just lying around the house to make it happen? I had a broken chair (high backed / gas lift / 5 roller castors setup) and an old flat bottomed entertainment unit, so I ripped apart the chair and took the gas lift part of it and drilled and bolted it to the bottom of the flat bottomed entertainment unit, this resulted in kind of a mobile trolley with enough desk space for my display items (24" widescreen, 15" acer aspire 5630 notebook, 17" 4:3 1280x1024 for the mini) with stowage space underneath the main desk for all the necessary driving hardware (mac mini + powerboards + cables + USB 3.5 SATA docking stations, speakers).

Having the entire setup on an easily movable / swivelling caddy means that it actually ended up serving as an entertainment unit for the household too, XBMC + 1080p 24" = happy housemates when it's time to kickback and relax, I just swivel the caddy 180 degrees and then it faces 2 large sofas in the living room. Or I can move the caddy in front of a larger couch for collaborative sessions with clients and colleagues. Synergy links all the systems together, the mortals can use OS X on the mini and I have my heavily customised multi workspace ubuntu compiz system on the laptop, and I can take over their session w / synergy.

When working solo I face the caddy toward my single seat comfy old sofa and pull it in and equation complete, extremely comfortable working environment, enormously productive and adaptable, all in all extremely happy with it, and I'll be even happier when I invest a little more for an ergonomic recliner which will just be a dropin replacement for my current sofa. That said, this current one is so many more times comfortable than my old office chair + desk setup that I'm in absolutely no rush to do so.

Other potential ideas for upgrading are perhaps a kinesis evolution split keyboard setup mounted on the seat arms instead of the current lap mounted keyboard + right arm mounted mousepad setup, frictionless matting for the frequent different positions of the caddy, and an intuos to replace my sketchpad habit.

</comment><comment><USER56> Browser, pdf and chm viewers, IM.

Nokia E90

Dell D830 (1920x1200), last Ubuntu x86_64/Fedora-development i586 (for Wine).</comment>


Dropbox users who want to email their files to Dropbox - <AUTHOR> http://blog.tgethr.com/post/295361661/product-update-tgethr-now-integrates-with-other

<comment><USER2> The title could really be better -- the article isn't about Dropbox users, it's about your feature. Calling for attention in a title rubs me the wrong way.

</comment><comment><AUTHOR> Let us know too if there are some other apps out there you want to email. sifter seems like one people want real bad thats been taking awhile. My personal fave would be to allow 37s writeboards to be edited right from inline replying to an email.

</comment><comment><USER3> you can natively email your files to dropbox, along with other input methods like via fax/phone/file upload, etc

<comment><AUTHOR> You can? Because as of a couple days ago people were still asking for it via their idea forums: <https://www.dropbox.com/votebox/20/email-files-to-dropbox>

Where do I find my dropbox email?

<comment><USER4> I think the OP might be confusing DropBox with drop.io</comment></comment></comment>