Why am I interested in Elixir? - <AUTHOR> http://underjord.io/why-am-i-interested-in-elixir.html <comment><USER2> I'm currently building a video course hosting platform with Elixir / Phoenix and all I can really say is this has been the nicest tech stack I've ever used in 20 years of web development.

IMO it really does feel like you get the best of everything (developer productivity, developer happiness, great language for creating maintainable code, OTP and the BEAM bring a lot to the table, it's memory efficient, tracing code without a ton of experience is very doable, it's fast as balls and Phoenix channels / LiveView is a great abstraction on websockets). I find myself fist pumping all over the place as I make progress towards this app while learning as I go.

I don't think I've liked a technology this much ever and I'm honestly surprised it's not already more popular than it already is. I've been around for the release of a lot of major frameworks and technologies (Rails / Django, Node, Go, etc.). Nothing has impressed me this much. It truly feels like it's a zero compromise environment to write code in and I hope I can still be using it in 10+ years.

<comment><USER3> Are there no bad parts?

<comment><USER4> \- deployment is terrible like really bad

\- average performance ( like 10x slower than Java even worse for CPU intensive tasks )

\- dynamic language ( this is the worst part ), working on large code base means problems ahead

\- lot of features from BEAM / OTP that are not that useful and done better on modern cloud platforms ( Kubernetes for instance does a lot of similar things but better and more flexible, apply to any languages ) People like to talk about hot code update which imo is a terrible idea, you should have a proper CI/CD pipeline to do that and not rely on dangerous features like that.

\- lack of ecosystem / libraries

\- it's FP, I count that as a personal cons

<comment><USER5> Regarding Elixir being a dynamic language, I've programmed in Java, C#, and other strongly typed languages as well as Ruby, Python, Elixir, and other dynamic languages since the mid 90s. Throughout my entire career, I cannot think of a single time when I've thought, "It would be so much nicer if this language was statically typed." It just hasn't ever been an issue for me.

If typing is something you really want to catch at compile time, and pattern- matching and guards aren't enough for you, you can always define Dialyzer specs and run Dialyzer during your build process. I'm currently working on an Elixir codebase that does this, but I've worked on others that don't, and I haven't seen much of a difference either way. Personally, I think strong typing is overrated.

<comment><USER6> Not to mention that for a decade and more, HN was full of "dynamic languages are the best! Who needs types! Dynamic FTW!" comments and articles. It wasn't fully accurate, and neither is the about-face to "Types FTW! Typing is the best thing ever!".

I have come to enjoy the more self-documenting nature of static typing (in PHP of all languages). Yesterday I worked on a legacy project with no typing, and to determine what was passed to an untyped method (with no documentation) required running the interactive debugger and inspecting what was passed in different scenarios...

</comment></comment></comment></comment></comment><comment><USER7> My current side project is in Elixir/Phoenix and it's sweet. Currently on 1.8.

I'm hoping to move to 1.9. The language just fit my ideology better, Jose Valim just stated that the language is mostly complete. All major planned features are completed unless something come up. The language isn't bloated, it's small and sweet, and it doesn't go out of the way to add random unnecessary features to the core.

I was fullstack since ~2008 and it is becoming pretty hard to be fullstack when frontend moves too dang fast for me. So the pace of Elixir and Phoenix is amazing. I know these two technology are relatively new but compare to its peers it's boring tech; as in it's battle proven and it's not going to radically change that often (at least not for the sake of hype or reinventing the wheel).

The community over at elixirforum is nice. There seems to be quite a few camps. The ones that stands out to me are the web dev and embedded camps.

<comment><USER8> The important thing to add here is that since it has powerful, hygienic, macros, there is nothing stopping you (or library writers) from adding new constructs and abstractions with zero runtime performance hit.

</comment></comment><comment><USER9> My startup uses Phoenix, along with a Vue front-end. The combo is an _absolute_ joy to use. The benefit that has had the most business impact for us so far is developer productivity.

A couple of months ago we met with a prospective client to discuss their use cases and conduct requirements gathering. They really liked what we showed them, but the CFO wanted a dashboard that displayed the data in the app in a specific way. We shook hands, told them we would contact them soon, and parted ways. It was around 9 AM when we stepped outside the client's office and got back in our cars.

By 5 PM that evening, we had a stunning, fully functional dashboard built and deployed to the demo environment. It utilized a few new database tables that aggregated data, some data processing done by Elixir, passing that data to the Vue front-end and displaying it using Charts.js and a few other UI libraries.

I sent a quick email to the CFO with the URL. He responded ten minutes later with, "holy cow, why didn't you show this during our meeting if you had it already?!" :)

We are meeting with them again later this month, hopefully to sign them on as a client.

(For reference, I've used Rails and ASP.NET with C# before Elixir, along with JQuery back in the day, and then a bit of React. Can't speak about other frameworks and languages.)

<comment><USER10> FWIW, I feel like I he this kind of productivity with server-side rendered ASP.NET Core web apps.

Something that is great about .NET is the available tooling - the debuggers in both Visual Studio and Rider are amazing, and it's difficult to imagine living without them.

AFAIK, you're relegated to rather primitive "println debugging" with Elixir - has this been an issue for you in practice?

<comment><USER11> > AFAIK, you're relegated to rather primitive "println debugging" with Elixir > - has this been an issue for you in practice?

Not at all. The traditional BEAM way of debugging is the tracing modules. For little things an `IEx.pry()` is often good enough though.

<comment><USER10> > _The traditional BEAM way of debugging is the tracing modules_

Excuse my ignorance, but by "tracing modules", do you mean "println debugging"?

I had a quick look at IEx.pry(), which at a glace I think gives you a repl at a given breakpoint? It looks like it also requires you to instrument your code with breakpoints, which TBH feels a bit ugly (but could presumably be solved with the right IDE)

</comment></comment></comment></comment><comment><USER12> I just finished writing my own in-house static site builder in Elixir. I come from the Ruby land. If you thought Ruby was awesome, then you would LOVE Elixir. I was hesitant at first, thinking "not another language.." but once I gave it a shot, I stopped looking back.

I'm an individual consultant with a very small team. Without Elixir, many projects that I've finished in weeks would have taken me months. This is a seriously under-rated language that would make you wonder why didn't you give it a shot earlier. It's that good.

My static site is now way faster than Jekyll or Middleman. I didn't re-write it for speed, speed was just a nice side-effect. I wrote it mostly for the language's flexibility.

With Ruby, which Middleman and Jekyll both use, you need to think in the traditional OOP way and sooner or later, you will hit the limits of the language itself. Whereas, with Elixir, everything is taken care of by guards. This is really one of the nicest codebases I've ever written in a while. This is in comparison to my earlier codebase which was written in Ruby, and I had to do all sorts of things like install a library to make the language more scalable. That was the ugliest hack I've ever done. [1]

Imagine, a Wordpress clone, only it runs on your computer and generates static files (this was my goal) but, written in less than a month by one person, working a full time job, with the same fit and finish of Wordpress.

Elixir is amazing.

[1] [https://github.com/aetherknight/recursive-open- struct](https://github.com/aetherknight/recursive-open-struct)

<comment><USER13> > My static site is now way faster than Jekyll or Middleman.

What? You mean the generation step is faster?

<comment><USER12> Yes. Correct.

</comment></comment></comment><comment><USER14> We are building a sales automation app using Elixir and Vue.

Our dev team seem really happy with this tech stack.

Productivity is awesome - we are four months in and already have similar functionality to a (sort of) competitor that has spent several years on their dev. This is the first dev project I have experienced where we are ahead of our planned milestones. Got to find some more features to quickly add!

My original concern was getting hold of developers as Elixir lacks the pure numbers of people that other server environments enjoy, but this has not been an issue. If anything we have got more senior devs then we would otherwise be able to get as they are excited to be able to use Elixir. Oskar in Poland and Dan in London, hats off, you are awesome!

Not sure if I agree with others that the broader environment is underdeveloped - yes there may be less versions of the same thing compared to a large JavaScript framework, but what is there is absolute quality.

Only (small) gripe is that Elixir is not a fast language. At one stage I thought this was going to be a real issue, but great support from the community and improved understanding on how to do things the Elixir way (let it fail!) seems to have resolved this for us.

<comment><USER2> > Only (small) gripe is that Elixir is not a fast language.

Which is interesting because Elixir isn't well known for being super fast when it comes to CPU bound tasks, but for a lot of semi-CPU intensive things you'd end up doing in a web app, it's still very very efficient.

For example I wanted to generate 5,000x 19 random character discount codes and my first attempt took 730ms to generate the codes while being a complete newbie to the language and cobbling together Enum.reduce / Enum.random while concatenating strings. Within an hour of asking if someone had a better way of doing it, I got multiple solutions from community members that were able to produce the same results in 25ms while still having very readable code (arguably more readable than my original implementation), and even one person came up with a solution to do it in 3ms.

It's almost hard to imagine being in a position in a web app where 3ms would be considered too slow to generate 5,000 unique discount codes with a custom character set.

<comment><USER15> Would love to see the 3ms solution. Post a gist if you have it available.

<comment><USER2> Sure. Here's a gist with 3 versions (original, the 25ms version and the 3ms version): [https://gist.github.com/nickjj/99ea84f460f41dae4139d0610ce80...](https://gist.github.com/nickjj/99ea84f460f41dae4139d0610ce8030c)

The reason I didn't use the 3ms version was due to it having too many concepts that are unknown to me. At the end of the day I would still need to maintain the code and the 25ms version is a lot easier to change (for me at least).

But, if I had very strict time requirements, I could just drop in the 3ms version at any time to get the speed boost which I think is reasonable. I only need to bring in the operational complexity when the demand calls for it. Otherwise the more human readable version is fast enough for my use case.

<comment><USER16> I suspect the 3ms version is still hamstrung by the system rng :) I might try to make it even faster if you don't mind!!

