Jitted LLVM IR on the JVM [pdf] - <AUTHOR> http://llvm.org/devmtg/2016-01/slides/Sulong.pdf <comment><USER2> "Graal is a dynamic compiler written in Java that integrates with the HotSpot JVM. It has a focus on high performance and extensibility. In addition, it provides optimized performance for Truffle based languages running on the JVM."

"Truffle is a framework for implementing languages as simple interpreters. Together with the Graal compiler, Truffle interpreters are automatically just- in-time compiled and programs running on top of them can reach performance of normal Java."

<comment><USER3> This is something I'm looking forward to in Java 9. There is already a big effort in bringing R language to the JVM (google for project fastr on bitbucket) and it might be just a beginning. It might finally bring the interoperability between other, more specific languages and take advantage of vast amounts of libraries available for Java and other JVM languages.

Edit: link to the fastr [https://bitbucket.org/allr/fastr](https://bitbucket.org/allr/fastr) It's open source, and they encourage people to participate.

<comment><USER4> What's happening in 9?

<comment><USER5> So far Graal has been an experimental/research fork of the hotspot JVM. JDK 9 builds include JVMCI[1] as experimental feature which can be used to run graal without JVM modifications.

[1] [http://openjdk.java.net/jeps/243](http://openjdk.java.net/jeps/243)

</comment></comment></comment></comment><comment><USER6> Does the memory created by the LLVM IR get managed by the JVM's garbage collector, or is it manually managed à la C++? If the latter, I feel there's an awesome opportunity here for creating a hybrid memory-managed/unmanaged language like Terra ([http://terralang.org/](http://terralang.org/)) that takes advantage of the massive Java ecosystem while letting people write low- level code when they need performance and full control over memory.

<comment><AUTHOR> My understanding is they can either use allocation in the JVM heap, or use the Graal foreign function interface to call native malloc, which is useful for inter-operating with native libraries outside the JVM.

</comment></comment><comment><USER7> GitHub repo: [https://github.com/graalvm/sulong](https://github.com/graalvm/sulong)

</comment><comment><USER8> I assume the type speculation stuff is for dealing with bitcasts in a strongly typed environment like the JVM? (And, if so, presumably the bailout reconstructs the C heap and performs the bitcast manually?)

Also, interesting use of PICs for function pointers. What are the advantages of that approach over just using Java interfaces and letting HotSpot write the ICs?

<comment><USER9> Graal/Truffle do not have to obey the vast bulk of the Java type system.

Together they are fairly mind bending projects so it's important to understand precisely how they work. I've been studying them for about six months now so hopefully this explanation isn't too garbled.

The typical code flow in a JVM looks like this:

1\. Bytecode loading and verification. This is where the type system is enforced.

2\. Interpreting the byte code

3\. C1 compiler (very fast, low quality output) compiles bytecode to native code, inserts into the code cache.

4\. Very hot code gets recompiled using C2 (slower, high quality output).

Graal inserts itself into and replaces step 4. Once bytecode verification is done, the JVM itself imposes very little in the way of typing. You can actually disable verification with a command line flag, and then bad bytecode will segfault the JVM. The core VM sees code as being composed of methods which are contained in classes, and it wants pointers to be distinct from integers, but otherwise the JIT compilers can produce code that hardly match the Java worldview at all.

Graal is a Java JIT compiler that is, itself, written in Java. Thus it is a module which is passed some sort of input, which can be verified bytecode but can also be something else (e.g. textual source code, or LLVM bytecode), and the result of that is Graal inserting compiled code and generated metadata into the code cache. The core HotSpot engine then takes care of swapping it into the program when it's safe to do so.

So whilst Graal can compile Java bytecode (and do cutting edge optimisations whilst it does), it isn't required to do so, and thus execution of LLVM bytecode like in this example doesn't work by translation to Java bytecode, it just bypasses the bytecode layers of the VM entirely.

And that's where Truffle comes in. Because Graal is written in Java it's quite easy to expose a clean OO API, and it does so. So you can write programs that manipulate or generate Graal's IR (which is a graph based IR) and thus compile code to use the rest of the HotSpot runtime services. However graph IR is a very low level way of thinking about a program. So there is this higher level, Truffle, which allows you to write an AST interpreter in Java. It comes with what they call the Truffle domain specific language, which isn't a language at all but rather a set of annotations, and you can annotate your interpreter to indicate how it should be optimised. And then Graal takes the interpreter and the interpreter's input together, and does some incredibly aggressive optimisations on them, exploiting the fact that the compiler knows what the input to the program is. And like magic the interpreter gets loop unrolled and the overhead is boiled away until you have a JIT compiled program.

Thus for the low low price of an AST interpreter, you get a full blown optimising JITC, high end garbage collector, language interop framework etc all 'for free'. It's really quite radical and the trivial effort of writing AST interpreters means that they now have Graal/Truffle engines for Ruby, Python 3, R, Javascript, C in both raw/unsafe and managed varieties, and of course treating LLVM bytecode as a "language" is the next step.

So to answer your questions - no, type speculation is not required to work around the Java type system. It's just that profile guided speculative optimisations can often improve all kinds of programs and Graal is an aggressively speculating compiler, speculation is just fundamental to its design. And your last question doesn't really make sense because Graal integrates so tightly that it isn't so much _using_ HotSpot, rather, it actually _becomes_ HotSpot. And then of course it can write its PICs however it likes.

<comment><USER7> I would emphasize that in general Graal isn't a bytecode compiler at all, but a general purpose compiler (somewhat like an LLVM backend) that compiles IR to machine code, and that Graal has two frontends: Java bytecode and Truffle.

Also, within HotSpot, Graal isn't necessarily inserted at stage 4; it could also be used in stage 3 (or even 2, instead of interpreting), it's just not recommended because Graal is a slow compiler.

Finally, Graal doesn't need to run in HotSpot at all. Another option of running it is in SubstrateVM, which takes your language's Truffle interpreter, Graal itself and additional Java code (we'll get to that), and AOT-compiles it all to a native binary (which then serves as a JITting VM for your language). If your language requires a GC, that additional code will contain a GC written in Java. I believe Substrate includes a simple GC, but you can write and use your own.

</comment></comment></comment><comment><USER10> I wonder if this has the potential of making Swift another alternative for JVM development?

<comment><USER9> It does, yes.

At the rate new Truffle languages and frameworks are being developed, it'll eventually be possible to run almost every language on the JVM, albeit with varying levels of interop.</comment></comment>


Ask HN: Why isn't grpc popular within functional languages? - <AUTHOR> I'm myself enthusiastic Clojure programmer but I wanted to use the gRPC with my next project but I found out that the API of the java-library isn't any functional and actually gRPC doesn't have any "reference"-implementations for functional languages. Is there some reason gRPC isn't more widely used within FP community, ie. is there other
, more functional protocols? <comment><USER2> Without going deep into what 'functional programming' means, a remote procedure call is not necessarily functional. The use of "procedure" versus "function" in the name might be indicative that the remote endpoint maintains mutable state. The possibility that the remote endpoint is inaccessible indicates that the result of one call may be an (expected) integer and the result of the next call may be a (hopefully anticipated) network error.

Haskell jumps through mathematically monadic hoops to fit this class of behaviors into its functional programming paradigm. Clojure, being more practical, offers its transactional structures as a possible way of reasoning about remote calls in terms of asynchrony (a failed procedure call might be considered a process that never finishes (or not)).

Good luck.

</comment><comment><USER3> I hate to say this but it's an example of language hype not matching actual usage. I love GRPC, it's beautiful, but the fact that native implementations are only available in unsexy "old" languages should say something about the state of software development.

I'm glad GRPC is available in Java, because that's what my company uses. I have a feeling this is the case with most devs. It's annoying that I can't use it in rust, but then again, it's newsworthy if a major company is using rust for anything.

I don't think it has anything to do with a language being functional or not, it's based on sheer popularity in the business world

<comment><AUTHOR> I'm very curious how gRPC has selected the business first way; many now commonly used technologies in buiness field has very "hyped" backround, modern examples are javascript and react. I'm pretty sure it would accelerate adoptation if more developers would have tried it especially in their hobby projects

<comment><USER3> gRPC feels very industrial to me. It's similar to Google's Guava library, used everywhere but nobody really talks about it. A lot of the stuff I've seen hyped to heaven in recent years is UI related or close to it. I think we might still have a human fascination with shiny objects.

</comment></comment></comment><comment><USER4> Most of gRPC development is still done by Google, I would guess. Google would care about language popularity (and doesn't use any functional languages internally AFAIK).</comment>


Wavy URL – An Animated URL - <AUTHOR> http://wavyurl.com/ <comment><USER2> Cool but it breaks the back button and fills your history

</comment><comment><USER3> cool but pointless and you can't copy the url.....</comment>


What is a functional programming language? - <AUTHOR> http://enfranchisedmind.com/blog/posts/what-is-a-functional-programming-language/

<comment><USER2> I gave this an upmod partially because I think that it imparts a bit of theory that many people may have missed in their studies.

One thing the article doesn't mention but is an important development in the models of Church and Turing is that, computationally, the two models are equivalent by the Church-Turing thesis[1].

[1] <http://en.wikipedia.org/wiki/Church%E2%80%93Turing_thesis></comment>


Propaganda Campaign: Officials Warn That The KGB Could Infiltrate Lulzsec - <AUTHOR> http://www.techdirt.com/articles/20110725/17345215248/propaganda-campaign-against-vigilante-hacking-groups-govt-officials-warn-that-kgb-could-infiltrate-lulzsec.shtml

<comment><USER2> I can understand disagreeing with the premise. I don't understand citing lack of evidence and then making the claim that it is is "extremely unlikely" based also on no evidence. That's a very whimsical notion of probability. It seems far simpler to me to tolerate the uncertainty of the circumstances than make baseless assumptions either way. The original author managed this just fine. I don't see why TechDirt feels the need to, or why they felt it appropriate to mis-attribute the statement to "officials" in their headline.

By comparison: a month ago people here[1] and elsewhere were claiming Lulzsec might be a false flag operation by the CIA. Why would one consider that a reasonable possibility, and expect others to do so, but then consider an analogous statement a "propaganda campaign"?

[1] For example, nextparadigms, you expressed that possibility yourself:" _Could LulzSec actually be working for the Government to help create that "civilized" Internet Sarkozy was talking about._ " -- <http://news.ycombinator.com/item?id=2659640></comment>


When The Speed Of Light Is Too Slow: Trading at the Edge - <AUTHOR> http://www.kurzweilai.net/when-the-speed-of-light-is-too-slow

<comment><USER2> IMO, the obvious solution to this madness is to quantize stock trades; i.e. to only allow stock prices to change once every 10 seconds.

As long as transactions weren't announced until the end of the period, there wouldn't be any benefit from microsecond advantages. And then stock trades would begin to go back to being based on the value of the stock, not what a model says it will do in the next 2 seconds.

<comment><USER3> That would result in less efficient markets (which means higher spreads and more expensive transactions) and the market makers, who at present trade at high frequency, would capture more wealth than they do now.

<comment><USER4> Really? Do you have any evidence for that or are you just spouting off the standard line that faster trading necessarily means better trading? I don't see how any economic conditions could change enough in three or four milliseconds to justify the amount of high frequency trading that goes on today.

<comment><USER5> First, 4ms is 3.4 orders of magnitude off 10 seconds.

Second, do you have any argument that isn't based on personal ignorance?

The stock market isn't even open _at night_ , no one thinks that it is necessary to trade 20 times a second every second, they just want to. The stock market doesn't directly represent economic conditions, it represents investors assessment of economic conditions, thus it can change as fast as they can change their mind. If someone wants to only trade every ten seconds they can go ahead. If someone wants to open a stock exchange where _everyone_ can only trade every ten seconds they can go ahead.

<comment><USER6> How does a machine taking advantage of small arbitrage opportunities that last fractions of a second represent an "investors assessment of economic conditions"?

<comment><USER7> Because they have implemented their assessment-making process in code.

</comment></comment></comment></comment></comment></comment><comment><USER8> It also becoming a problem in semiconductor design: at 1GHz, light will only move 30cm between cycles. Thats not a lot if your memory isn't located close to your ALU.

<comment><USER9> Oh, wow. Out of order instruction processing makes sense now, assuming that helps compensate for lightspeed latency.

<comment><USER10> Actually, out-of-order instruction pipelines are limited by this problem because the more instructions you allow in-flight, the more stages in the pipeline. The more stages in the pipeline, the more physical distance information much travel on the chip. So lengthening the instruction pipeline runs into fundamental problems.

Hence the move to multicore.

<comment><USER11> Also, the number of transistors in the path to switching the right bits from memory (even cache) is also getting comparable to the length of pipeline sections.

</comment></comment></comment></comment><comment><USER12> The midpoint locations mentioned in this article are directly applicable to Seasteading. <http://seasteading.org/>

Many of these optimal trading locations are in the ocean. The spar buoy based structures designed by the Seasteading Institute are directly applicable, as they are about the only seagoing designs that are safe for permanent habitation. (Immune even to rogue waves.)

<comment><USER13> Eh, you don't really need habitation -- just a datacenter. It may be more cost-effective to design something specifically for this. At the minimum you're going to have to work out cooling and power anyway (hydroelectric and "just stick the heat sink in the ocean"?).

<comment><USER12> _Eh, you don't really need habitation -- just a datacenter. It may be more cost-effective to design something specifically for this_

At the minimum, there should be an expectation of the platform _surviving_ the environment. Decoupling from wave energy is the point of a _spar buoy_. Even inanimate servers are perturbed by being smashed by walls of water. Did you actually read or search on anything mentioned, or did you just go with the "stead" in the name?

<comment><USER13> I actually looked at the engineering documents -- they weren't that detailed. It's not exactly what I'd expect from a build-ready project. That said, I'm not a civil engineer.

<comment><USER12> I'll also note, if you understood what those folks are about, that many of these folks would be happy to make a home out there if someone would pay them a normal-ish salary to maintain such a datacenter. I suspect this could end up economically advantageous both for the seasteaders and whatever company wanted to establish the datacenter.

(As opposed to the 2 weeks on, 2 weeks off, hazard-pay situation people are in for offshore drilling operations.)

</comment></comment></comment></comment></comment><comment><USER14> It's funny to think that some of the physicists who've left academia to join these companies might end up being paid a fortune to work on the exact same problems that they used to be paid a pittance to work on!

<comment><USER15> There are a lot of quant funds that were started by professors. They hire a lot of PhDs in Math and Physics. And yes, a PhD in Math can make a lot of money if you end up working at a trading firm.

</comment></comment><comment><USER16> If Einstein were around today, I wonder if he'd be working on Wall Street?

<comment><USER17> He did do some trading when he was around: [http://www.independent.co.uk/news/science/einsteins- relative...](http://www.independent.co.uk/news/science/einsteins-relatively- secret-fortune-519947.html)

</comment></comment><comment><USER18> It's sad to see fast fiber optics (and the expertise that goes into building and running it) wasted on gaming the system in this way when a change in the rules would remove the loophole giving people incentive to do it.

<comment><USER19> It's not really a loophole. It's a fundamental property of the universe.

Consider currencies for example. Say someone in Tokyo was selling USDJPY at 84 and this was the best price anywhere in the world, then naturally anyone buying would want to buy from them. But the guy in London who wants to buy won't see the price of 84 until 90ms later, so he ends up buying from someone in New York at a worst price.

So the guy in London got a worse price and the guy in Tokyo didn't get a sale. Despite the fact that in an ideal world they would have been matched together, the fundamental laws of the universe conspire against them.

Essentially what ends up happening is that for any one currency you end up with a bunch of local market (NY, Tokyo, Singapore, London) all of which have slightly different prices from each other, which isn't a great situation to be in. Reducing latency won't make this problem go away, but it helps flatten out the markets and ensures that people get the best price globally (as opposed to just locally) wherever possible.

<comment><USER18> You're assuming the conclusion, that continuous buying and selling is the only possible way to run a market. But another way to run it would be to have an auction every five minutes. That way there are more buyers and sellers to match up, so it's more likely that everyone gets a fair price. And don't talk to me about liquidity - nobody really needs to trade that quickly.

<comment><USER19> In a way we have what you're suggesting. Look at what happens overnight when exchanges are closed. You see a big jump from the closing price to the opening price the next day. Even though you can't trade over that period _the price still changes_ \- you just restrict trading and price discovery to people who can do OTC or pre-market trading.

It's not as if people haven't tried other models, EBS who run one of the major currency exchanges restrict price updates to once every 100ms. They're losing customers to other exchanges who allow people to trade faster.

People with deep backgrounds in algorithmic game theory have been studying exchanges and auction design for a long time now. If someone could figure out a better design for exchanges, they'd be building it.

<comment><USER18> EBS probably wouldn't lose those customers if there were a government regulation about it. Or are they going overseas?

I'd like to read more about those attempts, if you have some pointers.

</comment></comment></comment></comment></comment><comment><USER20> The speed of light in optic fiber is about 66% of c. Is it feasible to just build a hollow reflective tube/waveguide?

<comment><USER21> I guess the article is optimistic in that sense. If you can engineer fiber that's 74% of c, or better yet, bore one of your mirror holes directly through the center of the earth, between nyc and shanghai, or something even crazier, you can make a lot of money.

<comment><USER22> If you have the capability to bore a hole through the center of the earth, you would be so much more advanced than the current state of the art, that our puny earthling money wouldn't buy you anything you couldn't get in easier ways.

<comment><USER20> I was just wondering if hair thin, hollow, reflective tubes could be made cheap enough for oceanic data cables. It would obviously be more expensive than regular fiber.

<comment><USER22> And the advantage wouldn't be that big. Especially compared to co-locating.

<comment><USER23> You can't colocate at two stock exchanges at once, which is required to make use of the arbitrage opportunities the article talks about.

<comment><USER22> Ah, ok.

</comment></comment></comment></comment></comment></comment></comment><comment><USER24> Most exchanges that trade "arbitragable" instruments are in the same timezone and geographic location (NY-Chicago is one exception). There is no point having the optimal colo between TSE and NYSE because they have no overlapping hours nor do they have anything that trades on both and is fungible.

This research is patently academic. This is what happens when two pointy heads in ivory tower with zero empirical trading experience dream up something. Then all geeks go ga-ga talking about fiber optics and sea steading and other bs.

<comment><USER25> "There is no point having the optimal colo between TSE and NYSE because they have no overlapping hours nor do they have anything that trades on both and is fungible."

There is tremendous overlap amongst various stock exchanges, OTC's, dark pools (12% of US trading), and of course there's Forex which is 24/7.

</comment></comment><comment><USER26> Maybe we could use quantum entanglement devices to allow for faster trades? Since the speed of light in the medium is 0.66c you could probably get as close to c as possible.

<comment><USER27> There's no known way to transfer information faster than the speed of light (and if there were, there are some relativistic tricks you can play to actually send information backwards in time).

<comment><USER28> Interesting, what are those tricks?

<comment><USER27> I can't find the article I was thinking of, but <http://sheol.org/throopw/tachyon-pistols.html> gives the general idea.

<comment><USER13> In fact, just writing the light cones for an event with two different frames of reference will yield the same result. One of those fun little first-year special relativity results.

</comment></comment></comment></comment></comment><comment><USER29> That cable map is at [http://eu- ix.equinix.com/joomladev/images/repository/Equinix...](http://eu- ix.equinix.com/joomladev/images/repository/Equinix_TGMap_MTS_15.pdf)

</comment><comment><USER25> Automated trading is almost to an equilibrium, where the costs will begin outweighing the profits.

<comment><USER30> Why?

<comment><USER25> Quantitative trading companies are spending more and more money to trade faster, because the barrier to entry continues to plummet. For example, they used to install software programs on computers, now they actually hard-wire programs directly to motherboards to shorten the execution time. As the article mentioned, trading firms are investing heavily into expensive fiber optic lines instead of traditional internet. For these reasons and many more, the fraction of a penny that each trade earns them also continues to grow smaller as the arbitrage that they trade on grows smaller because every firm is investing into the same expensive strategies.

<comment><USER30> The vast majority of quant firms are not high-frequency firms.</comment></comment></comment></comment>


Deception as a Way of Knowing: A Conversation with Anthony Grafton (2009) - <AUTHOR> http://www.cabinetmagazine.org/issues/33/burnett_grafton.php <comment><USER2> And do read to the end, including the follow-up correspondence.</comment>


Darktable 3.2.1 - <AUTHOR> https://www.darktable.org/news/ <comment><USER2> Workflow changed with darktable 3 and to get the most out of it I recommend reading this article: [https://pixls.us/articles/darktable-3-rgb-or-lab-which- modul...](https://pixls.us/articles/darktable-3-rgb-or-lab-which-modules- help/) Many modules - that still work - are now deprecated in favour of RGB workflow new modules. The article above suggests proper alternatives for each of them.

<comment><USER3> It's mostly the same since 3.x though. The filmic rgb code got a pretty spicy color science update though. I'd even wager it's better than Lightroom in that aspect.

</comment></comment><comment><USER4> I will definitely give this update a try today!

After switching to Linux I had trouble replacing CaptureOne, mostly because of its simplicity. Pretty much every setting has a sensible default, and making the most important changes to a photo (exposure, sharpening, noise reduction, levels, etc) can be done without being exposed to any overly-complicated UI.

For awhile, I switched rapidly between Darktable and RawTherapee, not really satisfied with either. Even after doing my best to learn the ins and outs of each, I could still make my photos look much nicer in 10mins in CaptureOne than in 30mins in Darktable/RawTherapee.

I settled on RawTherapee over DarkTable last month. It's still the case that I can't get as good results in RawTherapee as I can in CaptureOne (not because RT is not powerful, but rather because there are SO many knobs/switches/etc and it's hard to find the ones that actually do what I want).

The moral of this rant is, I'm exited to try this new version of DT, and hopefully I can finally settle on a RAW editor that only shows me the knobs that matter to me by default without making me feel like I'm playing with a 747's control panel.

<comment><USER5> I was a Lightroom Classic user before fully moving to Darktable, and now I get better results with Darktable. Not because it is easier to work with, but because the rendering engine for Fujifilm RAW files is miles ahead of whatever Adobe uses.

Still miss my film simulations, though. They were great starting points when editing a big photo shoot.

I should give RawTherapee a try. The UI with Darktable is definitely its biggest disadvantage.

<comment><USER6> There are great free LUTs out there that can emulate the Fuji film simulations quite well. That might be worth a try.

<comment><USER5> Stuart Sowerby[1] released a few that I will try as soon as the pandemic is over, and I can go outside for photo shoots again. From the comparisons I saw, they look pretty damn close to the real thing.

[1] [https://blog.sowerby.me/fuji-film-simulation- profiles/](https://blog.sowerby.me/fuji-film-simulation-profiles/)

</comment></comment></comment></comment><comment><USER7> Darktable is fantastic, if a bit of a beast to learn. It is what finally let me sever ties to Windows/Mac for Adobe software.

I put together a little guide [1] to FOSS for photography a couple of years ago that I think is still pretty relevant (happy to hear about anything I should update!), including resources for learning Darktable.

[1] [https://9bladed.com/post/foss_photography/](https://9bladed.com/post/foss_photography/)

<comment><USER8> How does one manage round trip to photoshop with darktable?

With lr it's one click and the edited image appears in the strip.

<comment><USER7> Depends on what you want to do, if you want the edited photo in an external program, you can export it with a click to the open it elsewhere (and re- import it back if you need). If you want to do raw edits, you'll need to make sure changes are synced via a sidecar XMP file, but I'm not sure what things will overlap or not with external programs. So you can use Darktable for organization and then do edits elsewhere, if that's what you want, though Darktable is more about its editing capabilities than as a database. It does give you tagging and do all that too. You can also extend with LUA, so probably you can have a simple script to automate any trip out to another program (I've seen some for doing things like HDR editing, for instance).

</comment></comment></comment><comment><USER9> I was worried when I moved to linux from Windows that I would miss Lightroom but Dark Table easily replaced it!

It's fantastic and I now I prefer it to Lightroom (Although I haven't used the latest version of Lightroom).

<comment><USER10> I tend to use [https://rawtherapee.com/](https://rawtherapee.com/) for processing CR2 -> JPG images, and use my own filesystem for organization.

That said I shot a model this week and went back to trying to use Dark-table to go over the results as quickly as possible, it was actually pretty efficient to rate the images.

(In an hour-long shoot I'd taken about 500 images, and it was painless to look at each RAW file and star the ones that I wanted to keep. I went through everything and ranked about 50 as three-stars, then after a bit of thought and coffee marked the 25 I was going to hand over to her as 5 stars which I could then later process and edit with rawtherapee afterwards.)

<comment><USER11> > use my own filesystem for organization.

This got me interested. Care to elaborate?

<comment><USER10> I guess there are a lot of photo-managers that let you import your images, tag them, find duplicates, etc. I don't want to touch anything like that - I want to keep my images in a structure that makes sense to me.

Keeping my own structure is one reason why I don't use any software that won't work "in-place". So I chose rawtherapee because I can point it at a directory of raw images, get a set of JPGs out, and it won't try to move/file/organize them behind my back.

Anyway my structure looks something like:

        /srv/
        /srv/images/
        /srv/images/2020
        /srv/images/2020/08/
        /srv/images/2020/08/05.Claire
        /srv/images/2020/08/05.Claire/RAW
        /srv/images/2020/08/05.Claire/JPG
        /srv/images/2020/08/05.Claire/Results
        /srv/images/2020/08/12.Sanna
        ..

Basically data-based, but I also create a ".info" directory beneath each per- person tree which will have:

         location=Blah
         event=Random Shot|Birthday|Party|Event
         date=05.08.2020
         tags=model,claire,monochrome
         theme=pirate
         contact=phone-number|email|address
         ..

Then I have a shell-script that lets me search for all shoots which had a specific location, tag, name, or similar.

<comment><USER12> This is completely off topic, but you've triggered me with your date format of 05.08.2020. Why not 2020.08.05?? So much less ambiguity, plus then it will match your directory structure!

<comment><USER13> YYYY-MM-DD formatted date strings also sort better when sorted as text.

<comment><USER14> AKA ISO 8601

</comment></comment></comment></comment></comment></comment></comment><comment><USER15> I'm always glad to see this stuff move forward. I recently got back into photography and was delighted to see the state of OSS software. However, because I could never find a comparison between rawtherapee and darktable I downloaded both to try each, and I just never could understand how darktable really worked[1]. Rawtherapee just seemed instantly more intuitive. For those that have used both, is there anything I'm missing between the two? And does darktable just better mirror lightroom and therefore is better for Adobe converts?

I hope I don't start any flamewars, this is a genuine question. And I remember initially there was some statement that rawtherapee handled x-trans RAW files better but some other people said that because they use the same software it doesn't matter. I intended to write up a blog post on both of these at some point for people in the future who have these questions, but time is what it is I haven't had the time to sink into it to get an intimate understanding of both (I still have a lot of photos I need to go back and process generally).

[1]Admittedly have not put in the work of going through guides or anything it was just kind of fumbling around in the software.

edit: Didn't know asterisks italicized, though I should have... Replaces asterisk with [1] instead...

<comment><USER6> Frankly, Darktable does not mirror Lightroom in anything but the basic screen layout. Its tools are by and large entirely different.

A few months ago, I tried to do a big comparison of RAW developers, maybe you'll find it interesting: [https://bastibe.de/2020-05-01-raw-developer- comparison.html](https://bastibe.de/2020-05-01-raw-developer-comparison.html)

What I learned from that is mostly that these are all massively complex programs that can't really be judged without investing a few months into them. But even at the superficial level that can be compared in a trial month, there are serious differences in how even the simplest tools work in all of these tools. And that many of them actually exhibit quite severe artifacts.

But Darktable and RawTherapee were among the best of them in terms of results. One truly does not need to invest money in a RAW developer if one doesn't want to.

If you don't already, head over to discuss.pixls.us for in-depth discussions of Darktable's and RawTherapee's inner workings.

</comment></comment><comment><USER16> I recently got back into photography and I've been seriously impressed by darktable. Its tooling is fantastic, and I was worried that I'd struggle now that I'm 100% Linux.

The only downside is the workflow and interface. In my opinion every piece of software on the market now has adopted the wrong workflow in separating photo management from the edit screen, e.g. the light table/dark room split in darktable. The film photography workflow doesn't make sense to me in a digital world.

Apple got it spot-on with Aperture, and I will forever resent them for abandoning it. Its interface and flow were basically perfect for me. Everything being on one screen made it so quick to adjust lots of photos. Everything since has gone the route of Lightroom and I find it really annoying.

But, darktable is free and the tools are good. I can deal with it having the wrong workflow. It has helped me get back into photography again.

<comment><USER17> > Apple got it spot-on with Aperture, and I will forever resent them for > abandoning it. Its interface and flow were basically perfect for me.

Same here. I don't even care how much it costs, I'd pay dearly to get a supported and updated version of Aperture. Whoever worked on its UI is worth their weight in gold and then some.

</comment></comment><comment><USER18> The submit url should be changed to [https://www.darktable.org/2020/08/darktable-321-released/](https://www.darktable.org/2020/08/darktable-321-released/), which is the actual url to the changes related to 3.2.1?

<comment><USER7> And here is a blog post going into the changes too: [https://www.darktable.org/2020/08/darktable-3-2/](https://www.darktable.org/2020/08/darktable-3-2/)

</comment></comment><comment><USER19> Darktable is one of those OSS gems that deserves more attention than it usually gets. It's usually positioned as an alternative to Adobe Lightroom. However, I think it's fair to say that there's very little left in Lightroom that Darktable doesn't offer at least three or four alternatives for. This is not like The Gimp vs Photoshop but more the other way around. IMHO, around the 2.0 release, it more than caught up in features. Since then, UI polish, a crazy amount of features, etc. have widened the gap in terms of features and utility. There are quite a few features unique to Darktable that Lightroom simply does not have and that people would normally use things like the Gimp or photoshop for. Masking alone (which works on pretty much any of the dozens of modules) just unlocks a ton of creative possibilities.

Disclaimer, I'm not a Lightroom user and have used Darktable exclusively for the last five years or so. I actually use the mac builds, which is hardly ideal given that OpenCL support on Apple is not great. Darktable definitely has lots of rough edges that make it less than ideal for some less experienced users to switch over to. While the UI has improved with this release, it is still quite complex. Many of the modules are not for the faint of heart and have steep learning curves. Simpler to use alternatives are available (there are usually multiple ways to do things in Darktable); some of which are explicitly intended for novice users. Most of the complex ones are awesome once you figure them out.

The highlight in this release for me is the improved integration between the exposure and filmic module. Both existed in previous versions and they were always intended to be used together. However, in the new version they finally replace the base curve as the default way to do tone mapping. The new default scene referred mode is basically about these two modules being turned on by default and the base curve no longer being used by default. I noticed already with 3.0 where I manually configured my defaults to do the same that this reduced the amount of work I had to do. Usually, I do some minor tweaks to the grey point with the exposure module and then finish the job in filmic. In 3.2, these seem to do a better job out of the box than in 3.0; even for (deliberately) under exposed photos. If it is too dark, you simply add a few stops in the exposure module and filmic dynamically updates the black and whitepoints. So instead of blowing out your highlights, it actually brightens the grey-point while compressing blacks and whites in a way that makes sense. Unlike the base curve, this is dynamic and unrelated to pre defined camera profiles for what would constitute a good base curve for a camera that you get with the old basecurve module. I never really got usable results with that.

I ended up deleting my settings and presets to get the new defaults in 3.2. If you upgrade from an older version and want to benefit from the new & improved defaults, you may want to do the same. I noticed when upgrading an old 2.x version on my Father's laptop that doing this may also be needed if it fails to start because of changes in its internal db (he was still on 2.4). Unfortunately it did not fail gracefully and I had to drop to the command line and rm -rf the old files. Stuff like this is exactly the kind of rough edges that make this product still a bit of a hard sell for less experienced users.

<comment><AUTHOR> Fully agree with this view The variety of ways you can achieve your desired results is truly amazing. I also found Bruce Williams' tutorials very helpful [https://www.youtube.com/user/audio2u](https://www.youtube.com/user/audio2u)

<comment><USER19> Yes absolutely; his channel is great. I'd also recommend watching Aurelien Pierre's elaborate introduction to Filmic. He's the main developer of that module and one of the core developers of Darktable.

A lot of thought went into the last few releases and it shows.

</comment></comment></comment><comment><USER20> Good news, it's a great program.

It might be better to use the URL about the release: [https://www.darktable.org/2020/08/darktable-321-released/](https://www.darktable.org/2020/08/darktable-321-released/) (rather than the "news" page)

</comment><comment><USER21> Back in the day I bought a lightroom license because there was no stable version of darktable for windows. I should probably reevaluate that decision these days. (That was pre lightroom cloud. Also I can't find my lightroom key anymore and will not switch to a cloud solution.)

</comment><comment><USER3> New dt users: be sure to read this: [https://pixls.us/articles/darktable-3-rgb-or-lab-which- modul...](https://pixls.us/articles/darktable-3-rgb-or-lab-which-modules- help/)

</comment><comment><USER22> Does anyone know if Darktable supports Fujifilm film simulation profiles like CaptureOne?

<comment><USER6> Have a look at these: [https://blog.sowerby.me/fuji-film-simulation- profiles/](https://blog.sowerby.me/fuji-film-simulation-profiles/)</comment></comment>


Cisco Plans Big Push Into Server Market - <AUTHOR> http://www.nytimes.com/2009/01/20/technology/companies/20cisco.html?_r=1&partner=rss

<comment><USER2> It makes a lot of sense. Some of Cisco's recent products, the ASA comes to mind, are essentially x86 servers to begin with. Also, while the VMWare Infrastructure client is pretty handy, an IOS-like virtual machine management console would be a real win for us command line aficionados.

</comment><comment><USER3> I honestly cannot imagine why someone would _want_ to get into the x86 server market. It's a brutal race to the bottom. The only way to make money here is as a systems integrator.

</comment><comment><USER4> It would be good to see some more competition here. Sun, Dell, HP, IBM, they each have interesting strengths. But Cisco does have a chance to shake things up.

</comment><comment> patrickg-zill This is a puff piece.

I will wait until Cisco ships something into the market.</comment>


Run Nasm X86/x64 Assembly Code Online - <AUTHOR> https://dbgr.cc/l/nasm <comment><USER2> Oh god. Just checked out this dbgr situation. Looks like they allow you to run arbitrary code inside one of their docker instances. DISASTER.

Never ever use docker for security. With a Linux kernel local root exploit (which are indeed plentiful), one can escape from a docker container into the initial namespaces of the system.

It doesn't even look like they bother keeping their kernel up to date either.

DISASTER!

I liked the approach I saw at a couple other sites -- compile an interpreter to JavaScript with emscripten, and have all the code execute client side.

<comment><USER3> Can you tell if the system running Docker is not itself virtualised...?

<comment><USER2> dmesg indicates Bochs BIOS.

</comment></comment></comment><comment><USER4> now where did i put the fuzzing finds of nasm...

</comment><comment><USER5> Nice, how interrupts are handled? core dumped on int 3</comment>


New open source full-featured Git client for Mac - <AUTHOR> https://github.com/git-up/GitUp

<comment><USER2> Hmm I thought this would be a bigger deal on HN, especially considering how much commentary there was[1] when the limited, sign-up only pre-release version was announced.

I was hoping there would be, too, because I am clearly missing something(s) about why GitUp is so great.

In particular, how is this UI:

[https://www.dropbox.com/s/uo0n1d0iypz5sxh/Screenshot%202015-...](https://www.dropbox.com/s/uo0n1d0iypz5sxh/Screenshot%202015-08-21%2014.34.29.png?dl=0)

...in any way better than this one:

[https://www.dropbox.com/s/c3hfbo17xykrp72/Screenshot%202015-...](https://www.dropbox.com/s/c3hfbo17xykrp72/Screenshot%202015-08-21%2014.37.08.png?dl=0)

Isn't combining multiple views of different interconnected bits of data the main thing that (can, if done well) make a GUI more powerful than the command line?

I only played with GitUp for a few moments, and perhaps importantly my current project is at this stage a one-man show with a basically linear set of commits to master, but I nothing jumped out at me as to why I would use this instead of SourceTree.

Is the appeal of GitUp mainly the esoteric features like "Swap with Parent (Move Down)"?

Why are so many people raving about GitUp on the interweb tubes is basically what I came here to find out (but didn't).

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

EDIT: OK, a lot of the special powers of GitUp are spelled out in pretty good detail here:

[http://forums.gitup.co/c/docs](http://forums.gitup.co/c/docs)

My 15-minute take seems to be that it has a worse UI than SourceTree for a typical (for me) git session that consists mainly of code-review-commit- repeat, but it is especially empowered for doing things like rewriting commits already committed, or "splitting commits".

</comment><comment><USER3> Congrats on the 1.0, this is awesome! I love GitUp, and the source code looks clean as well. Some pointers to the good bits:

[https://twitter.com/GitUpApp/status/633822376568852481](https://twitter.com/GitUpApp/status/633822376568852481)

The downside is that the project is now in "scratch my own itch" mode:

[https://twitter.com/GitUpApp/status/633821906387406848](https://twitter.com/GitUpApp/status/633821906387406848)

So this is not going to be a commercial Tower.app killer (sadly, they deserve it :P - data corrupting bugs aren't being fixed etc. - but I guess SourceTree being free doesn't help the market.)

<comment><USER4> Hmm... "data corrupting bugs"? Honestly, we haven't heard of a single case in all of our 5 years of being on the market (--> a Tower team member here).

Could you please get in touch with more information via email@example.com ? We'd be happy to help!

</comment></comment><comment><USER5> Does it support Git Flow? I couldn't really tell by looking at the repo or the site.</comment>


Exploiting CVE-2011-2461 on Google.com - <AUTHOR> http://blog.mindedsecurity.com/2015/03/exploiting-cve-2011-2461-on-googlecom.html

<comment><USER2> The presentation: [http://www.slideshare.net/ikkisoft/the-old-is-new-again- cve2...](http://www.slideshare.net/ikkisoft/the-old-is-new-again- cve20112461-is-back)

The testing tool: [https://github.com/ikkisoft/ParrotNG/](https://github.com/ikkisoft/ParrotNG/)

<comment><USER3> Disclaimer for those who don't know: please please please do not run this code against hosts or on networks you do not 100% control or have permission to exceed authorized access on. Your school or workplace will not find this kind of research funny when you accidentally take down a server.</comment></comment>


The case for the phone in the toilet - <AUTHOR> http://mashable.com/2013/10/07/nhl-locked-bathroom-twitter/

<comment><USER2> Would that be a payphone or are you implying one's own smartphone?</comment>


The myth of the eight-hour sleep - <AUTHOR> https://www.bbc.com/news/magazine-16964783 <comment><USER2> I wear a Motiv fitness monitor ring and it tracks sleep very accurately. I've noticed over the past year wearing it that the nights that leave me feeling best in the morning usually have a period of 45 minutes to an hour that log as awake time -- usually about half way through my sleep session. Oddly, I rarely recall being awake during this time.

</comment><comment><USER3> I recommend Why We Sleep which says this 2-sleep pattern is not normative for humans. Instead, siesta pattern is.</comment>


More screen is better for productivity, studies show - <AUTHOR> http://skeptics.stackexchange.com/q/1700/96 <comment><USER2> Just to throw a wrench into this:

It has been shown that changing environments improves performance and memory. So moving around the house, or going to different locations, can improve productivity as well.

Using a ton of big monitors keeps you chained to your desk and a desk chair.

I use a 13" laptop but I use 9 OSX Spaces and constantly switch between them. I do think that it's nicer to have more screen real estate, but it's a tradeoff between that and mobility.

As it is now I move constantly throughout the day. I will do some work at Starbucks then take a break by walking a few blocks to another coffee shop. This provides a lot of outdoors time and lots of different environments. There is a lifestyle benefit here for me too.

Even if I just stayed in my home or office, I would not enjoy being chained to my desk. When I work at home I rotate between the bed, the desk, the bar/barstool, the recliner, the couch, outside on the balcony, and even standing up sometimes.

I believe this boosts my productivity and keeps me refreshed. Anyway I'd love to see some studies done not just on screen space but on the benefits of highly mobile working.

<comment><USER3> My strategy is similar:

For code-related tasks, I prefer the portability of my 13" laptop with multiple virtual desktops. When I find myself in a rut, I'll get up and relocate and regain productivity immediately.

I'll usually start my day at home in the office area, then move to a coffeeshop for the afternoon, then relocate to another later, then home again possibly in the living room or dining room. Sometimes I'll meet up with friends and co-work; just knowing that people around me are being productive helps me be productive too.

For things like consuming content, research, and making art/graphics, and relaxation, I prefer my 24" desktop at home.

Another interesting point is I feel like I have an association between the device and the types of activities I perform on them, to the point that I find it hard to write code on my desktop these days.

<comment><USER4> > Another interesting point is I feel like I have an association between the > device and the types of activities I perform on them, to the point that I > find it hard to write code on my desktop these days.

Do you have a similar association that you can only write code when you are on your 13"?

If you do, it sounds like you have trained yourself nicely to be productive.

<comment><USER3> It's hard to tell since I don't have an equivalent control device, but I believe I do. It feels like with the limited screen real-estate, where my code takes up about 60% of the screen and a terminal for the rest, I can focus a lot better when I do.

Every so often I'll still get distracted and start browsing HN, but that usually means I need to relocate or take a break from the computer.

<comment><USER4> Also see <http://news.ycombinator.com/item?id=1917725>.

I've also found (what I'm sure everyone knows and is thinking about but don't seem to mention in this thread) that the optimal number of monitors or screen resolution also depends on what tasks is being worked on as well as which tools are used.

Compare: Tools like Squeak/Pharo Smalltalk requires a fairly large screen space for a single window since all the "windows" open within the native window and it's harder to work with overlapping windows within that space.

vs.

Dolphin Smalltalk which supports multiple native windows, where you can do alt-tab fairly quickly and with a culture of writing shorter methods, a smaller screen is viable.

or

when I am running vim+vimclojure, I use a wide vim window so i can run tabbed buffers on the left and the output on the right.

Related to productivity: I've tried experimenting with various approaches, including having online/offline time. Where I break up (primarily development related) tasks into online-information-doc-gathering and offline-coding tasks. Seems to work for efficiency, but I can't stick to it.

</comment></comment></comment></comment></comment><comment><USER5> Screen distance from the user greatly impacts the usability. I would also add that if you have HN (or Reddit) open on one of those monitors, you probably aren't going to be more productive.

For the benefits of those on HN, here is my answer to the question on Skeptics-StackExchange:

==

Having championed the purchase of five 30" for the equity research officers at Itaú Securities, I have some anecodotal evidence to share, which pretty much invalidates any study regarding 30" monitors.

Here's the deal:

A 30" monitor is pretty large and its distance from the user GREATLY impacts its usability. For a 30" monitor to be usable it needs to be placed on the desktop at about an armslength to be comfortable and productive. For many desks, this distance is an impossibility, especially corner desks where the monitor is catacornered.

Most people when they use an external screen place it just behind the keyboard. This does not work with a 30" monitor, as it is too close and you end up shifting your head up and down and laterally far too much.

This effect is significant enough to invalidate pretty much any study that doesn't take this into account and control it.

At Itaú Securities all five 30" monitors were first used on corner desks with the monitor catacornered. The major factor which determined if it was useable was each analysts body posture when seating at their desk. Those analysts which sat slouched in their chair and leaning back when they were modifying their financial models in Excel, loved the monitor and said that others would be allowed to use it when you pry it from their cold dead fingers. Those with good posture ended up sitting far too close to the screen and since the monitor was catacornered, they were unable to adjust the distance to be comfortable. None realized that monitor distance were the reason for their discomfort. All that sat with good posture abandoned the 30" monitor and return to their crappy 19" monitors. It was only when one of the monitors was relocated to a non-corner desk and placed at the very back of the desk when we realized the impact of monitor distance and comfort.

Anyways, I've never seen this particular issue with larger monitors discussed anywhere with regards so I figured I'd share it here. I'm sure this issue is equally applicable to multi-monitor setups.

<comment><USER5> I wish I could go back and add this to my YCombinator app (without it being marked as late) as "something I have discovered" as it's fairly original semi- scientific research and more interesting than the answer I originally put.

</comment></comment><comment><USER6> I use four screens, 1 30", 1 24", and 2 20", for a total of 9.7 million pixels, with some awesome monitor arms. I wrote all about it at [http://littlebitofcode.com/2010/02/07/how-i-learned-to- love-...](http://littlebitofcode.com/2010/02/07/how-i-learned-to-love-monitor- arms).

I like to think of multiple monitors like a large physical workspace. While you are only working on one thing at a time, you can have reams of supporting information available ready to view without stopping what you are doing, saving yourself a context switch. In a physical workspace, you spread your work out so you can see it all at once, it's not advantageous to pile it all on top of each other and shuffle piles, same with computers.

I added monitors one at a time over a period of about a year. This gave me time to adjust my workflow across each transition, and I had a specific idea of what I would use additional screen space for each time. There are still times when I feel like I could use some additional work area, but they are relatively spread out. If money were no object, I would have 3 30" displays, with 2 24" displays above them. I might replace a 20" display with a 30", but I don't want to use less than 4 monitors, and I probably won't do that any time soon.

</comment><comment><USER7> I see a lot of talk in the main post about screen size but nothing about what actually matters which is screen resolution. I just picked up a new Vaio Z series with a 13.1 inch screen for when I am on the road. While it only has a 13.1" screen which would seem pitiful at first glance, it is Full HD resolution (1920x1080) and it's quickly becoming one of my favourite machines to develop on. Now I'm not saying anything about optimal screen size because of course everything needs to be comfortable to the viewer's eyesight... but if you're having productivity discussions then total resolution is the bar to measure by. What size and how many screens that is spread across is mostly a matter of personal ergonomic preferences. (though multiple vs. single screens and the ability to truly separate content probably does have some limited impact as well)

<comment><USER8> There are a lot of people out there, myself included, that don't have great vision, that desperately want bigger pixels, not smaller pixels.

The small pixel people are winning. :(

<comment><USER7> Trust me, I do understand that well too. My girlfriend has very poor vision, borderline legally blind for driving. When we purchased a notebook for her we went with a 17" screen but also very high resolution. I then used Windows DPI scaling to bring everything up to a size she can read easily but the high native resolution keeps the image nice and sharp. She was very pleased with the results and can use it with ease.

<comment><USER8> Windows DPI scaling used to not work very well. Maybe it has improved. For example, I remember Windows XP applications with text running off the edges of windows and buttons. Perhaps Windows DPI scaling is a reasonable option now.

</comment></comment></comment></comment><comment><USER9> I've happily gone from a pair of 19" 4:3 monitors to one 24" 16:9 monitor.

The thing that's made the net loss of screen space feel like a productivity boost is that now I make very heavy use of Spaces (which I absolutely love), whereas before, I found it pretty jarring with the dual screen setup, and rarely used it.

I've also discovered that four spaces arranged horizontally is perfect for me. The weird thing is that Spaces became MORE useful when I disabled the feature that wraps around from the first and last spaces. (It's not a stock tweak - you'll need to download Tinker Tool to access the option). The very slight discipline this imposed helped me develop a really clear idea about which space I was in. I can now "see" them floating on either side of my actual screen.

So now I think that "single" vs. "dual" is overly simplistic. In truth, optimized productivity can also result from the use of virtual screens, without which, a dual arrangement may be more efficient, but with which, the single screen suddenly gets a lot more useful.For the sake of focus, I love knowing where stuff is, and being able to 'push' it out of view until the precise moment I need it. When I do toggle to it, it's one of only one or two things visible. As a result, I always feel like I'm entirely focused on whatever is immediately in front of me. Also, the vague Minority Report sense of big horizontal scrolling never gets old.

Of course, how well this works varies depending on the task. Obviously, different people have very different jobs. Also, how well people can imagine and handle virtual spaces is by no means constant. In any case, if you're generally a fan of dual screens, but are not 100% satisfied, and have a good spatial imagination, try one big screen + Spaces, and see if this combination makes a difference.

</comment><comment><USER10> So, the person asking the question says there are no independent studies. The only answer cites two studies about XGA displays and one study that claims that "some tasks can be performed faster". The title of the post on hn is: more is better, studies show. With all due respect but this is ridiculous.

Edit: So the question on stackoverflow was asked by you.

<comment><AUTHOR> They compare screens up to 24 monitors and 42". The studies mentioned are clearly more reputable than the NEC and Apple sponsored ones you find on other sites.

I don't think that a study by a monitor vendor that shows that you need more and larger screens is really valuable.

</comment></comment><comment><USER11> There was an article about this on Lifehacker written by Clay Johnson; "...there's an optimal number of pixels you need to complete the tasks you need to complete. Worry about that number, not the number of monitors you have. That optimal number, for the vast majority of people is about 2500x1400. In 2003—before widescreen became commonplace—it was the case that 2 17-20"(2560 pixels wide) LCDs was the only affordable way to acquire an optimal number of pixels. Today, you can pick up a 27 inch display with 2560x1440 pixels along with a computer attached to it for under $1500. This number of pixels allows you to accomplish most tasks—whether it's writing code and debugging, writing a blog post and reading primary sources, or editing one spreadsheet with data from another."

Source: [http://lifehacker.com/#!5616859/is-the-multiple+monitor- prod...](http://lifehacker.com/#!5616859/is-the-multiple+monitor-productivity- boost-a-myth)

That was written back in August of last year, so the price of a 27 inch display is even less now...

</comment><comment><USER12> I've often wondered about this. There are a lot of variables and few folks have done the really heavy lifting of trying to propose an experiment that eliminates as many as possible.

My current setup is two 24" monitors one above the other in 'landscape' mode. It is more productive (for me) than two monitors that are adjacent. For a while at Google I used one monitor in front of me and one to the right in portrait mode. I find reading code in portrait mode helps.

When I'm playing with one of my old VAXes and have a VT420 with its 25 line by 80 column screen it is almost comically painful.

However I'm about to embark on a 'new' thing, which is three monitors, a 30" one in the center and then two 24" monitors in portrait mode on either side. This achieves the curvature which is important (you really do want your monitor surface as perpindicular to your eyes as possible) and avoids the seam in the middle for large surface area things.

I have tried off and on to find someone who either makes, or could make, a SWXGA (stupidly wide XGA) which is 2550 x 600 or maybe 1920 x 480. With a touch screen. In my ideal world this would be at the base of my center monitor, display useful information (think a whole monitor for a system tray / atop / system monitor / notifications) that I could touch (on the info) to bring up an app on the main display to dive deeper into it). I currently have the 10" MiMo monitor [1] with some not so clever yet custom code to interpret screen touches as non-motion mouse clicks (which is to say I try not to reset the mouse co-ordinates to the Mimo monitor but I do want the 'click' event delivered to the window that is open. If you're digging around for a startup plan with a hardware component you are welcome to make me one of these, happy to give a requirements document to anyone who wants one.

As for the mechanism that makes one more productive, its apparently removing the physical action. Specifically if I need to refer to another window/data to continue I don't have to move my mouse and click I can just 'look'. My first use case for e-Readers was keeping PDFs of component data sheets open on my workbench much like one used to have a databook open to the correct page.

[1] [http://www.mimomonitors.com/products/imo-monster- touch-10-in...](http://www.mimomonitors.com/products/imo-monster- touch-10-inch-mini-usb-touchscreen-monitor)

</comment><comment><USER13> I used have a 2 monitor setup, until I found myself getting tired of looking left and right to click stuff all the time (monitors where 24" each). I switched to a single 32" and I was honestly able to focus more, in my case more screen is more productive but in a single monitor setup.

</comment><comment><USER14> This somehow reminds of a productivity study done with factory workers (sorry couldn't find a source of sime kind, so this if from memory). They had to carry out relativly simple manual labor taks, the goal of the study was to analyze if there is a link between productivity and brightness of the workplace. After increasing the brightness in the factory productivtiy was rising. So the brightness was increased again and again to find the optimal lighting. Some day workers were showing up wearing sunglasses. The actual reason why productivity rose wasn't the brightness but the attention those blue collar workers were getting from the scientist carrying out the study.

My guess is that when you are beeing monitored (no pun intended) productivity will always rise. Especially if you get a fancy curved surface display like in the microsoft study.

<comment><USER15> <http://en.wikipedia.org/wiki/Hawthorne_effect>

</comment></comment><comment><USER16> While I don't doubt that more screen real estate helps most programmers, it's not a hard-and-fast rule.

In the past few years my work environment would change from day to day (different offices and coffee shops) so I didn't have the luxury of lugging around large monitors and instead worked exclusively from my laptop's small display. As a result of this and my dislike for Mac OSX's default window navigation I set up my own hotkeys for switching between my most frequent applications (documented here: [http://techiferous.com/2009/12/streamlining- your-workflow-wi...](http://techiferous.com/2009/12/streamlining-your- workflow-with-applescript/) ).

Now when I am presented with an option of hooking up more monitors to my laptop I decline because my inter-app workflow is so streamlined on (and optimized for) my tiny laptop screen.

</comment><comment><USER17> Jeff himself has had three 19" monitors at home: [http://www.codinghorror.com/blog/2004/06/multiple- monitors-a...](http://www.codinghorror.com/blog/2004/06/multiple-monitors-and- productivity.html) I don't think he disagrees having a similar arrangement is superior over the alternative of a large monitor. It is not a "Joel vs Jeff" thing as it is made out to be, in the question.

Most of our standard apps, standard websites are designed to work at resolutions much smaller than what 30" monitor would display. It makes a lot more sense to have multiple monitors where you don't have to wrestle using Grid software to move things around. - It feels a lot more natural to have browser open in one monitor and the IDE/Text editor in other.

<comment><USER18> I find the idea of optimizing for only two applications - browser and IDE somewhat limiting.

Right now I have two browser windows open side by side on the same 30" monitor - one with the stackexchange posting, and one with the HN page where I'm replying to you.

Often I'll have more than one XCode window open on the 30" display, but sometimes I need the whole display to have all the panels open and a reasonable view of Interface Builder. At that point, I'll use the 27" display of my iMac to display documentation.

It's also very helpful to be able to have my task list open on the other screen and not have to keep opening and closing it.

Summary: Multiple screens are good because you can use the whole of one of them to focus on something while still having something else available in the periphery. Giant screens are good because you can put more things on them together.

Cost and desk space are real reasons not to have more and larger screens, but I find it hard to understand how less display can possibly be better in absolute terms.

</comment></comment><comment><USER19> I prefer as many screens as I can have. I'm currently working with 2*24', in vertical (portrait) orientation. I have a 3rd 17' simply because I don't currently want to spend money on a 3rd or 4th 24'. However I plan to soon.

For me I find a problem much easier to handle if I can spread out all the supporting information - in my case HTML, CSS, JS, PY files + Chrome and documentation. The more screen real-estate I have, the better.

Considering how much my time is worth, even a 1% increase in performance from a new screen makes it a no-brainer over a year. The same is probably true for you the reader.

I don't need studies, I'm totally convinced. I'm also convinced that you need to get used to spreading your work out to get the full benefit.

</comment><comment><USER20> Reading the post and responses, I noted that screen curvature was important at higher screen sizes.

I use a 27" iMac at home (2560×1440, 109ppi), and find the extra screen real- estate very useful. My only gripe is that a screen this large needs a little curvature on each side, otherwise its left and right sides become slightly less pleasant to work with in comparison to the center.

I'm also someone who needs things on-screen to be physically big. OS X still feels very pixel-optimised as opposed to vector-driven in its UI, so everything shrinks on a higher-PPI display. Linux on the other hand scales itself much better.

<comment><USER21> Indeed. I wish it were possible to make the fonts OSX uses bigger, especially the menu bar.

</comment></comment><comment><USER22> Despite this, consumer laptops are now commonly 1366x768 and macbooks are 1280x800.

The recent Air went up to 1440x900, but generally I'm disappointed that the standard resolution in portable screens hasn't improved for years.

<comment><USER23> Used to be that wuxga, 1920x1200, was readily available on sub-17" laptops but it seems everyone is downgrading to so-called "HD". Seems the focus is on entertainment, not business or productivity.

</comment></comment><comment><USER24> I have 6 screens hooked up to my main pc at home: <http://i.imgur.com/Vt7D9.jpg>

6 is a bit overkill (though sometimes handy) but 3 is great. At work I've got 3 hooked up to my laptop, perfect for things like TDD, especially given Visual Studio 2010 allows you to have code windows on different monitors. 1 window for unit test code, 1 window for code under test, 1 window for test runner/results.

</comment><comment><USER25> It takes too long to move your mouse from one screen to another. Using several screens is overrated. I can agree with UI developers who need to overview big graphics and use two or more screens, but for people writing text or code it is surely distracting to use more than one screen (my own experience).

<comment><USER26> Perhaps the problem is with the mouse, then, not the screens.

I've had best results with two 22-inch monitors, everything either maximized or divided vertically (two tall windows). Tiling window managers work very well for this, as does Emacs. Switching between the monitors and different workspaces via the keyboard helps tremendously.

</comment></comment><comment><USER27> I've been on both ends of the spectrum. I was initially completely satisfied with my 19" single monitor set up (ignorance is bliss). However, when I upgraded to my current dual monitor set up my life was forever changed. I definitely agree with the more real estate more productivity school of thought.

</comment><comment> Be-The-Water For me a larger monitor out does any other setup. As a dev I have multiple windows open, generally three or more and I have to move back and forth. The less key strokes, mouse movements or head movement to me means less change in context and the more I can stay on my thought processes. The more I stay focused means less time wasted. This is especially true over a longer period of dev time, or especially when you have a learning curve to work through.

I usually get funny looks from the laptop dev's when I argue the point, but I have gotten a few people to try it and most converted. It maybe a creature of habit issue or get into the practice of going through certain motions but I do not think it is subjective for each individual.

</comment><comment><USER28> So, this seems like a no brainer... how'd this get to the front page? Is there really anyone that would argue that less screen leads to more productivity? Or that virtual desktops are better for productivity than nice large monitors?

Personally I am a fan of two good sized screens (20 inch) vs. one monsterous screen. It lets me split out the work I am doing into logical groups, and overall helps my productivity.

Now, I will say being chained to a desk isn't ideal, and I still like to go to the park with some wifi to get a breather... but ultimately even with the additional comfort of being away from my desk, I am not fooled into thinking that setup is more productive...

</comment><comment><USER29> Is mobility better better for productivity? Pretty much all hackers I know now work on laptops, sometimes really small ones. Are they throwing their productivity out the window, or are we simply not measuring the right things?

</comment><comment><USER30> My current setup is 21.5 inch iMac @ 1920x1080 & 22 inches Dell, vertically @ 1050x1680.

I prefer 2 screens instead of 1 big screen. The reason is simple enough: I would like to watch movie and monitoring another stuff at the same time (quick glance for every 3-5 minutes or so). Having 1 screen would force me to either not go fullscreen (quite hard to enjoy the movie) or switch context all the time.

Also multiple screens give you this sense of "border" where you can feel natural to snap them to the edges.

</comment><comment><USER31> I have a 30' which is digitally split in 4 windows with my 13' MBP on the right below side. This means I get 5 nearly identical 1280x800 screens.

With this big screen I need to have my browser default zoom at 125% (which means 1024 in width which is exactly fine for browsing the web)

I really feel how it's slower to do things with just one window (the MBP one), especially developing.

</comment><comment><USER32> The 2 separate screens vs one large one has a lot to do with how many window managers, especially on Windows, work. If you have a decent way to divide up a big screen it may be preferable to 2 screens, but if you have apps/ windowing that works better taking up a full screen then 2 screens would be better.

</comment><comment><USER33> I have dual screen setup: a 24" screen connected to my laptop. But I find I am most productive sitting with my legs stretched out and the laptop on my lap. Anyone else?

</comment><comment><USER34> There is a lot of talk about spaces. Does anyone else find they find the transition a bit much at times?

Do people have certain configurations that work well for them?

</comment><comment><USER35> This might just be me, but isn't this result obvious?

<comment><USER36> Not at all. I agree with Spolsky about needing two monitors for GUI work, but otherwise more screen real estate pretty much equates with shifting your focus between contexts, which in my experience is what kills productivity. Knowing what you are doing is the biggest boost to productivity.

</comment></comment><comment><USER37> I personally prefer 2 screens, with the ability to separate tasks on different screens... or separate distractions to another screen.

<comment><USER38> At work I have two monitors plus my laptop's built in display which is smaller and doesn't match the "flow" of the other two. I ended up really liking this because less important things like Pandora, email, etc all live on the laptop monitor and the psychological barrier between that monitor and the other two helps me focus more.</comment></comment>


Show HN: SaaS application boilerplate - <AUTHOR> https://github.com/saasforge/open-source-saas-boilerpate <comment><USER2> I appreciate the efforts being done in this space, but I don't think this is launch ready yet. It doesn't include some of the things that make a SaaS a SaaS, and not a typical user sign up web app with admin panel.

For a SaaS framework you usually need at least: integration with a billing provider (almost always Stripe nowadays), web hook handling for a bunch of services (or a generic way of handling webhooks easily), some kind of social auth integration framework or ready built integrations for a bunch of services, bulk email support, a modular dashboard (seems you have the start of this?), a landing page generator with pricing tiers that integrate with the backend somehow, a team management option for users.

Have a look at Laravel Spark, or some of the other premium SaaS frameworks available right now for what people a now expecting of these frameworks.

Also, I'm a little dubious about your license (seems to be fixed now?). You need to be crystal clear about whether or not this is open source, or if you are trying to sell a product. "SaaS as a Service" (or SaaSaaS as I like to call it) seems to have blown up recently, but I'm usually wary of things like this. When making a SaaS, I like to keep margins and fuss as low as possible, and including a piece of software that might cause me legal trouble down the track is a big no-no.

<comment><USER3> I agree, i'm working on my own SaaS boilerplate in laravel debating oss vs paid, might be a cheaper Nova/Spark combo alternative. $99 per project is pricy, esp when a lot of projects are just testing ideas and things.

SaaS needs to have teams, projects, payments, auth, invites, and possibly be configurable for different 'types' of scenarios... projects could be optional for instance if they don't group actions by project, invites could be optional if anyone can join any team, heck even teams can be optional if you can't add multiple orgs but it's nice to have, say you run multiple brands or something....and want separate invoices with separate logos... etc...

I'm getting close to launch, thinking I might do it as a paid $9.99/month gets unlimited access to everything I do in the scope of the project. Might raise prices eventually but grandfather people in for a time. Or might do FOSS with addons that are pricier, but I don't like apps that do that -- I'd rather pay small fee monthly and use what I need depending on client.

<comment><AUTHOR> Thanks for sharing your thoughts and experience! Honestly, I don't know if teams and projects should be a part of SaaS. If so, in which context?

I wonder, how are you going to charge? Is your product is app or it's SaaS itself? And I think $9.99/month is very low price.

Any link to share? ;-)

Good luck!

<comment><USER3> Look at some apps like Clockify, Slack, Trello, Jira, Asana, all have teams, -- I really like the way clockify does workspaces, and then you clients, and projects per client. All organized nicely. This sort of model of teams/projects would probably be quite common in SaaS...think anything tagetting SMB's that need to give access to parts of the app for their employees or contractors, or use it to organize, etc...

<comment><AUTHOR> Ok, thanks! I will consider adding teams.

</comment></comment></comment></comment></comment><comment><USER4> I am a fan of opinionated full-stack frameworks, in particular for building B2B web applications which contain lots of CRUDL views.

For an open-source solution that largely revolves around the React frontend, consider react-admin [1] + its adapter for Hasura [2].

[1]: [https://github.com/marmelab/react- admin](https://github.com/marmelab/react-admin) [2]: [https://github.com/hasura/ra-data-hasura](https://github.com/hasura/ra-data- hasura), [https://github.com/hasura/graphql- engine/](https://github.com/hasura/graphql-engine/)

In Ruby/Rails-land, there is [https://bullettrain.co](https://bullettrain.co).

<comment><USER5> Anything full stack with Python/PostgreSQL/Angular?

<comment><USER4> I've previously found this site helpful for a high-level view of the ecosystem: [https://www.fullstackpython.com/angular.html](https://www.fullstackpython.com/angular.html)

<comment><USER5> Nice thanks - I had not been here. The first two tutorial links are pretty old there are to AngularJS.

</comment></comment></comment></comment><comment><USER6> Having "Open Source" in the name is slightly misleading...

> License

> Copyright (c) 2019 SaaS Forge Inc. > [https://www.saasforge.dev](https://www.saasforge.dev). You can use this > template for any purposes except reselling or purposes prohibited by law.

<comment><AUTHOR> Fixed! But I still left the part about not using the code for purposes prohibited by law...

<comment><USER7> It's (presumably) redundant for what you intend it for (you can't grant a right to break the law..) - but can still be troubling. Which law(s), which jurisdictions ?

Copyright law is fairly international through trade agreements - which is one of the reasons copyleft was such a great hack.

<comment><AUTHOR> I changed all those words to just MIT :)

</comment></comment></comment></comment><comment><USER8> Looks great! I also recently worked on a similar project, Staart ([https://staart.js.org](https://staart.js.org)) but with a Node.js and Vue.js stack using TypeScript.

It has typical SaaS features like onboarding, API gateway, social auth, Stripe recurring billing, teams, etc.

<comment><AUTHOR> Thanks for sharing your link. It looks pretty mature to me! But I see you put all parts separately in Github, is it more convenient?

</comment></comment><comment><USER9> Reminds me of [https://spark.laravel.com/](https://spark.laravel.com/)

<comment><AUTHOR> We all are part of the family called "boilerplates" :))))

</comment></comment><comment><USER10> Nice effort but I don't like it.

You could replace everything here with Django. There's nothing in here that supports migrations, deployment etc (Django can).

I've used React and Webpack and loath it, it's extremely opinionated, saturated with pure JS developers, has an enormous learning curve and load of gotchas.

Django also has API support and a wealth of add-ons for services like federated auth, ElasticSearch bindings, bindings for S3, Redis, discovery, Cassandra, NoSql, etc etc.

The architecture here is also really unscalable. There's nothing in here that can be horizontally scaled, and Jinja or Django + bootstrap is 10x faster for prototyping before you hire a dedicated dev to maintain a React nightmare.

Modules are not a feature of this app, they're a feature of the Python language. Putting that in the README is misleading IMO.

<comment><AUTHOR> Thanks for your opinion! It's probably more valuable for me than from people who like it :)

But you are a little bit wrong. Currently, it supports migrations and will support deployment very soon.

I don't agree about ReactJS and Webpack. I start using both in my projects and it didn't take too much time to learn them. Even if I don't know them deep I know them enough to use in the real projects.

I agree that currently, Django is more might than this project but it's just a beginning.

You are not right about modules too. It has nothing to do with Python's modules, I "invented" my own "modules" \- it's just a combination of front-end code and Python API in one folder. And I created them to make the project more scalable. I don't know though if I gained this goal or not - yet.

</comment></comment><comment> matt-p I have briefly evaluated a few of these in the last month (focusing only on TS or Python) or so and have ended up convincing myself I need to go down the path of building bits I need in my own way. Consider this only constrictive criticism and I massively applaud the hard work that has gone into these projects:

       https://github.com/async-labs/saas

Good:

-React Material UI Front End

-Book showing how you how to build it, really cool way of funding OSS!

-Simple but scalable enough architecture, not too much cruft.

Not for me:

-MongoDB/Mongoose, where SQL (sequalize ORM or plain postgres) would have been a much better fit for a SAAS boilerplate in my opinion. Quite a big user document in the mongodb schema.

-Quite tight integration with AWS by default (s3,SES,Lambda) not hard to replace but the principle of OSS with defaults to one vendors IAAS feels uncomfortable to me.

-No password based login, not a big deal but an interesting choice.

-No Delete on team members and some other simple things that are needed to make it functional.

-Missing a few key features (permissions, master dashboard ect) that are addons by commercial licence which is fine, but these add up quickly to ~$1000 for something that would still be a fairly basic boilerplate.

       https://github.com/staart/api

Good:

-Awesome features: landing page, RBAC (although roles are hardcoded so take a look at these before you build your app), TFA, Api Gateway, Auto Join company based on domain. Everything you need (and some you wont)

Not for me:

-While there are lots of features, some don't actually work out of the box and require fixes. Some features you will not need and may have to strip out. If more time was spent on getting fewer core features absolutely perfect this would be the best SAAS starter out there in my view (in TS/JS).

-Again integration with AWS by default (SES) with no SMTP or second option, easy to replace though.

\- Would personally have chose postgres with knex (rather than direct mysql) for the DB and react for the front end over vue but these are personal preferences.

\- UX on front end could do with a little work.

SAASForge seems interesting but missing alot of features like companies/teams master dashboard ect.

<comment><AUTHOR> Thanks for your great comment.

You are not the first person who wants companies/teams. But I'm not sure I understand you well, guys. Can you give more details, with some examples, why and what it could be useful for?

</comment></comment><comment><USER11> Ha! This is awesome! I did something similar in 2016, and called it something silly like SaaS-in-Box, but after integrating security, and Blueprints and multi-tenancy and caching, and ... (I do think I ran into some problem with blueprints, actually), ... I finally decided I was inventing Django-on-Flask and that it probably didn't solve as many problems as I originally thought it would.

BUT! That said - I think there is a solution gap here. Keep it up!

<comment><AUTHOR> Thanks! It's a pity you gave it up, maybe you could create something really cool.

</comment></comment><comment><USER12> > If you experience such errors:

> In the database remove the record from alembic_version table

> Remove any files from your computer under app/migrations.

I'm not sure advising users to delete all their migrations is the right thing to do (which is what this appears to be doing).

<comment><AUTHOR> To be honest me either. The problem with these files is if you keep them you will not able to update the database because your last file has one version and database does another. You could just remove the last migration file, that would work too.

As for the problem overall, I didn't find a good solution for it. Maybe you can help?

</comment></comment><comment><USER13> Nice! I have a similar boilerplate that I've built for myself (there's no client-side), Flask with JWT, login, logout, etc. The React UI looks really nice here.

<comment><AUTHOR> Thanks! Do you have your boilerplate on Github or anywhere else?

<comment><USER13> No, I haven't felt like it's really ready for anyone else to use. Just something I use as a shortcut when starting new projects. I ought to go through it and clean it up and put it out there though.

<comment><AUTHOR> Yeah, I understand you. But you know what - I found if you would like to share your work with people in any way (open-source, commercial or whatever) it's much better to show it as soon as possible even if you think it's not ready yet.

Quote: If You're Not Embarrassed By The First Version Of Your Product, You've Launched Too Late :))) (Reid Hoffman, founder of Linkedin)

</comment></comment></comment></comment><comment><USER14> This is great. Thank you so much!!

One request is to include some recommended production deployment. I have spent way too much time on devops every time I start on my weekend project.

<comment><AUTHOR> Thanks! You know, deployment automation is one of my highest priority tasks. I even wrote a book on it ([https://www.saasforge.dev/books/the-book-on- deployment](https://www.saasforge.dev/books/the-book-on-deployment)) but I think it would be much better to add some scripts/automation into the boilerplate.

<comment><USER15> thanks for the link. I long for the day where I can single click and have Flask/ReactJS boilerplate setup with functional public www and local dev environment setup. I only want to focus on business logic. Sorta like Heroku on steroid? (read: I would pay for that)

<comment><AUTHOR> Thanks for your idea! Btw I created a simple script that literally does the same - you just provide comments and it's sending to GitHub, rebuild the frontend and send command to deploy to AWS. But it's when I already set up everything. I'm thinking to automate much more - the WHOLE process of deployment, from the beginning, and actually, I already did it partially (you can find working snippets in the book). So, stay tuned to know when I implement it :)

</comment></comment></comment></comment><comment><USER16> I remember when there was a Rails one... It worked great, until it didn't. It was, however, a great learning tool on how you could role your own Rails SaaS.

<comment><AUTHOR> What happened to it? Was it open-source or commercial?

</comment></comment><comment><USER17> Nice, but I think you need also an ORM. I used Flask with ORM from Django after I tested SQLAlchemy, and now I think that was a good choice.

<comment><AUTHOR> ORM is used in this boilerplate, and it's SQLAlchemy. I need to mention it somewhere.

</comment></comment><comment><USER18> I am working on the same idea, on a different stack. Hope to finish it soon. Good luck with your project!

<comment><AUTHOR> Thanks! Which stack do you use?

</comment></comment><comment><USER19> NoGo criteria NR1. No test/test frameworks included.

<comment><AUTHOR> I know, I know!! I will include unit tests... some day... soon.

</comment></comment><comment><USER20> Does anything exist like this that uses a Java backend?

<comment><USER21> Maybe try [https://www.jhipster.tech/](https://www.jhipster.tech/)?

<comment><AUTHOR> Looks interesting although it seems to me not SaaS-oriented.

</comment></comment></comment><comment><USER22> Any plan to add job task management like RQ or Celery?

<comment><AUTHOR> YES! As soon as anyone will ask for them :) You can add your request (with the use case) as an issue in the repo.

</comment></comment><comment><AUTHOR> Update the license, now it's MIT.</comment>


Ask HN: What's the link to that flash CDN/Cloud host benchmarking tool? - <AUTHOR>

I remember a while back, somebody posted in the comments of a thread a benchmarking tool for various CDNs and Cloud hosts, based on a 1mb download file.<p>Does anyone remember that link? Thanks. <comment><USER2> Is it this one?

<https://www.cloudkick.com/>

<comment><AUTHOR> no, that's not it. this was flash based, and actually downloaded files to your computer from various CDNs to test their speed/latency.</comment></comment>


Twitter Users Implicitly Reveal Location Information (ML/Algorithm) - <AUTHOR> http://www.parc.com/publication/2590/tweets-from-justin-biebers-heart.html

<comment><AUTHOR> I'm kind of surprised an URL with "justin bieber" made it past the HN crap filter, but the article (and linked paper) are interesting.</comment>