Is Haskell the Cure? - <AUTHOR> http://mathias-biilmann.net/posts/2011/10/is-haskell-the-cure <comment><USER3> I gave haskell a shot as some of my earlier github repos indicate: <https://github.com/substack>. I even wrote my blog in haskell with happstack, since snap hadn't gotten popular yet.

Haskell is very hard, but even after 3 years of pretty intensive use, I never really felt productive with haskell in the same way that I've felt in other languages. Anything I did in haskell required a lot of thinking up-front and tinkering in the REPL to make sure the types all agreed and it was rather time-consuming to assemble a selection of data types and functions that mapped adequately onto the problem I was trying to solve. More often than not, the result was something of an unsightly jumble that would take a long time to convert into nicer-looking code or to make an API less terrible to use.

I built an underwater ROV control system in haskell in 2010 which went well enough, but I had to tinker with the RTS scheduling constantly to keep the more processor-hungry threads from starving out the other ones for CPU. The system worked, but I had no idea what horrors GHC was performing on my behalf.

Later I built the first prototype of my startup with haskell, but the sheer volume of things that I didn't know kept getting in the way of getting stuff done in a reasonable time frame. Then we started to incrementally phase out haskell in favor of node.

I write a lot of node.js now and it's really nice. The whole runtime system easily fits into my head all at once and the execution model is simple and predictable. I can also spend more time writing and testing software and less time learning obscure theories so that the libraries and abstractions I use make sense.

The point in the article about haskell being "too clever for this benchmark" sums up haskell generally in my experience.

<comment><AUTHOR> It's pretty much what I mean when calling Haskell hard to learn. For me it's also been a steep learning curve, and my experience hasn't been altogether different than yours.

I started out maybe 5 years ago following tutorials, reading up on all the metaphors about Monads and doing project Euler problems.

After a while I started to tackle some small web related things with Haskell and had exactly your experience of running into a lack of understanding of how the system works and wrapping my head around functional datatypes.

I pretty much gave up on Haskell as a practical language at that point, but something kept me coming back once in a while.

Then at a point I had a use for making a small web service fast and the Node prototype I made performed badly and crashed in spectacular ways under high loads. I found Snap and made a quick prototype in Haskell. At that point the experience of years of small experiments must finally have made something click. In a very short time I had a very fast service using almost no memory. It's deployed in production (as a part of <http://www.webpop.com>) and has been extremely stable.

By now I think I've crossed some kind of barrier, and feel like I'm both being productive and having fun when writing Haskell, but it really didn't come easy to me and all else being equal my experience tells me that a good deal of my colleagues would have an even harder time.

<comment><USER4> I think part of the issue with learning haskell is that it seems to invert the typical learning strategy for programming languages. Usually the best advice is read a little, then write a lot. Typically you can just look and some published code and go "ah yes that's how you do it". But I find, for better or worse, Haskell really requires you to understand before you code. Which in the end means your study to code ratio is very different than almost any other language.

Most languages, even lisps, are somewhat tolerant of 'programming by guessing' for beginners. Usually you write terrible code that works, learn more and see what you did wrong. Haskell is very unforgiving of this, if you don't understand why it works it probably won't

<comment><USER5> I think you're wrong at "if you don't understand why it works it probably won't".

While I long given up PUI (Programming Under Influence) I still occasionally do some in Haskell. After a litre of beer I am pretty dumb, but I can follow clues from compiler to get something working.

Most of the time, it works the next day, when I sober. That's in contrast with C/C++. Scripting languages give some power like that, but I can screw myself with them much more violently.

In my humble opinion, Haskell is the language of choice for drunken programmers.

</comment></comment></comment></comment><comment><USER6> Let's have a talk about the $ operator. When you use it more than once per line, you're writing code that looks weird and is hard to read. Switch to the similar function-composition operator, and everything looks more idiomatic.

Instead of:

        fibServer x = quickHttpServe $ writeBS $ B.pack $ show (fibonacci x)

Just write:

        fibServer = quickHttpServe . writeBS . B.pack . show . fibonacci

The case for $ is where you want application instead of composition:

        fibOf42Server = quickHttpServe . writeBS . B.pack . show . fibonacci $ 42

I even write things like:

        main = print =<< foo

instead of

        main = foo >>= print

for consistency.

Anyway, it's a little style thing, but it's nice to use the composition operator (.) when you want composition and the application operator ($) when you want application. It makes the code look nicer and it shows its intent more clearly. And really, they are different concepts, even if they both type- check the same.

And finally, remember that function application, by default, is the highest- precedence operator in Haskell. When you write:

        foo . (bar 42) . baz

It's the same as:

       foo . bar 42 . baz

Because of operator precedence. $ only exists to change the order of operations for a particular expression.

<comment><USER7> I'll add that a nice little benefit of using:

      a . b . c . d $ e

over:

      a $ b $ c $ d $ e

is that any sub-expression taken from the first expression is valid and can be refactored out into its own name. (.) is associative and ($) is not.

</comment></comment><comment><USER8> Please stop with the toy benchmarks and pretty one-liners that show how awesome Haskell is.

There is growing list of smart programmers who get all enchanted with Haskell, jump into it wholeheartedly, and end up frustrated (see bottom of message). GHC makes the typical C++ compiler seem fast. Once code grows past the homework problem size, all hope of understanding memory usage is lost. I don't think people really get how bad that it is. The whole culture of Haskell is based around static checking, yet you have to run a program in order to find out if it blows your memory limit several times over.

Haskell is still a neat language, but we need less advocacy based on toy programs and more honest realism.