<comment><USER2> Sure, go nuts. Feel free to ping me on Twitter at @nickjanetakis and / or reply here if you can improve it.

</comment></comment></comment></comment></comment></comment><comment><USER17> The Elixir ecosystem offers a lot of interesting things. I'd like to underline those:

\- LiveView (which I use in production & have recommended for upcoming projects too) is a complete game changer, not because it allows to remove javascript, but because it removes a boundary (between the client & the server), making development & maintenance much faster since you only have one layer, and also making very rich features easier, because you can remain stateful during the processing (if you have interactive rich UIs with e.g. file upload & processing then live reporting as you process the file, this will remind you of desktop programming, in a good way)

\- While the initial setup of apps can be a bit cumbersome to my taste (like the SwitchTower period of Rails - e.g. you'll need a build server or a Docker image typically), the mental model of programming is quite simple in a lot of cases afterwards. I would say that junior developers can be onboarded quite easily (I'm starting to train some), and maintenance is quite sweet at this point.

I can warmly encourage you to try Elixir out (a nice way to get started by the way is to code ExUnit tests to try out the language, see [https://github.com/thbar/elixir- playground/blob/master/test/...](https://github.com/thbar/elixir- playground/blob/master/test/koans_test.exs) as a boilerplate to get started).

<comment><USER18> I can't tell what your description of LiveView is suggesting, I will need to read about it, sounds interesting. Is it like a codebase that is implicitly split on a back-end and a browser, without the need to write JavaScript?

<comment><USER19> Phoenix LiveView is basically server side rendering in real time.

The user's actions are sent to the Backend via WebSocket, and the Backend rerenders (parts of) the view and sends them to the user.

<comment><USER20> But ... why? Sends it back as ... HTML?

<comment><USER21> Not really, the frontend caches the static parts of the template and the backend only needs to resend the dynamic, changing, parts.

So "Welcome to $mysite, $username." would initially send the full rendering but if the data changes it would only send "Hacker News,lawik" over the wire. Somewhat simplified.

This covers it quite well: [https://www.youtube.com/watch?v=8xJzHq8ru0M](https://www.youtube.com/watch?v=8xJzHq8ru0M)

</comment></comment></comment></comment></comment><comment><USER22> All the backend code for my current startup is in Elixir (switched from Ruby, my previous love).

Elixir/Phoenix/Ecto are an absolute joy.

It took a bit to get used to immutability and FP but it feels so "cozy", for lack of a better word, to know exactly what my code is doing and to not be bit by obscured mutability and magic anymore.

<comment><USER10> From your comment I gather you're new to FP. Same here, but with around 20 years of OO experience, I really struggle to understand what idiomatic FP code should look like - was wondering how you'd coped on that front?

<comment><USER23> I don't have a direct answer to your question, but once I've played with Elixir a bit a couple years ago on simple projects, the whole FP paradigm clicked, and now I'm writing Elixir full time and immutability/functional programming has become second nature. Everything's just a matter of transforming data from one shape to another.

</comment></comment></comment><comment><USER24> Coming from Ruby and Python and a bit of node, Elixir encourages a really convenient mental model for thinking about small and large parts of your app in the same way. Net result is fewer bugs created, easier to write tests so you write more, and easy to debug when they do happen. And because of the fault tolerance, most production bugs are so transient they're not causing problems. I've run several small webapps with a few thousand users and the maintenance is minimal because of how solid the language is.

</comment><comment><USER25> Elixir is great. It's the most fun I've had programming. I wrote Erlang for a little more than a year, and I grew to like the idea, but found it hard to work with. Elixir is bringing me back around.

</comment><comment><USER26> My experience with Elixir has been great but one area of improvement is debugging. Maybe it's because I'm so used to using something like Chrome's developer tools, but I wish there was something as easy to use for setting breakpoints and inspecting the environment. Would love to know how others are debugging currently!

<comment><USER27> During a recent developer meetup in my country, I went to an elixir workshop where the host (an independent consultant) confided in us that several of her main clients had asked her to not reveal that they use elixir - they're apparently so happy with their choice that they treat it as a competitive advantage and claim to use a different stack when asked by competitors.

I can't know for sure if she was bluffing, but the idea really was interesting enough to make me wonder.

Edit: sorry, this was supposed to be a top level comment.

<comment><USER21> I've heard that a few times now, so I'm not sure if its a sort of community marketing meme or an actual truth. And I'm in the community :P

</comment></comment></comment><comment><USER28> Has anyone who previously preferred static typing converted (at least for certain projects) to using Elixir? I won't even put plain Node into production anymore, TypeScript at the minimum, but otherwise OCaml or Go.

<comment><USER29> Came from Java. Was an adherent to static typing everything. Dialyzer via Dialyxir is imperfect but helps you bridge the gap, especially with the error message improvements available via my Erlex library. You can turn on an optional Credo rule to require @specs for every public function, and adapt the rule trivially to require on private functions. Dialyxir is notably imperfect, but it catches a surprising amount of bugs, especially with some of the optional flags.

<comment><USER30> > _Dialyzer via Dialyxir is imperfect_

Imperfect is putting it lightly. I loathe it. Aside from useless errors ("here's what the success typing looks like! Ignore the any()s, and fix it! But I won't tell you what's _wrong_!"), it doesn't run against tests (which bit my ass in production last month due to some return values being ignored, and only actually matched in tests.)

> _especially with the error message improvements available via my Erlex > library_

My interest is piqued. Does it help unfuck Dialyzer error messages?

<comment><USER31> I agree, Dialyzer is just... horrible. It' hard to find anything good to say about it, unfortunately. Not that it's a trivial problem to solve, I get that.

<comment><USER32> As someone who quite likes dialyzer, it is most certainly not optimized for user experience :P

</comment></comment></comment></comment></comment><comment><USER33> Elixir is a language that I can very productive in day one. Only Ruby+Go enable me to be productive like that. Lot of people get turn down by so many thing in Elixir like OTP and other cool stuff that you never used and think it's complex.

I literally learn it on the job.

Lack of typing is the biggest issue for me, but pattern matching enable to get the shape of object and to a certain extent and I'm quite sasitify with it.

</comment><comment><USER34> Where are people getting their documentation for Phoenix? The stuff on the website is awful for grasping the bigger picture and how the parts of Phoenix combine. It gave me the impression of being an immature version of Rails when I tried it recently which doesn't gel with the attitude people seem to have of it.

<comment><USER21> I would say Phoenix doesn't attempt to be quite as magical as Rails and Django-style frameworks. It is a bit more explicit and as such hopefully easier to follow. The goal doesn't seem to be Rails for Elixir but rather that every new backend language needs a good web framework or it may be dead in the water.

As someone suggested, check out the Hex docs. That is where you get the better in-depth stuff and API reference. I've found the Getting started-stuff very helpful but also a bit limited in scope.

<comment><USER35> I've found that it really helps to start with the high-level overview of Phoenix if you don't have experience with 'Railsy' frameworks.

Then look at the 'magic' bits. <app_name>_web.ex is an important one, and the view/template distinction can be a bit confusing at first.

From there I suppose endpoint.ex covers pretty much all the rest of it (and then hands things off to router.ex).

With Rails I was always uncomfortable that I couldn't quite follow or understand the path taken through my codebase, but with the exception of a few 'magic' things, Phoenix is wonderfully transparent in this regard.

</comment></comment></comment><comment><USER36> I'm currently working on my side project the backend for which I've chosen elixir to go with. Looking at performance and long term maintainability, it doesn't seem to be a sucker like rails.

No magic, no hacky patterns. No mess like the one you see with Node. For what it does the platform is hella stable. I drifted towards Go for a little bit but man, code in Go felt too verbose with weird patterns. Go is a solid platform as well. But it's not just my cup of tea for web apps right now.

Scalability is in reach if you need it. Hell, even if you need ridiculous background job processing power, use OTP already. And I forgot, liveView is also rock solid. Honestly, if anyone would ask me what the best platform for web apps right now is, I'd just say Phoenix/Elixir.

<comment><USER37> I really, really enjoyed Rails when I discovered it and I still like it for some quick prototypes. Since finding Elixir, I haven't ever wanted to maintain a Rails app again, though.

The immutability and the lack of magic you mention are probably the two main reasons Elixir projects are easier to jump into. Even when macros are involved, you can still scroll to the top of the file, look at line with "use" or "using" in it and know exactly what is affecting your module.

With a lot of other languages, it's completely unknowable from inside one file to know where or if external metaprogramming is affecting your module.

</comment></comment><comment><USER38> The most interesting part of Nerves for me isn't rpi/embedded/resource-limited environments, but rather the ability to remove most/all of the security surface area of the userspace (say, in the cloud).

<comment><USER21> Oh yeah, that is an interesting thought. I've considered that too. Didn't cover it in the post because it isn't quite the focus of Nerves and I already had a lot to say.

I've seen a few different nerves-systems targeting AWS EC2. Have you tried doing anything in particular with it?

</comment></comment><comment><USER39> I will definitely be aiming to make my next career move to somewhere where I can be using as much elixir as possible.

</comment><comment><USER40> Great language and importing other technologies though NiF to integrate c and rust (wrapping c or not) with Elixir. My old company build many systems on it and hope another will in the future.

</comment><comment><USER41> Elixir has a lot going for it nowadays! My side projects are all using Elixir in some way nowadays.

</comment><comment><USER42> Elixir is an absolute joy to use. I love to use it whenever I can and coming from Erlang, boy its a step up!

It's just the Phoenix framework for which the initial setup of the project generator feels so opinionated. You have no options, no way to make a template for the generator. Phoenix's LiveView is a great feature and I want to use it. It's just Phoenix itself that feels off for me, not as straightforward as it should be. Does anyone else get this feeling?

<comment><USER43> You can still make a phoenix project without the generator.

I agree though that phoenix feels almost a little too heavy and opinionated.

</comment></comment><comment><USER44> coming from erlang elixir is much nicer than that. exunit is miles ahead of eunit and i feel like that would be enough to convince me to switch.

the with syntax is nice and helps to deal with early exit on errors but still feels a bit awkward compared to imperative control flow.

like you can do something like this in an imperative language:

        foo, err = func()
        if err != nil {
          return nil, Err("bad")
        }
        bah, err = func2(foo)
        if err != nil {
          return nil, Err("blah")
        }
        return bah

whereas in elixir you have to do something like the following in order to avoid the nesting of doom:

        with {ok, foo} <- func() |> Error.or({:error, "bad"}),
             {ok, bah} <- func2(foo) |> Error.or({:error, "blah"}), do
          bah
        end

like the with blocks kind of work until you have to transform the errors you receive then you need helper functions. if you are just doing static transforms like above it is not too bad but it starts to get hairy if you want to transform based on the returned error or variables in the function. whereas the imperative style you can inline your error handling logic nicely into the function.

for example what if i want to log something on the error path that includes some contextual information and custom formatting. probably, the easiest way is going to be to use with() and pipe to a custom function that triggers on the error path to do the logging because the code is going to start getting really messy. whereas if i was writing it imperatively i could just inline the logging statement most of the time because it is just a few lines of code.

        foo, err = func()
        if err != nil {
          return nil, Err("bad")
        }
        bah, err = func2(foo)
        if err != nil {
          Logger.error("err: " + err + " when processing: " + foo.name)
          return nil, Err("blah")
        }
        return bah

like i feel this is a bit messy but maybe it is actually not that bad:

        with {ok, foo} <- func() |> Error.or({:error, "bad"}),
             {ok, bah} <- func2(foo) |> Error.or_else(fn err ->
               Logger.error("err: " <> err <> " when processing: " <> foo.name)
               {:error, "blah"}
             end), do
          bah
        end

<comment><USER45> The idiomatic way to do that is to match errors in the else branch of the with statement.

I've been using Elixir and Phoenix for a customer for a couple of years. It's ok to great, especially when spawning jobs, with some stains.

I'm not a great fan of the with syntax. I wish they implemented it as a native statement of the language instead of as a macro. In that way they probably could let us write the same code inside and outside a with, instead of having to transform = into <\- and add a comma.

But the worst offenders are GenServers. They should really have the syntax of OO classes instead of the incomprehensible handle* functions. After all that's what they are, objects with their own CPU. (Remember Armstrong about Erlang being the only true OO language?)

By the way, that would make it easier to code, to understand and to migrate people from imperative languages.

<comment><USER46> I think one of the big points about being a true OO language is that the only way to talk to a process is via message passing. To me, the handle concept makes sense when you consider that it's handling a message in its mailbox.

<comment><USER45> Yes, I see that but it's an unnecessary complication. All I want to do client side is calling Module.func() and GenServer side I wish I could only def func() instead of all those incantations.

Furthermore GenServers mix client side and server side code in the same module. It's very confusing even after years. It's one of the most unpleasant coding experience of the decade for me.

On the other side I'd steal Elixir's pattern matching implementation and add it to every language. It's everywhere in Elixir and IMHO it's its strongest point.

<comment><USER35> I think Dave Thomas has a bunch of comments on the elixir forums, and perhaps blog articles and videos too that express a similar problem with GenServers. might be interesting to look those up.

IIRC, one approach he encourages is to at the very least keep most of your logic in a separate module rather than have just a GenServer module that contains a bunch of regular functions and a bunch of handle_<x> functions (which is kind of idiomatic, or at least what I've always been taught).

That said, it's been a while since I followed this discussion so I'd be happy to be corrected.

EDIT: calling a 'public' function in a GenServer and having a handle_<x> function actually deal with it does seem to have an explicitness about it that I think I like. Learning about processes and how they work, I imagine I might've gotten confused if a seemingly normal functional call somehow magically handed things off to a different process.

</comment></comment></comment></comment></comment><comment><USER47> Great write up, Elixir definitively deserves all the attention is getting and likely more. I recently helped my team so solve a huge blocker on a project, we had to create a few proxies to handle large amounts of data.

With very little effort or development time we where able to put together a highly scalable solution that is robust and very low maintenance.

</comment><comment><USER48> Spot on! I recently wrote a blog how we've been super happy with elixir/phoenix at AgentRisk: [https://blog.agentrisk.com/how-having-a-non- typical-tech-sta...](https://blog.agentrisk.com/how-having-a-non-typical-tech- stack-actually-helped-us-get-better-candidates-77d12a7796d4)

</comment><comment><USER49> Big fan of elixir, FP was something to get used to, but feels so much easier to reason about now that I'm used to it.

</comment><comment><USER50> What are its promising uses outside of web development? From the little I've seen it looks like a beautiful functional programming language, but I'm not even tangentially involved in web development.

<comment><USER51> * Hardware, from arduino and raspberry pi to embedded chips ([https://nerves-project.org/](https://nerves-project.org/)) * Multimedia streaming ([https://www.membraneframework.org/](https://www.membraneframework.org/)) * Financial services backend (divvy) * IoT ([http://farm.bot](http://farm.bot))

The erlang Vm's roots go back to telephony switches, so there are many cases beyond web.

</comment></comment><comment><USER52> People preferring static typing, what's your opinion about Elixir? Do big projects become difficult to reason about and maintain like with Python and friends?

</comment><comment> trevor-e Is it possible for someone to create a statically typed language that works on OTP/BEAM, or for an existing language to interface with them somehow?

I tried learning Elixir a while back and just couldn't get myself to like the syntax/ergonomics. It seems like most of the benefits people list for Elixir are actually attributed to BEAM, not the language itself.

<comment><USER53> You could look into Gleam [1] and Alpaca [2].

[1] [https://gleam.run](https://gleam.run)

[2] [https://github.com/alpaca-lang/alpaca](https://github.com/alpaca- lang/alpaca)

</comment></comment><comment><USER54> I really, really wish Elixir/OTP/BEAM would take hold in the soft real time / large embedded space. Such a nice fit.

</comment><comment><USER55> I am learning Elixir and build small library with it. Looking to integrate the Phoenix sometime near. I have asked feedback for this project on elixirfourm or on its slack channel. And people have been nice and helpful.

[https://github.com/navyad/moviematch](https://github.com/navyad/moviematch)</comment>


Show HN: NanoNews – A simple aggregated news feed based on specific key words - <AUTHOR> https://nanonews.app/ <comment><USER2> I'm not curious enough to register and try it out. I might, If I have some way to be sure it is not garbage and waste of time - screenshot at least, maybe simple interactive demo on the homepage

<comment><AUTHOR> Completely understandable, if you're concerned with sharing your personal information then feel free to use a fake/disposable email, as there is not validation for that (yet).

If nothing else I've learned that I definitely need to have a workable demo available before sharing this elsewhere. It'll be #1 on my TODO list. It's nearly bed-time for me now, but I'll get started on it as soon as tomorrow. Thank you for your feedback!

<comment><USER3> FWIW I think that unless the value is immediately obvious without experiencing it directly a demo is helpful but ultimately inadequate. I think you'd want something like the Reddit onboarding model, where you can use the service anonymously to an extent but eventually are compelled to create an account for some other value-add that it turns out you really want on top of the thing you were using anonymously. For Reddit that's things like being able to comment/post (or collect karma I guess) or being able to personalize the content by including or excluding specific subreddits from your "feed".

In your case maybe that's something like you can view other people's (anonymized) nano-news feeds, or feeds on specific topic you know to be popular, but you need to create an account to create a custom feed or more convieninetly aggregate feeds or whatever.

I don't really know where you are _trying_ to go with this though, and you've thought about it more than I have, so maybe I'm missing the point. But that's what I think I would do.

<comment><AUTHOR> Thanks for the advice, I agree with your assessment. I'll figure something out and will make onboarding a smoother and more palatable process than it is now. It seems like that's my biggest issue at the moment.

</comment></comment></comment></comment><comment><AUTHOR> Hey there HN! I'm the creator of Nano News. It's a fairly simple idea that I found didn't seem to exist. I'd love to hear some constructive feedback and I'm available to answer any questions or concerns you may have.

<comment><USER4> Hi, thanks for posting. Is there a demo or screenshot so we can see without creating an account?

<comment><AUTHOR> That would be a great idea, I should have done something like that before posting. I'll work on it for the future, but for now feel free to use a throwaway email as there is no email validation as of yet.

Sorry for the inconvenience.

</comment></comment></comment><comment><USER5> I have done something similar but is public access and only for tech related news. [0]. Tag cloud is generated for popular news items. That way just with one glance one can check out trending news and focus on that. Idea is to spend less then 10 minutes to consume the tech news spectrum. [0] [https://embit.ca/](https://embit.ca/)

<comment><AUTHOR> Nice! I think your feed is definitely more visually appealing than mine. I may have to draw some inspiration from you styling. Thanks for sharing.

</comment></comment><comment><USER6> I tried _python data science_ and got mostly advertising for training courses. How do you pull the content? List of sites?

<comment><AUTHOR> No it isn't just a simple list of the top search results. It should be filtered by results that are considered "News". It's like simply that there isn't much real "news" on Python Data Science that's been published in the past 24 hours, so it feels the gap with whatever can be found.

</comment></comment><comment><USER7> I really like where you are going with this!

Is there a way to reach out to you and discuss this further?

I am on Twitter @twishmay.

<comment><AUTHOR> Hey there! I followed you, follow aback and shoot me a message.

</comment></comment><comment><USER8> Got mostly irrelevant content to my keywords. Need to ask for better inputs to generate better outputs.

<comment><AUTHOR> On the page where you add new inputs, I have a list of tips and advice for maximizing results relevancy. It's hard for me to automate what "better" is for a product like this.</comment></comment>


Are Startups Cool? - <AUTHOR> http://dshan.me/are-startups-cool/

<comment><USER2> Startups are just like any venture into starting your own business: its hard. But, your article talks about 'working at a startup' as if interchangeable with 'founding a startup', when, obviously, its not. I agree with your tribe membership reference, but, its almost more like being in a bad relationship when you think about the employee.

Lots of young fresh developers are drawn to startups because of the pingpong tables and 'free' meals, potential equity in the business, and the coolness of being at a startup. They get a salary that isn't as much as they could be making at an established business, but they get all those perks, and they might even be able to own part of the business one day. They have to work long hours and get no vacation and have limited resources (sometimes having to use their own personal computer!) because the business is a startup and working at a startup means its exciting and you're going to take over the world and everyone will know about you, but, really, you don't have time to have a life. You're forced to write really bad code to get a feature out fast because the investors want to see something, anything, which means refactoring for a better future is out of the question because they just need to sell the startup to a big firm ASAP.

Its hard to keep a straight face around a developer that just moved to New York City talking about the cool new startup they just got a job at, quoting their salary (which is far below average) and pitching like a business person why their company is different than all of their more established competitors. I'm not trying to say 'straight face' as in laugh at them, I mean 'straight face' as in "you're about to fall off the cliff into bitter bitter land like me and I'm sorry!" especially when they talk of catered lunched and dinners and events and such because all it means if they feed you is that they don't want you to leave the office.

So, yes, I agree with you that startups are difficult. I just thought the employee's perspective is valid in this case too.

<comment><AUTHOR> I agree that I slipped in between 'founding' and 'working' a bit. The conversation that inspired the post was agnostic to the distinction, obviously, but you're right there are differences. I think it's most useful to actually explore the 'employee' experience, as outsiders will most likely end up there if they jump from traditional work - this is what I'm seeing most often anyway.

I wouldn't go so far as to say working in startups leads inevitably to bitterness for the people who are made for it. I did certainly write the post hoping it serves as fair warning that you should expect it to suck a lot.

<comment><USER2> Yeah, I shouldn't speak for everyone when I speak of my own bitterness ;)

Overall, I'm glad I worked for a startup because it gave me the insight to understand what I would want to do differently in my own business.</comment></comment></comment>


DigitalOcean lost our data and gave us $500 - <AUTHOR> http://dfernandez.me/articles/digitalocean_lost_our_data

<comment><USER2> So if you were backing up your data to Tarsnap, then you'd be up and running as quickly as you could launch a new instance and redownload everything. And $500 credit is enough to power a micro droplet for 100 months, or a small droplet for 50 months. DO handled this well.

[http://www.tarsnap.com](http://www.tarsnap.com)

EDIT: s/years/months/g. Thanks.

<comment><USER3> You mean months.

<comment><USER4> 50 months == 4 years and 2 months 100 months == 8 years and 4 months

</comment></comment></comment><comment><USER5> So this is a technical problem I am having right now that's preventing me from backing up a Postgres database completely (hope someone here can help).

I have a master Postgres database that is receiving a TON of transactions per second (I'm talking about thousand concurrent transactions). We tried running pg_dump on this database, but the DB is just too huge, and it took more than 4 days to completely dump out everything. Not only that but it impacted performance to the point where backing it up was just not feasible.

No problem.. just create a slave-DB and run pg_dump on that, right? We did just that, but the problem is that you can't run long running queries on a hot standby (queries that take more than a minute).

What would you do in my scenario? With the hot standby, I technically am backing up my data, but I would have 100% piece of mind if I could daily backups in case someone accidentally ran a "DROP DATABASE X", which would also delete the hot standby/slave db as well.

<comment><USER6> I use postgres and ran into this issue as well.

Inside postgres.conf for the slave I have the following:

# These settings are ignored on a master server.

hot_standby = on # "on" allows queries during recovery # (change requires restart) max_standby_archive_delay = 900s # max delay before canceling queries # when reading WAL from archive; # -1 allows indefinite delay max_standby_streaming_delay = 900s # max delay before canceling queries # when reading streaming WAL; # -1 allows indefinite delay #wal_receiver_status_interval = 10s # send replies at least this often # 0 disables #hot_standby_feedback = off # send info from standby to prevent # query conflicts

So I set it to 15 minutes for this specific backup server which I am okay with. I already have another server with much shorter time delays.

<comment><USER5> So you basically sacrifice speed of replication in order to ensure long running queries don't get cancelled?

<comment><USER7> It's sacrificing the expected latency of replication.

Incidentally, if you're on 9.3 and your HW can handle it, take a look at parallelizing the pg_dump. If you've got a relatively fast disk subsystem and many cores, you can get a speedup. I've found it tends to make the dumps O(biggest table) instead of O(sum of all tables).

(It's native on 9.3, I've hacked up some scripts that do it for 9.0, but they don't get a consistent snapshot, so I do it during scheduled downtime. OTOH, the dump/restore is ~6x faster OMM/OMD, so the downtime is that much shorter)

</comment></comment></comment></comment><comment><USER8> The abrasive headline is kind of unfortunate, as the actual moral of the story given at the end is exactly the right takeaway: Never assume your hardware is infallible, so always have backups that you know you can use when your server experiences a wildly improbable catastrophe.

Also, very impressed by Digital Ocean's response here. Given their reputation as a budget host, they really do put a lot of effort into service.

<comment><USER9> > wildly improbable catastrophe

Or an extremely probable one like a hard disk failure. They only last a few years; most data centers see an annual replacement rate in the 2-13% range. The failure rate is a known quantity, and their limited 1-3 year warranties that reflect that expectation.

There isn't a host I've used more than a few years where I haven't seen hard drives (and power supplies) fail. I don't know if my experience is typical, but hardware RAID controllers seem to go bad on me not-infrequently too, losing the whole array at once. They don't pay you when it happens, they just replace it. DO was _extremely_ generous here.

<comment><USER10> Was going to say the same thing, Dual drive failure on a RAID5 system with five 2TB drives is 1 in 12. With 3TB drives that goes up to 1 in 7.

The underlying issue is that the uncorrectable read error rate is 1 in 10^15 bits, this is just physics (thermal noise, read/write signal loss, etc) But with 8b/10b encoding that is only 90TB worth of bits. Rebuilding a RAID group of 5 with four 2TB "good" drives (8TB of data to be read) you will see a failure in one of the other 4 drives 1 in 11.25 times. (90/8). With 3TB drives 1 in 7.25 times. Using simple mirroring you won't be able to re-silver a mirror 1 in 1:45 or slightly more than 2% of the time for 2TB drives.

Dual parity, or triple mirrors (x3) are now the minimum bars for making storage reliable.

</comment></comment></comment><comment><USER11> That's _way_ more compensation than I would have expected. AWS usually won't even notify you until after the node has gone down.

Hardware failures happen; an application needs to be tolerant of it.

<comment><USER12> And with S3 storage so cheap, they should be backing up directly to S3, across multiple regions.

</comment></comment><comment><USER13> This is 2013. Why are we still talking about backups as a lesson learned? Is it because startups are skimping on Sys Admins?

<comment><USER14> It's because some startups have developers that open w3schools, start typing examples, and somehow ship a quasi-working proof-of-concept that goes into production.

There's a bit of "if it ain't broke don't fix it" here, but a whole lot of "get with the program" still required.

<comment><USER13> Well as a professional Systems Administrator, it pisses me off more than it probably should. It's like you want to know why I'm worth what I'm asking because when your shit falls down and goes boom, I'll get you back up and operational in minutes or an hour.

Because it's my fucking job to help you manage your IT risks. Azure, Heroku, AWS aren't replacements for Systems Administration, they're just tools in my arsenal. I don't understand the mentality it takes to go into business (beta or not) without having SOME understanding of your risk. The fact that DO paid you a not insignificant amount due to downtime, means you're damn lucky.

</comment></comment></comment><comment><USER15> It's great you had backups, but why a write-up. Is it an attempt to smear DO's otherwise good name? It's an un-managed VPS so it's your responsibility to keep backups of your box, not theirs. And hardware fails all the time, so you can expect this to happen anywhere.

</comment><comment><USER16> > And if you just launched and have a single instance running, let your alpha > users know that there will probably be some downtime.

That's true. But there's no reason for extended downtime even if that instance goes down. Make sure your whole setup is described in chef/puppet/salt/ansible/cf/whatever and even a rebuild from scratch takes only minutes then. There's really little reason to skip that these days.

</comment><comment><USER17> DO is affordable enough that the minimum you should run are 2 droplets. Having said that, I'm actually fairly impressed with the 500 credit and now you have no excuses to run 2 vms. Consider it a lesson learnt.

</comment><comment><USER18> Alternate title: DigitalOcean went above and beyond their SLA for us.

</comment><comment><USER19> DigitalOcean's pricing page indicates that "All cloud hosting plans include automated backups". ([https://www.digitalocean.com/pricing](https://www.digitalocean.com/pricing)) From the email you received, it sounds like this is clearly not the case. I wonder what other claims DigitalOcean is making that are not true.

<comment><USER20> There is an automated backup system that you have to enable for a droplet, that creates a snapshot every few days. It's a clear part of a droplet's control panel. They began charging for it in July 2013. The price is 20% of the droplet's monthly cost. Sounds like they need to update their pricing page.

This is pertaining to a droplet feature though, and not some low-level backup system. Meaning, it's not as if they're lying about the infrastructure below what a normal customer can see. They just have an erroneous pricing page.

</comment></comment><comment><USER21> That's always a risk with servers. They can die and everything can do with them. But they had backups so they didn't lose everything.

</comment><comment><USER22> It seems that is very nice from DO. I would not expect them to be responsible of data loss in case of hardware failure.

</comment><comment><USER23> This might sound a bit glib, but raid 5 shouldn't really be used in modern storage.

If you ignore the performance issues (which can vary by device) its just not safe. Depending on the size of drive can take anywhere up 30hours+ to rebuild.

bear in mind that you tend to use disks that are all the same batch, it leaves you in the danger zone for far too long.

Your options are: somesort of clever RAID (ZFS type thing) Another type of clever RAID (Like the LSI chunk thingy in the DCS37000) RAID 10

<comment><USER24> For SSDs, where the time-to-read/write-full-capacity is typically much less than HDDs (both due to higher speed & lower capacity), it can be less of a poor decision. SSDs also have somewhat more advanced machinery for data integrity checking and slightly friendlier failure modes (e.g., the sectors "wear out" over time, but the firmware tends to warn you as that starts to happen, and you're not going to hit a sudden mechanical failure).

</comment></comment><comment><USER25> Was this really a dual drive failure, or was this the rather common single drive failure plus undetected errors on a backup drive, that show up when trying to rebuild?

Because that happens a lot, and it's very important to do a _full_ read of every drive in the array at least weekly! You have two options for doing that:

If you are using linux md raid then run the "check" command, which automatically does the test using background I/O (but does still impact things). On debian, and perhaps other distros too the mdadm command will do it every month by default. Make sure to set a minimum speed or it might never finish if you have a busy system.

You can also use the built in SMART on the disk to do a long self test. This also uses background I/O and I think it has a bit less impact on existing operations. (But you have to have some idle time on the disk or it will never finish.) If you install smartmontools you can set smartd to do this test for you every week, and keep an eye on the results.

I personally do both, plus a short self test of the disk every night.

</comment><comment><USER26> I truly believe that we did the best we could in this instance. Drive failures are always always unfortunate, even with backups, downtime exists.

That being said, we're always genuinely looking to improve, and I'd welcome your feedback on how you feel we did and how you feel we could do better. Please do reach out to me personally john@do! Thanks. :)

</comment><comment><USER27> "we had backups".

Do you mean you had backups on digital ocean (using their backup service) or something else?

<comment><USER28> Me too. As I know the DO backup is saved on Amazon no?

</comment></comment><comment><USER29> Good thing you had backups.

With that being said, these days it's a good idea to use a deployment tool or configuration management system like puppet/salt/ansible/chef/etc, especially in a virtualized environment. This will help with scalability as well as situations such as these.

</comment><comment><USER30> This is the reason why I moved all data away from my server instances. My images are hosted by cloudinary(with s3 bucket backup) and my databases are Amazon RDS instances. I don't care if a server goes down, I can launch a new one in a matter of minutes (with ansible) without any data loss.

<comment><USER9> Which of those things you named is protecting you from losing your database? I paid the uber-high fees for RDS with Multi-AZ failover and... well... it failed, then didn't fail over to another AZ. The instance ended up down for hours before they recovered it. That's when I jumped ship from AWS, wrote off the reserved instance payments, moved the database to some rented servers at SoftLayer, and handle nightly off-site backups myself. Not only do I have _working_ backups and failover, but 4-8x the capacity per dollar.

</comment></comment><comment><USER31> The author is sweet, his conclusion was "always backup your data" if it was me I would probably say "I'm moving away, will never trust them again on my data" ..

<comment><USER32> Is there a provider that credibly offers high availability Linux servers? Disks fail, capacitors fail, power fails, network equipment fails (a lot). I'm sure it's possible to build an ultra-reliable server that mitigates all that but I doubt it would be worth the money.

</comment></comment><comment><USER33> The $500 credit from DO is quite reassuring. Usually if the HD fails and your data is lost, your out of luck. I hear the "horror" stories of some hosts reusing consumer Hard Drivers between servers so learned, Your data is your responsibility. I'm glad the OP had backups but these failures happen, thankfully DO had the business sense to compensate them.

Seems good advertising for DO, as any knowledgable system admin knows Drives fail. DO could have not done anything.

</comment><comment><USER34> Linkbait title, they handled it exceedingly well. Onus is on you to back up your data. You did not 'lose' your data, given you had backups.

</comment><comment><USER35> > And if you just launched and have a single instance running, let your alpha > users know that there will probably be some downtime.

How about instead "alpha users should know that there will probably be some downtime". Multiple instances don't really fix that.

</comment><comment><USER36> Nice move from DO to give everyone $500 credit. As I remember, they don't guarantee data safety (you still need backups even if they did). Double disk failure is a rare thing, but it happens.

</comment><comment><USER32> Is DO apologizing here as a PR move, or do they make reliability claims that would lead you to think this sort of thing wouldn't happen?

</comment><comment><USER37> DigitalOcean proudly advertises that they use SSDs... A dual drive failure with data loss should be very rare. I wonder what happened.

</comment><comment><USER38> So they now run raid5? I remember they boasted about raid10 a while ago, now they silently downgraded to raid5 :)

</comment><comment><USER39> What is the best/cost effectiv way to backup a windows server?

<comment><USER12> Backup the data and configuration information to an object store (AWS S3), use configuration management tools so you can programmatically provision a new server (dedicated or virtual, doesn't matter) in the event of failure. Provisioning should include functionality to deploy your application, and to restore your data to whatever data storage application (SQL, NoSQL, etc) you're using.

If you have questions, more than happy you provide free advice.

</comment></comment><comment><USER40> What are the best options for backing up DO externally?</comment>


Flash Player Will Support VP8 - <AUTHOR> http://blogs.adobe.com/flashplatform/2010/05/adobe_support_for_webm.html

<comment><USER2> What about Vorbis? Will it be able to play Vorbis in Ogg as a fallback for HTML5 audio? Or do we just use a .wbm file without video track?</comment>


Financial Times Won't Give Apple A Cut, Drops iOS for Web App - <AUTHOR> http://www.macrumors.com/2011/06/07/financial-times-wont-give-apple-a-cut-drops-ios-for-web-app/

<comment><USER3> I think we are close to the tipping point where a majority of developers begin to favor webapps to iOS native apps. I've seen this coming a mile away. Apple almost lost a big portion of its development community 2 years ago with that whole 3rd party development platform issue. Apple relented, and they are now turning a different crank with the big subscription tax. They are playing a game of monopoly here. It's the same kind of game Microsoft played in the 1990's and by attrition have lost to the Linux/OSS movement.

Apple currently holds one trump card with Safari on IOS devices though. By restricting HTML5 Audio controls, and rendering engine speed, it prevents games and music web apps from being viable inside the browser.

<comment><USER4> > _I think we are close to the tipping point where a majority of developers > begin to favor webapps to iOS native apps_

Isn't this pretty much what Apple wanted in the first place?

<comment><USER5> No. It just meant that they did not have the native application development SDK and the associated App Store infrastructure ready that time. Saying "who needs native apps when there is the Web" up until releasing the native App Store is typical of Apple - "who wants to watch video on small screen", "People don't read anymore" etc. come to mind.

<comment><USER6> Actually you have evidence of that? Cause I don't believe that for a second. I was a member of the ADC at that time. And I don't remember seeing ANYTHING about a iphone (this was before it was renamed to ios) dev kit.

But my email was full of guidelines to create web apps for the phone. What I think happened is that (at that time) Apple wanted Mac developers to make iphone apps, badly. And mac dev's wanted to do it natively. A half a year later, I see the beta of the dev kit.

I doubt Apple imagined the app store market at that time. And like most grand success stories, there was a lot of luck involved.

<comment><USER5> Evidence of what? You seem to concur that native sdk and app store did not exist at the time when Apple said Web Apps are good enough.

Sure they didn't wanted to lose developer attention and had to keep them engaged with web apps etc. until they figured out the strategy on native development and the app store.

And I can't believe that Apple had totally closed the door or hadn't thought about native apps at all when they initially released the iPhone - <USER2> wasn't any sensible reason not to - it wasn't a new thing, at least some of the phone platforms had native apps and there were even App Stores before that. It was just a matter of time.

<comment><USER4> Looking at the 2007 WWDC press release, it looks like Web apps _was_ they way Apple seriously wanted to go: "Developers can create Web 2.0 applications which look and behave just like the applications built into iPhone, and which can seamlessly access iPhone's services, including making a phone call, sending an email and displaying a location in Google Maps." If nothing else, it gave them a much larger potential developer base than relying on native development alone _and_ by sticking to standards it insures that the iPhone would always have a place in the table.

</comment></comment></comment></comment></comment></comment><comment><USER7> A little OT, but I was actually thinking about the in-app subscriptions policy the other day as it applies to SaaS. I know that there was some email floating around that was supposedly from Steve Jobs saying it didn't apply, but I was curious if anyone out there has had an app rejected (or accepted, for that matter, since the policy took effect) for not accepting in-app purchases of subscriptions. We are thinking about beginning work on a companion app to a SaaS product. The app would be free, but step one is signing in to your account on the SaaS, which is not. There is also no free tier. We cannot afford to give Apple a 30% cut of our subscription price, so we are not planning on offering an in-app subscription purchase option. We would like to include a link that opens a page to the main site in a browser for those who don't already have accounts, although I know that is explicitly forbidden for apps that fall into the subscriptions category.

Any thoughts? Just curious what our chances of rejection are for something like this in the current "climate".

<comment><USER8> Get their email when they use the app, however you can do that, send them a thank you email and offer them a discounted upsell?

</comment></comment><comment><USER9> If you are't into first class economic writing, and I'm talking so good it almost explains the euro, pick up the FT Saturday edition. Tremendous coverage of books, arts, personalities, and occasionally some truly quirky stories. Also: A "How To Spend It" magazine that takes appalling up to the point of irony.

I know, the HN audience doesn't care. But amid all the discussion of platform strategy, the FT staff deserve a salute. There is a reason this paper doesn't need Apple.

</comment><comment><USER10> We all know how this will go, apple waits six months until it's pissed off the maximum number of people and then it'll reverse its decision or make the terms much more acceptable.

</comment><comment><USER11> If this is the best you can do with an HTML5 'app' then native apps have a long future. It's buggy, laggy, animations are wrong, graphics are low resolution in places, and user interface widgets are odd and non standard.

<comment><USER12> That's why I'd rather just have the regular old "Web" for stuff like this. There seem to be a lot of experiments to 'appize' Web sites for tablets and the like, and while most of them look better than typical Web pages at first glance, they're usually laggy and less immediate than if you'd just seen a regular web page in the first place (a common issue is scrolling.. if I get the dreaded 8 frames per second effect, I'm outta there).

<comment><USER13> <http://apps.ft.com/ftwebapp/> is slow as a dog, sure flash blob isn't helping.

but <http://m.ft.com> is clean, nice and fast. personally i often find the mobile version of sites nicer (in a similar way to the print view is often the best way to read a page)

edit: ugh you need to spoof your browser to access <http://m.ft.com> on the desktop.

</comment></comment></comment><comment><USER14> People like to talk about black and white, native versus web, etc, but this is simply a matter of finding the right fit for the Financial Times. Many of the newsy apps can be done very well with the latest browsers (and other kinds of apps, too!). It makes sense for subscriptions as well as for maintenance and tech investment, and they won't lose much (if any) functionality. Some apps will always be better suited for native, but as the browser technology grows, we'll move back to web apps more. It wasn't so long ago that touch gestures were pretty hard to do right in a web app, so the only way to do a mobile app right was to go native.

</comment><comment><USER15> For straight content delivery companies, making a web app should be the first priority. A native app isn't going to offer much in the way of enhanced functionality, and your effort will likely be diluted while you chase multiple platforms.

It makes even more sense to focus on a web app when your company already has a web site. You likely already have the expertise on staff to create a good web app, and any new features or techniques you develop can be easily used in both places.

</comment><comment><USER16> I think a lot of people are missing the bigger picture here, which is Apple is unwilling to just hand over user details, which the Financial Times and the likes want. The 30% cut "gripe" is just what they are telling the public to try to get you on "their" side. If I recall, Amazon actually had (has) a larger piece of the pie for subscriptions, but they are will to give out User Information.

</comment><comment><USER17> The "HTML5 apps don't cut it compared to native" argument is incredibly short sighted. The pace of development in this area is staggering. Things are moving very quickly and in a short time, the days where HTML applications didn't perform as well will be long forgotten - as forgotten as the days when the internet ran at 2400 baud or when you needed a huge tape to record television.

Think of the future, not the present.

</comment><comment><USER18> Apple is playing with fire, they have built an incredible platform for others to build on top of, but a platform requires a level of trust from developers and businesses in order for them to invest in it. Apple seems to be doing their best to destroy that trust. What Apple's greed seems to blind them to is that while, yes, companies gain a lot by building on Apple's platform, Apple also accrues a lot of benefits just by those apps existing, without having to take a 30% cut.

</comment><comment><USER19> Some discussion on this earlier: <http://news.ycombinator.com/item?id=2629114>

</comment><comment><USER20> Glad this is happening, hopefully this forces Apple to lower their cut, it's not like they can't afford it.

</comment><comment><USER21> And so it begins. The migration from 'app stores' to the web.</comment>


Terry Jones has died - <AUTHOR> https://www.bbc.com/news/entertainment-arts-51209197 <comment><USER2> Not only a comedian/actor/writer but also a fine medievalist who engaged in original scholarship. Some years ago he caused quite a stir in Chaucerian circles by arguing that the Knight in the Knight's Tale (Canterbury Tales) was not actually the ideal of a knight but rather a mercenary and further, that the Knight's Tale, rather than being an ode to chivalry, "emerges...as a hymn to tyranny, dressed-up in the rags of a chivalric romance."[0] This sounds fairly minor but it's an interpretation, albeit one not wholly accepted by many scholars, that upended centuries of scholarship. An impressive achievement.

[0] [http://smuhlberger.blogspot.com/2007/03/chaucers-knight- by-t...](http://smuhlberger.blogspot.com/2007/03/chaucers-knight-by-terry- jones.htm)

<comment><USER3> > _Not only a comedian /actor/writer but also a fine medievalist who engaged > in original scholarship._

As much as I loved discovering Monty Python in my college years, I think I've watched more episodes of Terry Jones' history documentaries than Monty Python episodes. A lot of of them are on YT, uploaded way back when 480p was the best you could get. I would love to see them again in high quality some day though.

<comment><USER4> Link(s) for archival purposes?

EDIT: Thank you, it is appreciated. Archived.

<comment><USER3> I just searched for it for you, and by coincidence found one I hadn't seen myself yet! _The Hidden History Of Egypt with Terry Jones_ [0]. Aren't I lucky? I can honor the man while treating myself.

Anyway, these playlist[1][2] contains his _Medieval Lives_ series as well as a few about the Romans (I think there were more episodes in that series though). Sadly, his _Crusades_ and _Barbarians_ series have all been blocked. There are also a few other documentaries he hosted - including one about the number one!

[0] [https://www.youtube.com/watch?v=vVw6b15w8Ys](https://www.youtube.com/watch?v=vVw6b15w8Ys)

[1] [https://www.youtube.com/watch?v=NbisfXkmOx8&list=PLEr7udSNoJ...](https://www.youtube.com/watch?v=NbisfXkmOx8&list=PLEr7udSNoJQPbn36sutvWLbC8fl4CUhVk)

[2] [https://www.youtube.com/watch?v=jrLQW1vQklE&list=PLaaaWAUe8c...](https://www.youtube.com/watch?v=jrLQW1vQklE&list=PLaaaWAUe8cR6S7KKreTa771YUPBqMJz80&index=13)

<comment><USER5> Thanks for these great links! Terry seems to have a penchant for alternative hypotheses, and a refreshingly entertaining style of presentation.

<comment><USER3> Makes perfect sense to me - I would have had a harder time reconciling a legendary absurdist contrarian comedian with a conformist historian! ;)

</comment></comment></comment></comment></comment></comment><comment><USER6> I got to take a writing workshop with him once and I'm proud to say I made him laugh. He was very kind, and obviously had great stories.

Python was very much a group effort, but I think he made an enormous difference behind the scenes.

<comment><USER7> I got Kevin Smith laughing hysterically on stage once without even trying, I felt like I'd unlocked some life achievement, it was awesome. I can only imagine how great it would be to get a laugh out of a legend like Terry Jones!

<comment><USER8> I vaguely remember Dan Harmon talking about this on his podcast, lord knows which episode. Basically about how his audience or random people he brings up on stage can spontaneously cause him to crack up more than any professional.

He reasoned that since he's a professional, when he watches another comedian act, he pretty much knows what's going on under the hood. He can predict where a joke is going because there are tried and true formulas, he can see through their pacing, etc. But if a noob cracks one, even if it's a joke he's heard before, he knows there's probably none of the calculation that a pro puts into it. It was a genuine thing, which makes it all the more hilarious to him.

<comment><USER9> That might also be why he enjoys the company of that box of randomness going by the name "Rob Schrab".

</comment></comment></comment></comment><comment><USER10> The type of dementia he had - FTD - sounds particularly painful for somebody who had such a strong personality and who clearly loved writing and language as much as he did.

I've put together a JustGiving page to raise money for the leading charity in this area in the UK, with the hope that in Terry's memory a few people might be able to say thank you with a few quid.

[https://www.justgiving.com/fundraising/Terry-Jones- RIP](https://www.justgiving.com/fundraising/Terry-Jones-RIP)

RIP Terry.

<comment><USER11> Great idea. Thanks for setting that up!

</comment></comment><comment><USER12> Not ready for Monty Python crew to kick off, what legends that changed everything, for the better.

Some Terry Jones quotes:

> _" Some people are passionate about aisles, others about window seats."_

> _" The funny thing about history is that we imagine that people didn't laugh > in the old days, but of course they did, at stupid things."_

> _" Every age sort of has its own history. History is really the stories that > we retell to ourselves to make them relevant to every age. So we put our own > values and our own spin on it."_

> _" I'm cheerfully optimistic about life. Optimism is very important!"_

We'll try to be optimistic Terry Jones, we'll try and thanks for helping by making us think critically and laugh at the absurdity of things. Always look on the bright side of life.

<comment><USER13> > "Some people are passionate about aisles, others about window seats."

Isn't anyone passionate about center seats?

<comment><USER14> I passionately hate them.

</comment></comment></comment><comment><USER15> Terry Jones wrote the novelization (and voiced the audiobook of that novelization) of the videogame Starship Titanic. That novelization and its audiobook are two of the best things about the game Starship Titanic. The game is more associated generally with Douglas Adams, but the novelization was entirely Terry Jones. Worth a read or a listen if you get a chance, whether or not you have played or have any interest in playing the game.

(The game is a weird relic of a Myst clone that wanted to be a Parser IF game and had delusions/experiments of using early chat bot AI/ML that mostly fall flat.)

(The game was published through traditional book publisher Simon & Schuster, and requiring that novelization was probably the smartest thing they did. I will forever recommend the book.)

<comment><USER16> I remember getting emails from Stevedave and Davesteve for weeks after signing up!

Sadly, shortly after that Adams died. I bought "Salmon of Doubt" and it took me almost 10 years to read it because I didn't want to read his final words.

<comment><USER17> Same. Read every other Adams book at least a dozen times. That one sits on the shelf untouched.

</comment></comment></comment><comment><USER18> One of the best "morbid motivations", from Terry:

[https://i.imgur.com/5J0AH6T.mp4](https://i.imgur.com/5J0AH6T.mp4)

</comment><comment><USER19> If you've already watched Holy Grail, Life of Brian and Meaning of Life so many times, you know them by heart. You should watch Monty Python's Flying Circus - Season 4 next. It's the one they did without John Cleese. Some of the stuff in there is so surreal and out there, that it feels different from the other stuff they did as a group.

It's a great way to remember this beautiful man.

</comment><comment><USER20> Years of living in a shoebox in the middle of the road will do that to you.

Rest in peace.

<comment><USER21> If you love the Four Yorkshiremen sketch you'll love Capstick Comes Home

[https://youtu.be/I2AcJSkUw6M](https://youtu.be/I2AcJSkUw6M)

They are only slightly exaggerated from the war stories you got as a kid.

<comment><USER22> Just in case, adapted to computing:

[https://tinyapps.org/blog/200702250700_why_in_my_day.html](https://tinyapps.org/blog/200702250700_why_in_my_day.html)

</comment></comment></comment><comment><USER23> No no he's not dead, he's, he's restin'!

So long Terry and thank you for making the world a better place.

<comment><USER24> He's pining for the fjords!

</comment></comment><comment><USER25> Worth pointing out that the current political climate at the BBC would render Monty Python impossible to make today, and apparently this is considered progress.

<comment><USER26> Not entirely sure about that.

I enjoy listening to the shows "Dead Ringers" and "The Now Show" on Radio 4 which provide pretty accurate satire of current politics. Other enjoyable comedy sketch shows include "That Mitchell and Webb look" and "Harry and Paul".

There remains hope.

<comment><USER25> Well...

[https://www.telegraph.co.uk/opinion/2018/08/04/bbc- wouldnt-d...](https://www.telegraph.co.uk/opinion/2018/08/04/bbc-wouldnt-dare- make-comedy-like-monty-python-today/)

[https://metro.co.uk/2018/07/05/monty-python-actor-terry- gill...](https://metro.co.uk/2018/07/05/monty-python-actor-terry-gilliam- criticises-bbcs-move-towards-diversity-calls-black-lesbian-7687186/)

[https://www.dailymail.co.uk/news/article-5898519/BBC-boss- sa...](https://www.dailymail.co.uk/news/article-5898519/BBC-boss-says-reject- Monty-Python-today-privileged-white-men.html)

<comment><USER27> Tabloids and opinion pieces in deeply partisan papers are what they are, but they aren't at all reliable for establishing truth.

Sadly, many Pythons got old, lost their edge, and wound up wealthy entitled out-of-touch conservative old men - their complaints reflect their own shortcomings more than anything else.

Terry Jones was one of the exceptions, which makes his loss all the sadder.

<comment><USER28> Its not what the tabloid said, it is what the senior leadership of bbc said. Specifically saying this sort of combination (regardless of talent or chemistry) is not going to happen today. Sad, that is.

<comment><USER27> My takeaway from the Telegraph opinion piece is a bit different, and the opinion writer's conclusions don't follow from the premises, but if you'd like to believe it, feel free.

</comment></comment></comment></comment></comment></comment><comment><USER29> SPAM SPAM SPAM SPAM...

And hence we now call unwanted emails Spam. RIP Terry

</comment><comment><USER30> Turing Award winner Robert Floyd also died of a form of FTD, Pick's Disease. He was only 65.

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

</comment><comment><USER31> I was thinking that giant foot finally caught him.

</comment><comment><USER32> He's not the Messiah, he's...

<comment><USER33> ... the actor that played his mum.

<comment><USER34> I think the grandparent was just quoting what Jones (as the mum) said in the movie tho, not saying he played the Messiah: "He's not the Messiah, he's a very naughty boy".

<comment><USER35> cant tell if you dont get the joke, or if i dont get your joke

<comment><USER34> I don't think there's much of a joke to get.

My reading is:

1) Someone (person A) said "He's not the messiah, he's..."

2) Another (person B) thought A meant that Terry Jones played the messiah (Brian) and corrected them by writing "...he's the actor that played his mum".

3) I stepped in to say, I don't think A implied Terry did was the messiah in the movie, he just referenced one of Terry's lines from the movie.

Makes sense?

Was there some joke I've missed?

<comment><USER36> Yes. The joke was that Person A's comment, replying to an article about Jones, makes it seem as if the 'he' in the line is referring to Jones, not the baby Messiah from the movie. B then subverted the expected conclusion of Jones' line "...he's a very naughty boy" with a fact about Jones himself: "he's the actor that played his mum". Person B was aware of Jones' line and played off it.

<comment><USER33> This was indeed the joke I was aiming for - though in reality it was probably as funny as coldtea thought...

<comment><USER36> I dunno, I liked it. Every joke sounds bad when someone breaks it down like I did.

<comment><USER37> I liked it too.

 _"Analysing comedy is like dissecting a frog. Nobody laughs and the frog dies."_

\- Barry Cryer

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER38> The real question now is what will happen to his two sheds.

</comment><comment><USER39> He's on his way to deliver the Spanish Inquisition!

Thanks for the laughs, Terry!

<comment><USER40> The devil will never expect it and beg God to get rid of this ruffian, troublemaker layabout.

</comment></comment><comment><USER41> RIP

It's funny how Monty Python humor seemed to have struck a chord with a technical audience (of course, not only them).

I wonder what the former-BDFL of Python has to say about it.

</comment><comment><USER42> I'm sad to hear this, but also glad for him because he lead a very accomplished life.

For those of you who haven't seen Terry Jones' Medieval Lives, there are episodes on YouTube. Highly recommended.

</comment><comment><USER43> May Brian welcome him at the threshold of whatever comes after. He will not soon be forgotten here.

</comment><comment><USER44> Just guessing, but he probably made people laugh millions of times. I know I did my part.

What a great gift to humanity. I'll revisit his works for the rest of my life.

</comment><comment><USER45> :____(

</comment><comment><USER46> I hope they dressed him in a women's costume for his part in the hereafter.

</comment><comment><USER47> He is now an ex Terry Jones!

</comment><comment><USER48> Wow. Hope this gets a black bar.</comment>


Commenting Code Properly - <AUTHOR> https://github.com/sailfrog/hnreader/blob/master/hn.py

<comment><USER2> The comments are stupid, the headline is wrong, and you're parsing HTML with regular expressions.

It would be hard to craft a submission worse than this.

<comment><AUTHOR> The submission was meant to be humorous, sorry to disappoint. No matter how you slice it parsing HTML from a 3rd party site is a major hack, though this does however work nicely (itch scratched). Lastly I have some other ideas for submissions so don't judge this as the worst just yet.

<comment><USER2> > No matter how you slice it parsing HTML from a 3rd party site is a major > hack

WebKit seems to do just fine. I think you're making excuses.

<comment><AUTHOR> Until the source site changes the URL, or the URL arguments, or the page structure, or the doctype, or the CSS selectors, or the element ids, or whatever it is you key on to ferret out the content you care about. Scraping data embedded in markup not bound to an API spec is fragile regardless of how "properly" you parse it because there is no guarantee of structural consistency.

</comment></comment></comment></comment><comment><USER3> Don't use regexes to parse HTML, use BeautifulSoup instead. Also, don't use "brogrammer" style comments, they are not funny enough.

<comment><USER3> Something like: <https://gist.github.com/3850232>

</comment></comment><comment><USER4> I thought it was funny. I'd rather see funny comments, than no comments at all.

</comment><comment><USER5> Love it! Code comments need more adjectives and Culture Club lyrics.

</comment><comment><USER6> err, no.</comment>


The First-Time CEO's Recession Survival Guide  - <AUTHOR> http://www.techcrunch.com/2008/11/30/the-first-time-ceos-recession-survival-guide/ <comment><USER2> _Everyone struggles. Keep fighting_

 _"Give him one little stroke of luck, and he would think he had conquered the world. But, equally, the slightest setback would find him in deepest despair"_

 _If you're still playing, you can still win_

Nail on the head. Short and simple. This reminds me of the movie 300 in which King Leonidas fights till his end with just a small group of soldiers. I dug up a lot of articles about the war and read them after I watched the movie

<comment><USER3> You know all 300 men were killed right?

Just saying. :-)

<comment><USER4> Haha true but what a way to go down.

Death aside, what's the startup equivalent? There may not be one but I envision the cofounders getting ripped from their desks by the foreclosure people as they're trying to finish one last line of code...

<comment><USER5> I thought the startup equivalent was to kick your creditors down a bottomless pit...

</comment></comment></comment></comment><comment><USER4> > _His industry went into recession a year ago, so he's had a little more time > than most startup CEOs to think about how to deal with the current > downturn._

Things are a lot worse now than they were a year ago, especially for housing related markets.

</comment><comment><USER6> Pretty empty article... all this stuff has been hashed and rehashed a hundred times... all this advice is good advice whether or not you're in a recession. The only addition is a seasoning of dubious images like the predator and roman stuff.</comment>


Set a direction for your startup by applying to tech incubators. - <AUTHOR> http://blog.kickofflabs.com/set-a-direction-for-your-startup-by-applying-to-tech-incubators

<comment><USER2> The author's advice about filling out incubator forms is spot-on. I've found that completing a mock-application is extremely useful in organizing my thoughts and identifying the strengths and weaknesses of my ideas. That point also feeds into the last point - there are no bad ideas, just ideas that haven't been thought-through enough - filling out applications while declining to submit will help prepare you for when you actually decide to take the plunge.</comment>


Google changed reputation and privacy forever - <AUTHOR> http://volokh.com/2010/06/10/google-changed-reputation-and-privacy-forever/

<comment><USER2> Recommended only if you also read/skim the comments.</comment>