(Here's a typical, non-superficial example: <http://wagerlabs.com/haskell-vs- erlang-reloaded-0>)

<comment><USER9> That post is from 2005. The situation is entirely different today w/respect to speed (both the compiler and the addition of ByteString and Text libraries), and productive libraries, particularly for web development. Likewise, it is a rare case that you would run into memory consumption issues.

I do agree that there is entirely too much enthusiastic toying around in Haskell and not enough real world users and honesty about limitations.

<comment><USER8> To me, there's a dichotomy between the "if it compiles, it usually works" aspect of Haskell (and how this is often touted as superior to the dynamic typing, test-driven approach) and that you can't get a picture of memory usage until you run and profile the code. In my experience, hard to understand memory consumption issues are common and take effort to solve.

Reference: [http://blog.ezyang.com/2011/06/pinpointing-space-leaks-in- bi...](http://blog.ezyang.com/2011/06/pinpointing-space-leaks-in-big- programs/)

<comment><USER9> That blog post says nothing about frequency of memory leaks, but shows that there are good tools to help you in your effort to solve them. One thing to keep in mind is that there are memory issues with every language. I just debugged one in Ruby yesterday, and there wasn't a good tool readily available for that effort. Do you know what the memory consumption of your programs are in other languages are before running them?

As a contradictory anecdote, I have never once had a memory consumption issue with Haskell code. Haskell is actually in a nice position w/respect to memory now that enumerators (which always use constant memory) are taking hold. I have no doubt you encountered many memory leaks, but I don't think your experience completely generalises to modern Haskell.

</comment></comment></comment></comment><comment><USER7> It is somewhat of a shame that learning curve plays such a significant role for career programmers.

You would expect that people that spend years and years working with their tools would be willing to put a few weeks or months into learning their most important tool: the programming language. It seems most programmers get frustrated and abandon learning of different programming paradigms very quickly.

<comment><USER10> Not to be to contrarian but until I see proof to the contrary I think Norvig put said it best:

 _In terms of programming-in-the-large, at Google and elsewhere, I think that language choice is not as important as all the other choices: if you have the right overall architecture, the right team of programmers, the right development process that allows for rapid development with continuous improvement, then many languages will work for you;_

<comment><USER5> Architecture heavily depends on the language. You have to make different choices for C++ than for Java, not mentioning Haskell.

Also, I think that comma before "the right" in Norvig statements means logical AND. If we rewrite that statement it will look like that: _if you have the right overall architecture AND the right team of programmers AND the right development process that allows for rapid development with continuous improvement, then many languages will work for you._

I think it is too many AND's here. In most realistic situations you cannot have such luxury.

Also, choice of Haskell (or similar language) allows you to address at least two points from Norvig statement: the right team and right development process.

Those who learned and applied Haskell almost cannot form the wrong team. Almost - as we cannot rule out failure completely.

The right development process is almost ensured by strong type system. Type systems like Haskell's can be viewed as a tool to spread requirement changes through complete program.

(that's why it is seemed hard to introduce or change a constructor in a data type)

So all in all I think that languages make a difference here. For many languages you should fulfill those three points, for some languages those points fulfill themselves.

<comment><USER11> As much as I loath Java and co, I have to give them that their mature development tools make up a bit for their weakness.

I.e. in Haskell you make a change to a type and propagate it, until the compiler stops complaining. In Java you click some `refactor' button in your IDE, and your changes will propagate through the code base automatically.

That's less of a comment on the languages, since Haskell will probably grow better tools some day, but more a comment on the relative stages of maturity.

</comment></comment></comment></comment><comment><USER12> The ecosystem for Haskell is improving rapidly. My startup built a computer vision application on top of easyVision and with the intention of rewriting it in ObjC. Instead we are working with the Haskell community to target the mobile platform. A year ago that would have been a dicey bet.

About our Haskell experience: Yes, the learning curve seems steep, but mainly because of the things you have to _unlearn_ (OMG no for-loops!). However, functions are the most modular things ever invented. That translates into an uncanny ability to add features quickly. A sophisticated type system catches many errors at compile time.

</comment><comment><USER13> I love Haskell; I do a lot of work with it. That said, I use Python for the web. As nice as Snap is, Haskell just doesn't have the vast array of quality libraries for web development that Python does. Lately, this means that I do web development in Flask, and heavy lifting in Haskell.

<comment><USER14> Check out <http://www.yesodweb.com/>

</comment></comment><comment><USER15> I'll say this again: Ted shouldn't have wasted everyone's time highlighting the response time of the request. He effectively benchmarked V8 right on his blog and then called it slow. Now everyone's complaining that people at least demonstrate that part to be untrue.

Ironically, every one of his clients in the ab concurrency test will receive their responses _before_ the users of the hypothetically parallel Python and Ruby services, because Node responds an order of magnitude faster. So he didn't actually demonstrate a problem.

</comment><comment><USER16> Why is a Fibonacci sequence used as a benchmark for an argument for _concurrent_ programming? The Fibonacci sequence is a _recursive_ algorithm that inherently has dependencies on previous calculations that prevent effective concurrent execution. The Fibonacci algorithm executed concurrently is going to spend an inordinate amount of time creating tasks that do a trivial calculation (add two numbers together).

If you want to benchmark _concurrency_ , at least pick an benchmark algorithm that _exercises concurrency._ The FFT comes to mind, but there are probably lots of better examples (that is a challenge to HNers ;-).

<comment><USER17> He was not benchmarking concurrency, he was pointing out that Node is single- threaded system that essentially implements the old-style cooperative multitasking, where a single task will block everything else. He could have used sleep() and it would have illustrated the same point (and more elegantly, since half of the responses miss the point entirely and focus on the Fibonacci part).

Node developers probably don't do a lot of computationally complex stuff, but when they do, they have to think about the concurrency problem. Even something as trivial as sorting a large list or parsing a huge chunk of JSON is going to stop all other requests from executing.

<comment><USER16> But he isn't benchmarking _web server concurrency_ because he is doing a single curl

      $ time curl http://localhost:8000
      165580141
      real 0m0.016s
      user 0m0.007s
      sys 0m0.005s

So he is running the Fibonacci (40) _once_ with the web server. The only concurrency / parallelism that is happening is in the _recursive_ Fibonacci algorithm. I stand by my contention that the Fibonacci algorithm is a very poor test of concurrency / parallelism.

I stand by my contention that he should have implemented an algorithm that could be solved in _concurrent_ pieces and then benchmarked node.js against his favorite language. If the algorithm cannot be parallelized effectively, it doesn't matter how many tasks you spawn to solve it (cooperative or otherwise), the _algorithm's dependencies_ will cause all the tasks to block and effectively serialize their execution.

<comment><USER17> I'm referring to the original post (<http://teddziuba.com/2011/10/node-js-is- cancer.html>), which did test concurrency. The Haskell guy missed the point entirely and seems to have given up after Haskell is shown to memoize his function.

</comment></comment></comment></comment><comment><USER18> Wasn't the point of the original post that node.js blocks the event loop while it executes functions and thus effectively kills concurrency? Not how fast it calculates fibonacci numbers and sends it over http...

<comment><USER19> The point was that it kills parallelism – Node is just a single-threaded event loop, running on a single core. And since computing fibonacci numbers is a CPU bound activity, that type of benchmark would be relevant but for the memoization bit.

EDIT: Well also, the author would have to actually benchmark this vs. Node with many concurrent clients in order for it to be relevant; here he's just timing a single request from start to finish, which obviously doesn't say anything about how this scales.

</comment></comment><comment> dorian-graph Hasn't the author already said that the measuring of Fibonacci was not the point of his tirade? Which makes the line in this post 'I think a lot of people missed the main point of Dziuba's troll" slightly amusing. Is there now going to be someone running this 'benchmark' in whatever language they can? One of the blogs already posted said he's going to find time to run it in C.

I'll do my part. Delphi, here I come. ;)

<comment><AUTHOR> My benchmark was mostly a parody, since Haskell just memoized the call and never really did the work.

The point of the article was more the difference between the languages that really tackles concurrency (Haskell, Clojure, Go, Erlang) and Node's way of simply offering one solution that works for a lot of problems where the common scripting languages (especially PHP) doesn't work that well.

<comment><USER20> Don't forget Akka (esp Scala-Akka) in that list!

<comment><USER21> I just put up a [[actors in _ lang]] list

[http://stackoverflow.com/questions/7566548/actor-based- distr...](http://stackoverflow.com/questions/7566548/actor-based-distributed- concurrency-libraries-for-ocaml-and-other-languages)

</comment></comment></comment></comment><comment><USER22> I don't think Haskell itself is really the answer.

If I read the article correctly it's simply a matter of concurrency and parallelism that's important.

There are a host of languages that do that quite well and Haskell just happens to be one of them.

<comment><USER5> How those languages fare in other fields, like, constraint programming?

<http://hackage.haskell.org/package/monadiccp>

The real point is that Haskell is quite good in many areas and is excellent in parallelism and concurrency. While other languages are excellent in concurrency and not so good in other areas.

Those many languages are the answer for the sole field of concurrency and Haskell is the answer when you combine many fields, one of which could happen to be concurrency.

<comment><USER22> Sure Haskell is good for more than just concurrent programming, but the article was leaning on concurrency and parallelism in its comparison with Node.js

And I should also point out that said "blub" languages can also implement those features which they lack that Haskell includes by design. Some have better features than Haskell, IMO (ie: Qi/Shen sequent types and the ability to turn the type system off when you don't need it).

Again, Haskell is a good language. I just don't see it as a "cure." There are many other options.

<comment><USER7> How can the "blub" languages implement Haskell's type-classes as libraries? Or generalized type inference? What about Haskell's higher-kinded polymorphism? And pattern matching?

Lisp can do some of these, but it is not exactly a "blub" language. Is there a nice comparison of Qi and Haskell? Once you implement such a large, non- trivial system (such as an advanced type system), I really doubt using Lisp macros rather than implementing a compiler is easier. Macros that do such non- trivial things also do not compose well, so I doubt Lisp is beneficial for this purpose.

</comment></comment></comment></comment><comment><USER23> For every application there is a language best suited... Let's stop trying to force every language to be good at everything and then compare them as though they were all the same, shall we?

</comment><comment><USER24> What's more important is applying some important concepts in haskell - functional programming and dividing your program into tiny self-contained parts. You can write this way in most languages - Ruby, Python, Scala, etc. The fancier parts of Haskell - lazy evaluation, static typing, whatever - <USER2> less important to making software that works than its functional nature.

<comment><USER7> The static typing is essential to making software that works (and scales). Dynamic typing requires a lot more test code and test code is expensive to write, maintain, and repeatedly execute.

</comment></comment><comment><USER25> I don't think the point of Ted Dziuba's rant was that every request is a large calculation. In Node.js if most results are small and generated quickly when one large calculation request comes in all the small ones stop going out until it is done. A Haskell web server like Snap should not have this problem.

</comment><comment><USER26> If Haskell is the Cure, what is the Disease?8-))

Haskell occupies a niche similar to Hamilton's quaternions (for classical physics) and Heisenberg's matrices (for quantum mechanics) - not mandatory, inaccessible to the masses and abandoned with haste once a more intuitive tool is found.

But they will always be there if you need them.</comment>


Ask HN: PayPal vs Direct CC affect on sales - <AUTHOR>

I've heard claims that accepting credit cards directly on your website, using a merchant account, converts better than only offering credit card payments through PayPal's offsite workflow. Can anyone back this claim up?<p>I realize that there may be other reasons not to use PayPal. But I'd like to know if anyone has more than anecdotal evidence that only using PayPal decreases sales. <comment><USER2> Just a warning: the primary reason for using PayPal over directly taking credit cards is that the latter subjects you to significant, onerous legal requirements for maintaining the security and privacy of your customer data.

Unless you have the money to spend on compliance, Paypal/Google Checkout/Amazon Payments is the way to go.

This doesn't quite answer your question, but it is a reason for not taking credit cards directly.

<comment><USER3> I completely agree - PCI/DSS pretty much means that your network is designed by lawyers and auditors instead of network engineers/sysadmins. It's a very unpleasant state of affairs.

It certainly can't be said that all of the payment card industry's requirements definitely increase security.</comment></comment>


New in American Fuzzy Lop: Persistent Mode - <AUTHOR> http://lcamtuf.blogspot.com/2015/06/new-in-afl-persistent-mode.html <comment> vezzy-fnord You seem to have submitted this before almost a couple of months ago? [https://news.ycombinator.com/item?id=9745951](https://news.ycombinator.com/item?id=9745951)

<comment><AUTHOR> Whoops, my mistake.</comment></comment>


Live-upgrading a Linux image at scale (Google 2013) [pdf] - <AUTHOR> http://marc.merlins.org/linux/talks/ProdNG-LinuxCon2013/ProdNG.pdf <comment><AUTHOR> I came across this while digging for early stories on how Google employees chose a Linux distribution to champion and get behind.

There are some amazing feats of hackery embedded in this slide deck (notably, they converted .rpm packages to the .deb package format, so that they could migrate dependencies separately from the base OS), so I thought it'd be fun to share! It's a sysadmin nightmare that they somehow made in to great fun, by treating it as an engineering problem.

If you have your own links to similar varieties of lore, I hope you'll share them in the comments!</comment>


Ask HN: Why nobody competes with Adobe? - <AUTHOR> Adobe has sort of a monopoly on the creative tools market. Nobody seriously considers an alternative for their Photoshop, Premiere, After Effects, etc, and for some people, these are truly the only products which can satisfy their sophisticated needs. However, there are more and more small (independent) creators of all kinds, who do not need all the uber features of the professional products but would rather appreciate an intuitive UI, cheaper price, and friendlier customer support. Every kid today is either a blogger, vlogger or web designer and it seems to me like quite a big market that would easily turn away from Adobe, had anyone created an alternative product with 40% of functionality that works flawlessly (!).
I recently had to interact with Adobe support, and my experience was quite terrible. I was also looking for a simple software to stitch together my GoPro videos but was left out with either free iMovie/Quick, which are too basic or a super-expensive Premiere. Both times I was wondering, how come there's only Adobe on the market, why nobody dares to compete with them. So, HN, what do you think, why?
P.S. I tried using Pixelmator (non-free), GIMP, OpenShot and a few more open-source editors - they don't stand the competition. On the other hand, I use and love Sketch, and would really appreciate Sketch-grade competitors for the above mentioned Adobe products. <comment><USER2> Adobe has been in the game for a long time, and they know how to play. For example, early on in postscript days, they had proprietary fonts... which they made free at about the right time to have reaped profits without fueling a competitor. A short-sighted company might have hung on; a non-profit might have given it away from the start.

\- they allow photoshop to be pirated - removing fuel for competitors

\- it's difficult (and uninteresting/not _technically_ challenging) to make UIs easy to use; hence the gimp

\- pdf is free-to-read, pay-to-write. They keep adding new features, so companies will keep buying it

\- maybe I read too much into this: but I once noted that postscript/pdf are the only mainstream "vector" graphics on the market (well, splines, not vectors, but I just mean that they're drawn)... apart from flash, which (to me) it seemed could make inroads on publishing. Then... adobe acquired flash (macromedia), giving them a monopoly on vector graphics. They let flash languish, consistent with my view...

Adobe know what they're doing, to maintain digital standards/monopolies throughout the lifecycle.

<comment><USER3> This. Plus network effects. Once you have people sharing files in Photoshop, Indesign and AE formats, everyone who's working with you has to adopt Adobe as well.

GIMP proves that it's possible to build a competing product that has all the features, but doesn't come with the same ease-of-use or shortcuts or support for proprietary file formats. Which means slow adoption, and ensures that it's hard to compete with Adobe in this field.

<comment><USER4> There are many products able to somewhat import psd, but due to its (perhaps intentional) complexity many fail to fully support it.

See Xee developer Paracelsus:

> Trying to get data out of a PSD file is like trying to find something in the > attic of your eccentric old uncle who died in a freak freshwater shark > attack on his 58th birthday... I am spending a lot of time imagining amusing > fates for the people responsible for this Rube Goldberg of a file format.

[https://www.theregister.co.uk/2009/04/30/xee_photoshop_psd_c...](https://www.theregister.co.uk/2009/04/30/xee_photoshop_psd_code_rant/)

</comment></comment></comment><comment><USER5> Photoshop is feature-complete, and the features are implemented well. For example, compare the speed of applying a 200px-radius Gaussian blur in Photoshop vs. Gimp.

To make an analogy with more hands-on trades: buying Photoshop is like getting the entire Snap-On tool catalog for $500. Buying Pixelmator is like getting 1/4 of the Craftsman tool catalog for $50. If you can spare the extra $450, you get a _lot_ for your money.

Professional mechanics spend $xx,000 on Snap-On tools because they can justify the cost. Most DIY mechanics buy cheaper tools. But if the Snap-On tools only cost $500, why not get the best?

(edit: GIMP is like getting the entire Harbor Freight tool catalog for free.)

Also, most instructional material for image editing assumes Photoshop.

<comment><USER6> Slightly OT, however; Pros buy snap on because of convenience. Most know there are cheaper, better made tools available for the last 25 years. The tool trucks, and big lines of credit, and bling factor are their only remaining upsells. The 'made in usa' stamps are even disappearing from their tools as more come from tiawan and china. It is hard, if not impossible, to justify the markup without some huge ego stroking, tradition and deliberate lack of comparison shopping.

<comment><USER7> I really don't understand the amount of money spent on those tools. My cousin is a mechanic and has a $10K MAC tool box(similar to Snap On) - that's just for the box without a single tool. Apparently he has >$25K in total in his tool box. We really have it quite good in tech.

</comment></comment></comment><comment><USER8> I like photoshop and haven't found a good replacement. when muscle memory is built up, it's really difficult to learn and switch to a different tool.

I have been searching for photoshop alternatives. but so far I haven't found any. For me photoshop is too expensive.

I have even considered to implement my own (I only need a portion of the photoshop features)

[https://affinity.serif.com/en-us/](https://affinity.serif.com/en-us/)

is what I found recently, it looks nice, but I can't get used to it.

<comment><AUTHOR> Wow, Affinity looks pretty capable, I think worth trying out. Still, no real alternative for video editing...

<comment><USER9> On Mac quite a few people use Final Cut.

Davinci Resolve is also getting better over time. Some people say it's already good enough for them to use daily, I think it's too buggy.

<comment><AUTHOR> Final Cut is like $300 - a price of a new GoPro. Btw, I think that GoPro could be a great company to compete in the video-editing market. They already have a wide audience, and they just have to make their Quick editor more feature rich, while keeping it simple enough for average user. They also have money and are in desperate need of settling on a software market...

<comment><USER9> $300 and DRM free by the way

You can copy the application (or airdrop) to any other Mac and it will work without and activation process or anything like that.

If $300 is a lot of money for your video editing software then you aren't the target market for software like this anyway. People at my school only have FCPx or premiere because of student discounts or because the school paid for it.

</comment></comment></comment></comment></comment><comment><USER10> I'm a designer that works both on an indie freelancer level and an agency/corporate level, so this feels apt for input!

Several reasons - you've got part of the answer right in that there are a ton of other smaller tools for the more specific sections of the market that can be broken apart and sectioned off. I personally deal with quite a bit of comics/illustration and there alone you have Corel Painter, OpenCanvas, PaintTool SAI, Manga Studio, Clip Studio, plus many of the newer ipad sketch programs that've popped up recently.

However - I think those markets get saturated and weakened too quickly by those newcomers that gain a foothold and then slowly start deteriorating due to lack of updates or shiny marketing. Photoshop gets underrated for sheer versatility in this case - it's less of a high priced transient brand (think Uber or BMW) and simply a functioning longstanding tool (a car, or a swiss army knife for that 'tool as a brand' metaphor) for so many kinds of design related issues that the ease of use is baked in. Software tends to have a maddening problem of quick degradation and a large slice of older designers tend to be very picky about their tools. Broke, too.

Additionally, for some of the larger corporations - there's lots of production chains that rely quite strongly on specific file formats to be exported or special color management, and most of these smaller programs simply can't handle that much depth without the team that Adobe has. (Don't ever talk to me about color management for factory packaging production.)

Finally, factor in the immense marketing team that Adobe has - designers are innately marketers, after all, and they've saturated most trendy design sites with pro-Adobe ads and likely have special deals behind the scene to keep their name relevant. Not a fan of that style of closed garden at all, so I skate by by using the most outdated version of PS (ie non subscription) I can find without crippling my workflow, and using others if I can.

</comment><comment><USER11> You should definitely check Affinity! They have amazing products, such as Affinity Designer and Affinity Photo; I remember paying about 30 GBP for each license. It's way faster to work on, compared to Photoshop or Gimp; Load time etc. Also, for video editing, you have this other company called HitFilm, you can use it to Edit or VFX (Yup! Motion graphics) super cheap or you use the Free version. Also, there's Blender for the past 20 years, for everything motion, and you can also edit video, and so much more.

Maybe you should criticize the fact that small companies don't have as much money for marketing, in comparison to Adobe; But a good start is to start use Firefox and an alternative search engine than Google. You'd be surprised at what you're capable finding!

<comment><USER12> I switched from Adobe to Affinity and gave it a few months before I switched back. I wasn't a fan of the UI, and some of the tools I use often were missing. I do hope they get there though!

</comment></comment><comment><USER13> The competition has been assimilated.

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

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

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

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

<comment><USER14> Seeing those names reminded me of another, back in the day when I ran Windows all my editing was carried out in Paint Shop Pro - which still seems to exist, despite having been first released 27 years ago.

<comment><USER15> Yes, PSP did everything I needed to do - though I am not deep into graphics. Seems they have a new 2018 version ($89 AU), but Windows only.

[https://www.paintshoppro.com/en/products/paintshop- pro/stand...](https://www.paintshoppro.com/en/products/paintshop- pro/standard/)

</comment></comment></comment><comment><USER16> Seems like the question would be to ask why nobody competes viably with Photoshop. Premiere is an odd example to single out — Avid and Final Cut, for instance, are full-featured and both have a substantial user base. The competition there is healthier than OP makes it out to be.

As for Photoshop, once it became the standard, it stayed that way by virtue of user inertia and the massive development resources it would take for a competitor to create a program in the same class. Photoshop is an extremely complex app and, on the whole, a very good one. It's not without its frustrations, but nothing is.

<comment><AUTHOR> Right, I would even narrow down my question to "why nobody competes Viably in a non-professional market". Both Avid and Final Cut are overkills for a ski- trip video editing, while simple things like iMovie and friends are waaay to stripped down.

<comment><USER17> Perhaps because sufficient number of non professionals typically won't pay an amount of money that pays for a top notch development team. So in the non professional market, you have labors of love like GIMP and DarkTable

<comment><AUTHOR> Right, but what about those "indie" content creators, popping up everywhere these days: YouTubers, Instagrammers, independent musicians and clip-makers, poor startup founders, needing to create a 1-minute marketing video twice a year... All those, I think, would spare $50-$100 for a good piece of software but not more than that. And if someone would analyze how they use professional products, I'm sure, it would converge to some stable ~30% subset of features big products offer

<comment><USER17> If your content makes you significant money, you'll be willing to invest/pay. Return from even one piece of content will typically very comfortably pay off software pricing. My wife and her business partners run a completely bootstrapped startup and they do pay (often others rather than make content themselves) for wherever is critical for revenue generation.

If your content doesn't generate revenue or revenue generating leads, you have a hobby and need to decide whether to invest in the hobby.

Edit: in my last trip to China, I actually saw the mushrooming "mobile live video streaming influencer" industry and looking at their equipment (portable large battery powered klieg lights, audio gear etc.), it's pretty clear the influencers were investing.

</comment></comment></comment></comment></comment><comment><USER18> We stopped using Photoshop and migrated to Sketch exclusively. New designers we interact with seem to be doing the same thing. One data point. YMMV.

<comment><USER19> Sketch covers only 0.1% of Photoshop's features and it only serves that userbase.

</comment></comment><comment><USER20> Bitmap graphics: Paint.NET . Yeah, Windows, but it works quite well. IIRC, I've read that, at least at one point, it ran under Wine. KDE's Krita just hit 4.0 . I haven't used it, but there are lots of nice comments about it floating around. In the Linux world, there's also Pinta that I've used a few times. On Ubuntu 16.04, out of the default repositories, it complains about this or that missing or not being signed/blessed/something -- or did, last I used it. But it works ok, at least for the quick and dirty tasks I had at hand at that time.

Vector graphics: Inkscape

Adobe support is, in my experience, truly horrible. I once spent a cumulative 7.5 hours on support calls before I finally got a front line call center employee to go back to their supervisor, after being given the wrong answer once, and prod them into paying attention and looking further and, lo and behold, generating the correct legacy license code I -- rather, the person I was helping -- was entitled to as an owner/licensee of the full-blown Creative Suite.

Basically, I knew more than the support supervisor about this problem. I just had to find someone in support with the interest and guts to push their supervisor to actually pay attention and execute the solution.

7.5 hours. For what should have been one 10 minute support call.

After that, I vowed that as for myself, at least, Adobe would never get another dime from me.

<comment><AUTHOR> Right. And the sad part is that they can afford their support being this terrible - they simply don't care about a few hundred customers fleeing them. But on the user end - I and my wife were so frustrated by their support today so that you can see, I've even started this topic :D

P.S. the support question was not even about using their product but about buying

</comment></comment><comment><USER21> For "developing" RAW images (Adobe Lightroom), it appears that the FOSS, Darktable [1], is a serious competitor. It has a full array of non-destructive editing features including extremely fancy parametric mask and blending effects. It also has responsive photo management (works great on at least 10s of GB), import, tagging, etc. They recently released their first Windows build.

[1] [https://www.darktable.org/](https://www.darktable.org/)

<comment><USER22> Dark table, Raw Therapee and even dcraw-ufraw are all considered first-class tools for RAW work even amongst semi-pro market.

Lightroom is still a common choice for photo pros licensing other Adobe tools but I know some of them wio fall back to FOSS tools for particular tasks particularly in astro work.

</comment></comment><comment><USER23> I guess it depends which market you are talking about, Adobe Photoshop usage in the VFX and Game industries have plummeted. Texturing is done using The Foundry Mari or Allegorithmic Substance Painter. After Effect is still used for commercials but most of the high-end compositing work is done with The Foundry Nuke. As far as editing goes, Davinci Resolve is an amazing piece of software, I highly recommend it given it is free.

</comment><comment><USER24> I'm one of those sad dorks who bought into CorelDraw back in the late 90s. Yes, their packaging was tacky; yes, they marketed themselves poorly; yes, a dozen cd-roms full of shitty clip art and knock-off fonts was a poor way to court designers. Behind all that was a massively superior (to Illustrator) vector art software, and a bitmap editor that was easily a peer to Photoshop. Watching "Creative Suite" (I mean Cloud) features to finally catch up to Corel 1998 in 2015 has been excruciating.

Look at how Illustrator even today doesn't use shift-clicks consistently with either Mac or Windows; it works like an app from thirty years ago, because it is a 30-year-old app.

Artists learn a tool, and are more interested in what they can do with that tool than how the tool works. Thus, they have a uniquely poor ability to adapt. You can see that with the transition of film photographers to digital. Also 3D guys: I have a neighbor who was an animator in the eighties, he did a bunch of those animated logos for NBC and HBO and MTV (with physically carved models and fancy camera tricks); he's trying like hell to adapt to software, but he seems to be about a decade late to wrap his head around it.

<comment><USER25> I used to work with a designer who lived and breathed CorelDraw. She could do everything she needed to in it, and preferred it over Photoshop. The rest of the designers used Photoshop and there was always some pressure for her to switch, but she was productive and that's all that really mattered. She used to have a few digs at them about how quick it was to do something (or even possible), but all in good fun.

</comment></comment><comment><USER26> Ultimately there is very little consumer grade software anymore because modern consumers won't pay for software.

The only people who pay for software are enterprises and they aren't going to skimp a few hundred dollars on software that makes their $X0,000 creative workers X% less productive.

In this space there is basically Pixelmator and Affinity trying to eke out enough sales to keep their developers paid.

</comment><comment><USER27> The time to take on Adobe was probably 10-15 years ago. At this point to oust them or even try to compete with them you would have have to create a feature for feature better product, and offer it at a lower price point. Your interface would either have to mimic adobe's to ease transition or be a significant improvement that its beneficial to switch.

As far as dialed down "40% functionality" \- isn't that what Adobe tried with their "Elements" line dialed back versions of Premier/Photoshop at a lower price point?

I get the feeling it would be hard to roll out a "40%" product without a "100%" as well - or else you risk having the narrative around your product becoming "use this until you start taking yourself seriously - then learn a whole new software suite when you graduate to Adobe"

Idk. Lack of competition isn't great, but back when others were actively trying Photoshop was still king (thinking back to the 4.0/5.0 days)

<comment><USER28> >you would have have to create a feature for feature better product, and offer it at a lower price point.

Have you tried out Affinity? I'm not sure about the features yet, but it's definitely just as visually appealing at a fraction of the cost (and non- subscription).

</comment></comment><comment><USER28> I'm hopeful for the new GIMP release. There was a thread about it yesterday: [https://news.ycombinator.com/item?id=16686941](https://news.ycombinator.com/item?id=16686941)

Sadly, when it comes to things like context-aware fill, Photoshop still outperforms any alternative I've tried, so I'm probably going to stick to it for a while longer.

Bit off topic, but if you're still looking for a video editing software, try Hitfilm Express: [https://hitfilm.com/express](https://hitfilm.com/express)

It's non-free but doesn't cost anything, and it's really powerful but still really easy to use.

</comment><comment><USER29> If we're looking at a single program, like Photoshop, I can get the best tool in the industry for $20 / month. You have three hurdles to overcome...

1\. What would you do better than Photoshop?

2\. How would you price it to be competitive?

3\. How will you convince users that your product is worthwhile?

<comment><AUTHOR> So, let's take Pixelmator as an example. They easily bought me with their promise of a streamlined design and simple to use tools. Their demos looked so cool, that I've easily paid $40 (I think it was $40). Then, when I started using it, I realized it's missing some super-simple features (that people request on their forum) + it's not so stable, it freezes and crashes sometimes. (Also, can't remember the exact features that I was missing) So, now, even though I have a paid for Pixelmator, I still have to ask my wife to do simple edits in her Photoshop occasionally, which I hate using.

So, what I'm saying is that selling to me was not a problem at all, if only they could deliver a good product. I also used Sketch as an example of a product that works great: it's cheap, it probably misses tons of Corel Draw features, but it's simple, cheap, and perfectly serves needs of those, dealing with web/mobile design.

So, should there be a similar product for raster graphics and video? Also, NI on the audio production market feels to me as up for disruption.

</comment></comment><comment><USER30> We are working to compete with Adobe (well not them specifically), less trying to beat them on feature count (nobody would), more taking the things that Photoshop is overkill for and making it easier/repeatable.

Competitors always seem to focus on a 'canvas' paradigm rather than what people are actually trying to get done, such as cropping to the same dimensions for web over and over again, or in your case stitching videos (sorry we don't support video yet).

We are still pretty early stage but the feedback has been great.

[https://beta.laazy.io](https://beta.laazy.io)

</comment><comment><USER31> Support for @kamphey

Snapseed

Filterstorm - thats the "Photoshop" for iPad / iPhone [http://filterstorm.com](http://filterstorm.com)

ExifViewer by Fluntro [http://exifviewerapp.com/blog/](http://exifviewerapp.com/blog/)

SKRWT [http://www.skrwt.com](http://www.skrwt.com)

Slidebox - [http://slidebox.co](http://slidebox.co)

Union - [http://unionapp.co](http://unionapp.co)

And many more. Digital minimalism is the new trend. We don't need 3 million special effects / features for a happy life. Less is more - more room for your own thoughts, fantasy. With digital minimalism i invite you that you are a part of my creativity.

Not Photoshop a hug for your mom is life.

See all the new YT videos. Zero effects, zero style, 2D, a human face in the middle and realtalk / rants about truth, emotions and what you really feel.The ppl understand my life is a selflie. I am not myself, i am an actor and dont tell my friends what i really love / feel / need.

</comment><comment><USER32> Is anyone seriously investing in any commercial non SAAS software any more as a stand-alone product? No one is seriously competing with Microsoft Office either.

</comment><comment><USER33> Adobe has tons of competitors, but they're not always obvious because the market doesn't perfectly overlap.

For example, I used to buy Photoshop and Dreamweaver to do web design for static sites. Now I use SquareSpace instead.

There are lots of niche products that chip away at Photoshop, including web- based alternatives that are less powerful but "good enough" and more portable.

</comment><comment><USER34> I think you kinda answered your own question:

> P.S. I tried using Pixelmator (non-free), GIMP, OpenShot and a few more > open-source editors - they don't stand the competition.

It's really hard to do it right, and even if you do you're targeting just a single segment of the market (people who need more than iMovie but not everything that Premiere provides). I imagine more than a few people have looked into this and decided that isn't a good ROI for the amount of investment involved.

Also, don't forget that Adobe (used to, anyway, not sure if they still do) has really cheap student licenses so that aspiring designers/editors/etc. get hooked on their software and carry that preference over into their professional lives.

My guess is that anyone who really has a passion for this has a regular full- time job and works on something like GIMP in their free time.

</comment><comment><USER4> While I haven't found any replacement for AfterEffects for motion graphics, many people I know have switched to Affinity Designer/Photo without looking back. Not only does it not tie you into a subscription, the interface is cleaner (without years of baggage) and the whole system feels less cluttered. Maybe the features are there with Photoshop, but they are more intuitive with Affinity. Maybe it doesn't do some niche-thing Photoshop can do, but it's evidently enough for most.

Pixelmator and Vectormator also have very good quality.

In Open Source, Gimp and Krita really don't compete well in Photo editing and there simply is nothing even close to AE, but for audio Ardour does a good job.

</comment><comment><USER35> For consumer (non-expert) ways to design great-looking graphics + materials in an easy drag & drop fashion, check out Canva.

For the more complicated things, Paint.NET on windows is pretty great (and still free). I've yet to find an equivalent that works as well for other OSes.

<comment><USER36> Want to reiterate how great Canva is, and my anecdotal evidence that a TON of bloggers and people around the web use it.

</comment></comment><comment><USER37> These kinds of tools are very sticky. Every once in a while I might come across interesting design software, with features I'd want etc. But at the end of the day, it's very risky to switch. Takes a long time to develop a good workflow. And you might end up not liking it anyways. I keep using Illustrator and Photoshop for the same reason I keep using Emacs.

I actually know an unlikely person that got started with the terrible GIMP and they're very reluctant to switching too.

</comment><comment><USER38> PhaseOne's Capture One is gaining some traction against Lightroom in the photography market, especially since Adobe basically forced Lightroom users to a subscription-only model.

</comment><comment><USER39> _> I was also looking for a simple software to stitch together my GoPro videos but was left out with either free iMovie/Quick, which are too basic or a super-expensive Premiere._

It sounds like your real question is, why isn't anyone making free or inexpensive tools with features like Premiere, so I don't have to pay for it? That's the problem -- everybody wants nice software but nobody's willing to pay what it would actually cost to write it.

<comment><AUTHOR> Not really. My point was that there's a lot of space between MS Paint and Photoshop (iMovie and Premiere), etc, and there seem to be enough people, willing to pay half price for the half of features. I'm not saying I want it for free, all I'm saying is that $500/year (creative suite price) is way too much for occasional picture/video editing.

<comment><USER40> Frustratingly that mythical video editing app you're looking for was actually a previous version of iMovie. Apple crippled iMovie with the release of iMovie 08, which removed a bunch of previous features and workflows in an effort to make it easier to post videos to YouTube. Apple made it easier to create simple videos, but incredibly difficult to make anything slightly more complicated. Editing clips synced to music became a frustrating game of Tower of Hanoi.

I thought there would be hope with switching to FCP, but then they did the same thing in 2011 with FCP X.

</comment></comment></comment><comment><USER41> For UX/UI design, there's Sketch and Figma.

<comment><USER42> Was looking for this. I don't think competition comes as a 100% feature complete alternative but rather as a splintering into more specialized tools.

<comment><USER43> Sketch and Figma are actually auite similar from PS, they were adapted for the particular task and simplified it, that's why designers love it. Hard to do something like that fot the general application.

</comment></comment></comment><comment><USER44> Hi, my name is Ivan and I am competing with Adobe and other image-editing comapnies :)

You can read about my photo editor Photopea here: [https://blog.photopea.com/creating- photopea.html](https://blog.photopea.com/creating-photopea.html)

</comment><comment><USER45> I use to work for a company making an InDesign alternative. It's pagestrip.com. Feel free to try it out!

<comment><USER46> I wish them luck. In my undergraduate journalism days I learned page layout in Quark Express. Then MacOS X happened. Quark basically refused to build a version that wasn't tied hopelessly to the old Mac system.

And I remember what a breath of fresh air InDesign was. Here was an upstart challenger building something that, while less featureful than Quark, had some niceties and trust built up from their work on Photoshop.

In the blink of an eye Quark was a footnote and InDesign was the juggernaut.

</comment></comment><comment><USER47> My experience is only with LightRoom and Photoshop and I have to say that their products are just very good. There is also a ton of learning material out there for Adobe products.

Hard to compete with that. Affinity photo is quite good but if I were a pro I would stick to Photoshop.

</comment><comment><USER48> This was a great post. We are cut off at my university in a licensing fight with Adobe. I'm not certain how absent that product we are running a digital media and design curriculum...unless the students are required to purchase themselves.

</comment><comment><USER49> There's a lot more competition in the photography industry. Adobe has lightroom but there's a trend now for photographers jumping into Capture One. Then there's dxo optics, darktable and for the less high end market Acdsee.

</comment><comment><USER50> I am attending an Adobe conference this week and this was my exact thoughts. How come no one else build these tools and compete in this market. There is a huge market potential.

</comment><comment><USER51> Sejda PDF is a freemium Acrobat alternative: [https://www.sejda.com/](https://www.sejda.com/)

</comment><comment> the-peter HitFilm and Lightworks are both excellent professional quality video editors with free versions.

</comment><comment><USER52> I've seen lots of pros who prefer Final Cut Pro and Sketch

</comment><comment><USER53> check out avid media composer for your videos. It's priced reasonably.

<comment><AUTHOR> The website says $50/month == full creative suite price. It's probably a very reasonable price for a professional, who uses the tool every day and makes money on it, but for my needs, it's way overpriced...

<comment><USER53> That's fair. Did you check out "Media Composer | First"? I think that's free

</comment></comment></comment><comment><USER54> www.HugoMM.com is a new Mac application in the LightRoom space

</comment><comment><USER55> Many mobile photo editing apps compete with lightroom.

Snapseed, VSCO, Instagram

<comment><AUTHOR> those are too basic, there's a lot of space in between Photoshop and Instagram...</comment></comment>


Why Elm? [pdf] - <AUTHOR> http://www.oreilly.com/web-platform/free/files/why-elm.pdf <comment><USER3> I've tried to use Elm and The Elm Architecture on a project before, but I gave up.

The Elm Architecture makes it very easy to create small type safe components, but it forces parent components to manage the state + structure all children components. This makes it hard to use a component and to separate concerns.

In order to create a list of stateful children, you must:

1\. Add a list of the child states to the component state, event if the parent component doesn't care about the child's state.

2\. Handle adding + removing child state's manually

3\. Map all scoped child state updates through your reducer, adding a constructor to your action type

4\. Finally, map each of the child state's to the component's view.

You end up big types and match expressions that just manipulate lists. I have yet to see a FRP library that allows you to just use a component without introducing boilerplate.

<comment><USER4> I'm curious if you've ever looked at optics-based systems for component coupling?

Personally I think that the entire top-down state tree is a bad idea, but I'm willing to be convinced. I'd much prefer a modeling like the actor approach.

<comment><USER5> Google isn't finding anything regarding component coupling and optics. Do you have any links that introduce the concept?

<comment><USER6> A lens is an object that has both read and write access to a property of an object (or to a path into a tree of nested objects).

Rather than passing parts of the model to the children (as you'd do with React props), you pass lenses into said parts.

It enables child components to read/write to the global store without knowing its structure. As long as it receives an appropriate (set of) lens(es) it is happy.

So, for example, if you have a list of strings, rather than passing the nth string to the nth component, you'd pass a lens to the nth string. The component can then not only read but also write to its slot.

Lenses can also be composed, so you can create them on the go as you'd pass sub-props to grand-children.

[https://github.com/calmm-js/partial.lenses](https://github.com/calmm- js/partial.lenses) <= a comprehensive lens library

[http://ramdajs.com/](http://ramdajs.com/) also has lenses.

These libs are strongly influenced by the FP world. The underlying data structures are immutable, writing to a lens creates a new version of the store (as efficiently as possible, by recycling intact objects).

<comment><USER7> So basically, it's like using dependency injection, and what you're injecting are higher order functions for the getters and setters for whatever properties you need. Is that right?

<comment><USER8> Do they need to be functions? Because this seems a lot like handling [:a :keyword :vector :for :navigating :trees] in Clojure and passing it to either update-in or get-in functions, which is a pattern ubiquitous in re-frame, but not sure is can be called a lens).

<comment><USER7> What you're saying sounds similar. But my question and your post are both missing the "composition" aspect. Somehow lenses are composable, and I guess to grok that we'd need to look deeper.

</comment></comment></comment></comment></comment></comment></comment><comment><AUTHOR> Been using Elm for a few months now. Both in small side projects, and in a production app for work.

Many benefits over using js, and basically no downsides apart from the initial learning curve. And even that could be equal to the learning you have to do every time your team decides to add/use a new foo.js library or framework to the project.

With Elm:

      - you are confident about your code
      - others ( and your future self ) can actually read it and understand it
      - it pushes you to think before you write
      - refactoring is a breeze, not a nightmare

I hope I won't have to use js on my next gig.

edit: Also, I cannot speak highly enough about how helpful the compiler is, and the community in the slack channel. Makes the whole experience a joy.

<comment><USER9> As an open question to yourself, or anyone else advocating elm heavily, can you show something cool you've built using the language? That would be the most convincing argument!

<comment><USER10> I don't spend a lot of time advocating, but here are my first two attempts at building stuff in Elm.

[https://greim.github.io/elmsweeper/](https://greim.github.io/elmsweeper/)

[https://greim.github.io/electron-golf/](https://greim.github.io/electron- golf/)

Honestly I think it would have been easier to build the first iterations of these in JS (React or something) but with the second->nth iterations, it became easier with Elm.

<comment><USER9> I'm seeing a lot of simple games on the built with elm site - do you think that's a sweet spot for using elm?

<comment><USER10> Not sure, maybe.

A lot of it might be that simple games are fun and relatively easy, so well suited for learning new stuff in your spare time.

Then again, the electron golf game re-renders SVG DOM at 60fps. Building web apps that way hadn't occurred to me until React came along, and I didn't attempt it until Elm.

</comment></comment></comment></comment></comment><comment><USER11> I want to like and use Elm. However, unless things have changed recently, it seems the author hasn't learned to delegate. They also like to really get things right, which takes forever.

So it's really good at what it does, but for everything else, it's just incomplete. For instance, Elm seems like a natural fit for an offline-first ServiceWorker design. But I don't think it really covers much of the just- outside-of-core-Javascript browser APIs. You're likely to run into "I have some really interesting ideas about how to cover that a super elegant way, but I'm concentrating on rewriting the $WHATEVER right now" newsgroup posts, but that's it… :-(

<comment><USER12> Yes, this is a problem IMO. I dedicated 9 months to learning Elm, but left frustrated by the tight control and lack of delegation that would have leveraged my skills and many others' skills to further the idea and language.

<comment><USER13> On the other hand, it's easier to wait patiently if you're not using the language yet :-)

I've been watching Elm for some time. I'll wait until it's done. So my reason for not using Elm is: I'd rather be patient.

<comment><USER14> I think you're going to be waiting indefinitely then :).

</comment></comment></comment></comment><comment><USER15> One thing I don't see addressed here is the biggest "Why Not Elm": you have to learn Elm. Elm is a beautiful language and in the last year or two the ecosystem has gotten much better. However I don't think I'll ever make progress adopting it at my day job. For all of it's flaws JavaScript is still quick, scrappy, and easy to pick up. Convincing a curmudgeonly back-end developer that React and webpack will make his life easier is hard enough. Convincing him to learn a seemingly esoteric functional language too is basically a non-starter.

<comment><USER16> Why not Elm on google turns up this: [http://reasonablypolymorphic.com/blog/elm-is- wrong](http://reasonablypolymorphic.com/blog/elm-is-wrong)

I think the basic gist was that it's type-system is far from complete.

<comment><USER17> The main critics is that it does not support type classes, but maybe that is actually not a _bad_ thing. The discussion is similar to the never ending Go discussion about generics and people do amazing stuff with Go (now I guess critics would say they would do even more amazing stuff with generics).

Not that I say type classes (or generics) are useless, but keeping a language simple (in the sense of keeping the feature list small) has benefits on its own. I did not to complicated projects in Elm, but I watch the language closely and really like what I have seen so far, so I hope Evan keeps up the good work, as I think he has pretty good taste for language design.

</comment></comment></comment><comment><USER18> I'm using Elm for an internal customer service app and it is working out fairly well. My background is more server side programming so the ability to avoid javascript and its constantly changing ecosystem is a big plus. Elm the language is simple enough to understand in a day and the basic architecture is also straightforward. The biggest challenges are finding examples of how to architect larger apps but this example should help [https://github.com/rtfeldman/elm-spa- example](https://github.com/rtfeldman/elm-spa-example) Also, I tried mentoring another coworker on Elm but they seemed to have a harder time than I did. I think it could be partly because they were an experienced Javascript developer who wanted to apply their existing patterns to Elm.

</comment><comment><USER19> Elm hasn't merged a trivial change to allow manipulation of UTC and timezones in 6 months:

[https://github.com/elm-lang/core/pull/739](https://github.com/elm- lang/core/pull/739)

Basically, if you have to deal with local time, this isn't the language for you. If you expect to be able to add to the platform where you find it lacking, this isn't the language for you.

At this point, Typescript has the momentum to make it irrelevant

<comment><USER17> Typescript is a completely different language advocating different paradigms so they are not comparable.

However I have to agree with you that the lack of support for local time is pretty unfortunate.

<comment><USER19> I've used both heavily. I think paradigm is the key word if you're thinking mind-expanding properties. While immutable types and combinators are less used in Typescript (you've got me there) you can certainly get 80% of the value of strong typing, and there are several variants of Virtual DOM support.

Elm's error messages and semantic versioning are still a class above anything else, though. Sad to see it rotting on the vine like this.

</comment></comment></comment><comment><USER20> I am surprized Elm gets talked about so much more than Purescript. Although Purescript is more of a general-purpose language and feels like Haskell that compiles to Javascript, and Elm is something that relies on its specific runtime to work.

<comment><USER21> same reason rails got so much more mindshare than any of the competing web frameworks of its day - there is considerable value in optimising for the common case, and indeed adding constraints in the name of safety and good architecture; most languages/frameworks try to optimise for flexibility and miss out on this fact.

<comment><USER14> I think this is one of the main selling points about Elm - it's got conventions and it's got opinions. There's only one way to structure your app and it's the Elm way. That's a good thing when you're

1) building & growing the app - there's only way to grow and it must follow the same conventions as every other Elm app 2) bringing on developers - <USER2> main hurdle is the business logic itself and not the structure of the app 3) finding resources in the community - most everybody is traveling down the same road and can teach one another the lessons they've learned

</comment></comment></comment><comment><USER22> I like Elm a lot. I also do a lot of React and I have worried about picking Elm to avoid killing a nice product written in it because no one is willing to learn it to maintain it after I'm gone. Better to pick React to avoid any rewrites just to continue maintaining the product.

However, if they could just be convinced to learn Elm I'm positive that Elm would be much easier to maintain and improve than just React by its self. React can definitely be maintained easily, but Elm does a lot of the work to check itself and also enforces discipline that React can't (although you could get a lot by just using Flow extensively and treating its errors as blockers).

<comment><USER3> The static types system is great, however, having used elm: elm unloads much of the work react does onto you. React automatically (with keys) manages state creation for lists and child components, but with elm you have to manage that manually.

Using a component isn't simply matter of importing and using, you have to integrate its state into your component, send all it's events back to its reducer, and then map each child state to the corresponding view. You end up with lots of boilerplate.

<comment><USER23> From my small experience with Elm all that boilerplate is nicely dealt by compression-oriented programming [1]. It is easy to move common code into helper function and Elm pure functional nature makes that rather maintainable. The hard part is to come up with good names for those helpers and avoid being too generic when refactoring code.

[1] [https://mollyrocket.com/casey/stream_0019.html](https://mollyrocket.com/casey/stream_0019.html)

<comment><USER3> I think the bigger problem here is the load it takes to change from stateless to stateful.

Let's say a create a stateless subscribe button component, that's part a of a stateless header component. It just accepts a listener that is called when the button is clicked.

Now, my designer wants me to add a dropdown menu to the subscribe button that allows people to enable email notifications. The dropdown menu needs state, so now I add a reducer and model to my subscribe button, I need to wire that up through the stateless header component making it stateful, then finally wire it into the the atom for the app. I ended up doing these chains of updates and adding parameters to add simple features.

Also, elm lacks typeclasses. Try making a modular form builder with elm that allows other authors to define fields with custom state, it's a mess.

</comment></comment></comment></comment><comment><USER24> I really like Elm. It makes writing code so easier. At first, it's bit hard to get into the habit. But once I got paste that state(that takes 1-2 days) and get into how to write Elm, everything become so clear.

I currently use Rails and this helper[1] to render an Elm component. Then I mount it like this: [2]

``` <%= elm_component('TeamPicker', {flags: { formAuthenticityToken: form_authenticity_token, domain: current.domain, teams: user.my_teams.map { |team| {id: team.id.to_s, name: team.name || ""} }, current_team: {id: current.team.id.to_s, name: current.team.name || ""} }}, {tag: 'div', class: "nav-item"}) %> ```

I think this is an easy way to get into Elm world step by step.

My site is still normal HTML but I used ELM here and there for some component require interaction/multi step form etc.

\---

[1]: [https://github.com/NotyIm/trinity/blob/master/app/helpers/el...](https://github.com/NotyIm/trinity/blob/master/app/helpers/elm_helper.rb) [2]: [https://github.com/NotyIm/trinity/blob/master/app/views/part...](https://github.com/NotyIm/trinity/blob/master/app/views/partials/dashboard/_header.html.erb#L46-L52)

</comment><comment><USER25> Off-topic, but here I go: Has anyone tried compiling Elm's compiler (written in Haskell) to JS (with ghcjs)? Are there any other small and approachable functional languages that are in-browser compilable and provide JS interop? I'd love to hack on a small Agent Based Modelling environment for the browser, comparable to what NetLogo[1] achieves in large on the desktop. Or maybe just make it a LISP?

[1] [https://ccl.northwestern.edu/netlogo](https://ccl.northwestern.edu/netlogo)

<comment><USER26> Since you don't seem set on a language, let me throw my hump in for OCaml. It's supports a functional style without forcing you to use it for everything; js_of_ocaml compiles OCaml's dense, high-performance bytecode to Javascript that apparently integrates well with web APIs.

</comment></comment><comment><USER27> I think the two things Elm lacks the most right now are some form of polymorphism and some way to make parts of an Elm application manage their local state.

At the moment there's only an internal API for the latter, and it's pretty ugly. I think what would be good for Elm would be to spin up a few separate Elm processes and provide an easy interface to make them communicate, sort of like in Erlang. You can do this using ports and binding them together with js right now, but it's kind of ugly.

</comment><comment><USER28> Late to the party, but someone posted in the Ableton "Get started making music" thread[0] that the components in their slick web app[1] were made with Elm. Pretty impressive.

[0] [https://news.ycombinator.com/item?id=14299816](https://news.ycombinator.com/item?id=14299816) [1] [https://learningmusic.ableton.com/](https://learningmusic.ableton.com/)

</comment><comment><USER29> Also have a look at [https://www.npmjs.com/package/fable- elmish](https://www.npmjs.com/package/fable-elmish) with F# flavor.

<comment><USER14> Do you use Fable / Fable-Elmish? If so, how do you like it?

<comment><USER29> I am working on a project using Fable Elmish and I am really happy with it. All I can say is give it a shot.

<comment><USER14> As a side project or at work? Thanks for any info.

</comment></comment></comment></comment><comment><USER30> The string "haskell" doesn't seem to appear in the text at all. That seems silly and rather patronizing, since it seems to be a book about a language that is heavily based on haskell, with very similar syntax. It bothers me when authors take this sort of "oh you don't need to know about that" approach.

</comment><comment><USER31> Last time i tried Elm I couldn't figure out how simply modify this clock example to move the hand quicker than every second

[http://elm-lang.org/examples/clock](http://elm-lang.org/examples/clock)

<comment><USER32> Well this isn't _that_ hard.

      Time.every (second / 2) Tick

and to still move it the same amount:

      Tick newTime ->
        (newTime * 2, Cmd.none)

<comment><USER31> I tried to use millisecond, but I don't it has the same interface as second.

</comment></comment></comment><comment><USER33> Is there an effort to bring elm on native mobile to compete/work with react- native?

<comment><USER34> There is [https://github.com/ohanhi/elm-native- ui](https://github.com/ohanhi/elm-native-ui)

</comment></comment><comment><USER35> I used elm for a while after mailx, but finally settled on pine. I never got used to mutt's UI.

Oh, how tech names keep getting recycled!!!

</comment><comment><USER36> Is it good for server side NodeJS as well?

<comment><USER37> Don't know about Elm, but there's Bucklescript or Reason and they generate really great, readable JS for use on Node.

(And even on the front-end there's `bucklescript-tea`; a port of the Elm architecture to OCaml)

</comment></comment><comment><USER38> Good question. For a CLI mail client, I prefer mutt or pine. But elm isn't too bad as an alternative, if those aren't available.

</comment><comment><USER39> Too many products with conflicting names. I thought this was about the email client at first.

[http://www.instinct.org/elm/](http://www.instinct.org/elm/)

<comment><USER15> > Update 06th Jan 2000: elm 2.4 is not Y2K compliant.

I'd be really surprised if it were.

<comment><USER40> > Sadly, most of the information about elm on the internet is badly out of > date.* The program is still being slowly developed, and the release (March > 24, 1999) of elm 2.5 is promising.

Awesome.</comment></comment></comment>


Libimobiledevice 1.3.0 Released - <AUTHOR> https://github.com/libimobiledevice/libimobiledevice/releases/tag/1.3.0 <comment><AUTHOR> featuring for the first time libirecovery and idevicerestore.

The last 1.2.0 release was in 2015, many users like me were in anticipation of a new release, distributions were packaging from git in the past. Congratulations to the team, as this sustains iOS device support across platforms and also lets older devices be still useful.</comment>


Global Network Attacks Were Up Over 98% this morning - <AUTHOR> http://www.akamai.com/html/technology/dataviz1.html

<comment><USER2> What this one-off look does not tell me - are the attacks higher on new areas not used to attacks, or are the highlighted areas used to a significant level of attacks and might therefore have defences?

And 98% of what?

At a glance and with no real history or numbers this would seem meaningless.

<comment><AUTHOR> There's a lot of chatter over on Reddit about it [0]. There was a pretty widespread outage around 4 hours ago. Likely an accumulation of attacks in commemoration of the anniversary of Aaron Swartz's death, as have been going on the last few days.

[0] [http://www.reddit.com/r/technology/comments/1v3fb2/internets...](http://www.reddit.com/r/technology/comments/1v3fb2/internets_going_down_abandon_ship/)

</comment></comment><comment><USER3> Is this a rare occurrence? 198% of "very little" is still very little.

I would've thought the figure often fluctuates by much more than this.

</comment><comment><USER4> Oops, all I get at that site on my iPad is a message ordering me to install Flash. Hello, Akmai? Anyone noticed the declining support for that old technology ?

<comment><USER5> Flash may be declining, but it's still one of the best remote administration technologies available.

</comment></comment><comment><USER6> The chaps that keep the CloudFlare global network running do seem a bit busy than usual today. I asked if there were "more attacks than usual" and they replied "Yes" and rushed off to do something.

</comment><comment><USER7> Very low amount of news in this article, doesn't mention the attack being used. I feel I needed to assume its a DDoS. But then several types of DDoS don't require large amounts of network traffic (and traffic volumes would be the easiest way to see DDoS from the outside looking in) some DDoS's can keep a server down with 10-100 packets per second.

Basically I learned nothing, and I want this article to have a "Want to know more?" button.

</comment><comment><USER8> Software on my deciated server already blocked attacks from IP's belonging to:

\- China

\- Mongolia

\- Netherlands

\- Turkey

\- Iran

\- Moldova

\- Romania

\- Kazakhstan

\- France

\- Taiwan

\- UK

Pretty diversified attack in progress.

<comment><USER9> Are you using something like fail2ban? I'm seeing slightly higher activities on all my servers, but I doubt it's actually statistically significant (i.e. not different from random)

<comment><USER10> A glance at the logs and it looks like our dedicated servers are fail2banning IPs at pretty much the normal background level—i.e. a fairly steady stream of mostly Chinese addresses all day long.

<comment><USER11> I would like to take this opportunity to air my grievances regarding fail2ban.

I'm not a security researcher, but fail2ban appears to be a log prettifier instead of an actual security apparatus, as it doesn't actually prevent anyone from logging into your box. Unless you've configured fail2ban to ban IPs after 1 failed attempt, if you don't have a secure password or any other such basic security measures, you are still at risk of getting pwned.

Instead of taking the time with fail2ban, I personally just make sure everyone uses passphrased ssh keys, or use a strong password in conjunction with a yubikey or 2 factor authentication and call it a day.

</comment></comment></comment></comment><comment><USER12> Lately i noticed a number of cloudfare outages in popular websites, does this relate or is it just because the cloudfare network had some technical glitches?

<comment><USER6> Which sites?

<comment><USER13> what.cd was one I noticed this morning.

<comment><USER14> what.cd doesn't use CloudFlare, but yeah they've been under attack

<comment><USER15> what.cd started using CloudFlare for the site, as was stated in the blog post regarding the DDoS attacks.

[liliff@ichigo ~]$ dig ns what.cd +short

walt.ns.cloudflare.com.

leah.ns.cloudflare.com.

</comment></comment></comment></comment></comment><comment><USER16> Is it typical that Texas would be such a large percentage of global attacks? It's at 24.83% at the moment.

<comment><USER17> Maybe the War On Christmas, Religious Bigotry, Racism, Homophobia and Misogyny, Gun Fanatics, Big Oil Companies, Global Warming Denial and Government Deregulation got started a little late.

<comment> vezzy-fnord Texas isn't even that bad. Of course the redneck mentality thrives in rural areas, but the metropolises are fairly progressive.

That said, they do hold disturbing power over certain things, such as education.

But still not as bad as Mississippi. Now that is a truly awful state. The absolute worst in nearly all demographics besides violent crime (where it is second, likely due to having the highest incarceration rate). Also the most religious.

<comment><USER17> As long as Texas has a troglodyte in the governors mansion, it deserves the terrible reputation it has earned for itself.</comment></comment></comment></comment>


Julian Assange Offers to Surrender to U.S. If Chelsea Manning Is Released - <AUTHOR> http://www.dailydot.com/layer8/julian-assange-obama-chelsea-manning/ <comment><USER2> He currently faces no charges in the US. There is no one for him to surrender to. It would be nice for him to surrender to British officials, so he could be extradited to the one country where there are currently charges against him.

</comment><comment><USER3> I understand this move but don't accept it. We should make justice prevail, rather then trade it, undermining the "rule of law" principle.

It would be a message to the world, especially for non-democratic part of it.

<comment><USER4> I think this is a very brave claim on Assange's part, and it fits well with his personality as a bold and brave leader.</comment></comment>


Show HN: Socibd – Build your own social network - <AUTHOR> https://www.socibd.com/ <comment><USER2> Nice, really, but if it's not open-source, I have zero interest.

</comment><comment><USER3> Nice. I will not use it (and I would rather write my own social network, if I would), but I see it being useful for some organizations.

I just keep thinking why is a "social network" defined by a news feed of connected people.

<comment><AUTHOR> It's not just news feed on our platform, Socibd is different, you can check out the demo: [https://demo.socibd.com](https://demo.socibd.com)</comment></comment>


"Coding Places" -- An Ethnographic Study of Software Development in Brazil  - <AUTHOR> http://codingplaces.net/

<comment><AUTHOR> I just picked this up from the library and I'm excited to get into it. Chapters on the perceived "patriotism" of Lua and much else.

You can read "Chapter Zero" here --

<http://codingplaces.net/en/chapter0></comment>