Imba – A new programming language for the web - <AUTHOR> http://imba.io/ <comment><USER2> This isn't a competitor to react; its a competitor to ES6/typescript/coffeescript.

React is a template library, not a language.

JSX is a way to write templates, but that's not react, and its not what react does. It's just a shortcut to writing XML.

You could say this is a competitor to JSX, perhaps; but anything more is hyperbole.

People aren't using react and angular because they have a _nice syntax_ , that's just nice, they use them because you can _build applications_ with them.

How do you build ui components using imba? Use react? :P

<comment><AUTHOR> Imba includes syntax for tags (scroll down to "Tags"), virtual DOM diffing, event handling (with touch support). Yes, React is not a language in itself, but there's quite big overlap in what Imba does and what React+JSX does.

You build UI components like this:

        tag event < div
          def render
            <self>

 event.title

 "Happening on {event.dateString}"

<comment><USER2> No.

Read what I wrote again.

You just wrote a template. That's like JSX.

You _ALSO_ need a library to do the virtaul dom stuff and/or data binding to write an application.

React. !=. JSX.

What you have here is a programming language that compiles to javascript and has an inbuilt templating language. So does ES6; `${hi}`.

That's a fundamental building block, not a replacement for a _high level framework_ , like react.

<comment><USER3> I can only conclude that you're so focused on aggressively dismissing this person's work, in the typical HN fashion, that you didn't actually read the comment you responded to, or any of their other responses throughout this thread.

You say:

>You ALSO need a library to do the virtaul dom stuff and/or data binding to write an application.

OP says:

>Imba includes syntax for tags (scroll down to "Tags"), _virtual DOM diffing_ , event handling (with touch support).

>Although Imba was started before React it should be noted that it didn't include _virtual diffing_ until React showed that it worked.

<comment><USER4> judofyr's comment that you're quoting was posted after shadowmint's.

<comment><USER3> The second quote, maybe, but the first comes directly from the comment shadowmint is responding to here.

<comment><USER2> Its great how you can edit comments isn't it? Both quotes were edited.

Still... I suppose that my original post remains the top here says something. Cant reedit something with no parent. too bad. ;)

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> I just spent an hour looking at the Imba benchmark. Yep, it's cheating. Which is a shame, because I really like the framework as a whole.

The vast majority of the speedup comes from a single sneaky line of code. The majority of their "Everything" benchmark's time is spent in the reorder step. They've implemented this as "remove a random todo, render, push the removed todo back onto the end, render." The Imba implementation, and it alone, caches the rendered todo view, so that they can re-use it once the todo is reinserted.

This single optimization is responsible for the vast bulk of their claimed speed. Removing it puts Imba only 2x faster than React, not 60x.

If you want to try it yourself, look at line 55 of app.js. Change:

        res.push((this['_' + todo.id] = this['_' + todo.id] || t$('todo')).setObject(todo).end());

... to:

        res.push(t$('todo').setObject(todo).end());

Furthermore, this isn't a caching strategy you'd want to use in a real app. It holds onto all DOM nodes ever created, thereby leaking quite a lot of memory.

Again, I think Imba is cool, and fast, just not otherworldly fast. I hope this was just an "oops!" and not an intentional misrepresentation.

<comment><USER6> Hi there.

This is utterly wrong, and if you had cared to read about what the benchmark is trying to achieve, you would understand ([https://github.com/somebee/todomvc-render- benchmark](https://github.com/somebee/todomvc-render-benchmark)).

You cannot simply remove caching and reusing nodes from the benchmark (which you do with that change). This is the way Imba does diffing, and it would be akin to removing the React virtual dom!

As we mention in the readme: "Even though it looks incredibly boring, the "Unchanged Render" is possibly the most interesting benchmark. All of these frameworks are plenty fast if they only render whenever something has changed. But if the frameworks are fast enough to render the whole app in 0.01ms, you could skip thinking about all sorts of tracking to keep the view in sync."

In a real world app you do not create 1000000 todos. The actual data rarely change that much. As for purging the cache, see comment: [https://news.ycombinator.com/item?id=10092454](https://news.ycombinator.com/item?id=10092454). Quote:

One thing to be aware of is that Imba doesn't automatically remove the cache for you, because we've found that it's tricky to determine when you actually want to purge it. For instance: if mouseOver <something> else <something-else> Just because `mouseOver` becomes true for one frame doesn't mean you want the `<something-else>`-tag to be purged from the cached and removed. Keeping it around is nice for performance and convenience (e.g. state, jQuery plugins). In practice it turns out you want to purge whole pages/sections at the same time, which is way friendlier for the garbage collector as well.

If you _really_ want to not cache things this way, you can change the line to:

        res.push((this['_' + i] = this['_' + i] || t$('todo')).se ...

Which would only ever cache as many dom nodes as there are tasks, but change which nodes are used for which tasks.

<comment><USER7> I wonder how React with Immutable.js would fare in "Unchanged Render" benchmark.

</comment></comment></comment><comment><AUTHOR> Disclaimer: I've been following the development of Imba while it's been a private project (for six years now). Lately I've been helping out fixing bugs and improving smaller parts of the language.

Having tags as a proper part of the language is _very_ nice. This just works in Imba:

          for event in @events

              if event:type == "like"
                <like event=event>
              elif event:type == "comment"
                <comment event=event>

In React I'd have to use `map` and refactor parts into variables. I've been struggling to use React on teams with designers because small design changes can cause rather huge changes in how the code is structured.

Other than that you can think about it as indentation based JavaScript with implicit method calling (`foo.bar = 123` calls the setter `setBar`) and saner handling of `this`.

<comment><USER8> You can do that right now with CoffeeScript+React and it looks almost identical:

        {ul, li} = React.DOM
        # require in like and comment components here...

        ul {},
          for event in @events
            li {},
              if event.type is "like"
                like {event: event}
              else if event.type is "comment"
                comment {event: event}

<comment><AUTHOR> Yup, that looks pretty good.

Imba was started before React was available so it wasn't an option back then. As for today, the language integrates tags in a much nicer way than what's possible with CoffeeScript + React. This especially pays off performance-wise.

Although Imba was started before React it should be noted that it didn't include virtual diffing until React showed that it worked.

</comment></comment></comment><comment><USER9> The author of imba has some problems understanding languages vs frameworks/libraries.

I quote:

      "Imba is a new programming language for the web that compiles to performant and readable JavaScript."

Ok, so i understand Imba is a language spec with an implementation that compiles to javascript.

      "It has language level support for defining, extending, subclassing, instantiating and rendering dom nodes."

Ok so there is special syntax to create DOM elements. Nothing new here. Its just syntax over javascript. What can be done with imba, can be done with vanilla javascript.

      "it is more than 20 times faster than React"

Wait, what? React is a javascript library, not a programming language. Written in javascript.... How can Imba be faster? Does Imba also include a dom-diffing algorithm.. If so, why would you built that into the language... Woudnt it be better to write a library in imba-lang that can do dom diffing? I'm lost here.

<comment><USER10> There's no rule that says the language/library/framework divide has to lie where contemporary scripting languages put it. In PHP and ColdFusion, HTML is part of the language; in Ruby or Python it's usually relegated to a templating library; in Javascript the _DOM_ is usually a library and it's bad practice to build up HTML strings (in 2015, at least; in 2008 it was _good_ practice to build up HTML strings, because it was orders of magnitude faster than using the DOM). In Matlab or R, statistical and linear-algebra functions are part of the language, while in Python they're a library. In C++, strings, hashtables, and arrays are part of the standard library (or not even that, in early versions), while in Python & Ruby, they're part of the language. In Lisp the language parser is part of the language; in Rust, C++ (under Clang), Python, and Go it's part of the standard library; in many other languages it's not available at all.

There are certain best practices that have emerged for general purpose languages. Imba is not a general purpose language; it's explicitly meant for web programming, and makes sense that it would build common web programming functionality into the language itself.

</comment></comment><comment><USER11> "if Ruby and React had an indentation based lovechild, what would it look like?"

Let me guess!... CoffeeScript?

<comment><AUTHOR> Imba was actually forked from CoffeeScript three years ago. After the fork there's been a bunch changes, both in terms of adding tags, but also when it comes to the object model and variable scope.

\- Implicit calling: `foo.bar` calls `foo.bar()` and `foo.bar = 123` calls `foo.setBar(123)`

\- Objects have instance variables that's separate from the methods. Well, technically the instance variable `@bar` is just stored as a property with name `_bar` on the object.

\- Variables must be declared with `var` and they correctly shadow previously defined variables.

\- `do` provides a syntax sugar for the pattern "function as the last argument"

\- Optional arguments work together with block parameters

        def timeout(amount = 0, &cb)
          cb(amount)

Compiles to:

        function timeout(amount,cb)
          if(cb==undefined && typeof amount == 'function') cb = amount,amount = 0;
          return cb(amount);
        };

\- `self` is a keyword which is a saner `this`, and instance variables are automatically looked up using `self`:

        def end
          @client.on("end") do
             @server.end

Compiles to:

        function end(){
          var self=this;
          return this._client.on("end",function() {
            return self._server.end();
          });
        };

<comment><USER12> Re implicit calling: what would you write if you wanted to access `foo.bar` as a function instead of calling it?

<comment><USER13> I'm also wondering this. It looks like a huge design error.

<comment><USER14> foo:bar is property access.

</comment></comment></comment></comment></comment><comment><USER15> I actually think this looks really good, but 3 things:

1\. Why differentiate it from CoffeeScript so much? Why not call it DOMCoffeeScript or something? Are there any core language changes from CoffeeScript other than the tag features?

2\. I'm not sure how I feel about the mixture of XML tag characters with HAML/Jade-like indentation. My gut instinct is to always look for a closing tag with XML/HTML. Why not use some kind of sigil like % or @ or ! to represent a tag, since clearly the requirement for both a left and right caret is now obviated?

3\. Why require the `var` keyword instead of making it the default? That's one of my biggest pet peeves with languages like Javascript and Lua. Local-by- default always makes the most sense.

<comment><AUTHOR> 1\. Because the semantics are quite different. See my other post.

2\. It's still nice to separate the attributes from the content:

 "Foo"

Why use a new syntax when everyone knows HTML/XML?

3\. The lack of `var` in CoffeeScript is its worst feature ever IMO! Every time I write `someVariable = …` I'm terrified that I will accidentally overwrite a previous variable. Imba improves on JavaScript here and will correctly shadow multiple `var` in the same function.

<comment><USER16> People also know CSS query selectors...

          <input:checkbox:checked#myCheckbox>
           Some Text

Might be nicer than actually spelling out the attributes and properties, if you're taking an already wrist friendly language and bolting on tags, then taking that a step farther would probably be a nice idea as well.

<comment><AUTHOR> Imba supports the syntax for IDs and classes:

         "Label"

compiles to:

        ti$('label','foo').flag('bar').flag('baz',this.isBaz()).setText("Label").end()

where `flag` is a method which adds to the class list (unless the second argument is falsey).

<comment><USER17> Ok that is awesome.

</comment></comment></comment></comment></comment><comment><USER18> I have to admit I was really not excited to see this:

        var answer = if number == 42

The language looks shockingly pleasant in a number of ways, but _everything_ being an expression seems odd. Would somebody mind helping me understand the value (semantic, performance, etc.) of such a choice?

<comment><USER19> CoffeeScript (which this is forked from) has some parts like this that I strongly dislike, such as using the unless keyword after an action. For example:

        doSomeThing() unless person.present

For me that utterly destroys readability - in my mind, when I see a (), that function is being called there and then. The fact that you can invalidate that later in the line confuses me deeply - and it doesn't really provide any benefits above an if statement anyway.

The rest of CoffeeScript is great though, don't get me wrong. (though ES6 JavaScript has taken the best features anyway)

<comment><USER20> That's not specific to 'unless' – it's the general postcondition style that's is derived from Ruby. Indeed, for single-line if statement bodies in Ruby, it's the recommended style.

It fits the style of Ruby to try and cut down on syntax noise where it's not needed. Contrast:

      save! if !record.persisted? && !record.invalid?
      save! unless record.persisted? || record.invalid?

Though I do appreciate it's a bit unusual compared with most other languages – CoffeeScript does owe a lot to Ruby's syntax.

<comment><USER19> That's not really the part of unless that bothers me - it's the order. Why not do:

        if !record.persisted? && !record.invalid?
            save!

or:

        unless record.persisted? || record.invalid?
            save!

<comment><USER21> The behavior here, if it comes from Ruby, almost definitely has it's legacy in Perl, so you can look to Perl for justifications. The main justification is likely to be that's a natural construct of how we think and communicate, so why not allow us to express ourselves that way?

Another way to look at it is why do you think the conditional should come before like you've shown? Because C or even older languages started with that? If you didn't have prior experience with that form, would you still think it's inherently better, or would the trade-offs between the two forms seem slightly more balanced?

</comment></comment></comment></comment></comment><comment><USER22> I don't think of react as a language, but rather a virtual DOM + JSX.

This looks like a nice modern syntax which is both an ES6 focused minimal JS (removing unnecessary tokens) with HTML building included.

<comment><USER23> It's confusing they made a whole nice language that doesn't speak about react VDOM diffing which .. was the whole point right ?

<comment><USER6> Hi. We actually do a different kind of diffing - which turns out to be substantially faster than React: [http://somebee.github.io/todomvc-render- benchmark/index.html](http://somebee.github.io/todomvc-render- benchmark/index.html). The language has just been released, it is still very lacking when it comes to documentation. Working on it :)

<comment><USER24> Can you give some details about Imba's diffing?

<comment><AUTHOR> What part of the diffing?

Imba only uses `===` for diffing. If you want Imba to re-use a DOM node, you must use the same tag object. Imba provides syntax for caching nodes as properties on the current object.

For instance, in order to re-use DOM nodes in a for loop you do this:

        for event in @events
          <event@{event.id} name=event.name>

The loop body compiles down to:

        (this['_' + event.id()] = this['_' + event.id()] || t$('event')).setName(event.name()).end()

The next time you render the view, Imba will find the tag objects that have been reordered (using `===`) and move them to the right place.

One thing to be aware of is that Imba doesn't automatically remove the cache for you, because we've found that it's tricky to determine when you actually want to purge it. For instance:

        if mouseOver
          <something>
        else
          <something-else>

Just because `mouseOver` becomes true for one frame doesn't mean you want the `<something-else>`-tag to be purged from the cached and removed. Keeping it around is nice for performance and convenience (e.g. state, jQuery plugins).

In practice it turns out you want to purge whole pages/sections at the same time, which is way friendlier for the garbage collector as well.

</comment></comment></comment></comment></comment><comment><USER25> So this is basically coffeescript. Where's the react part?

<comment><USER22> Scroll down to 'Tags'.

</comment></comment><comment><USER26> Okay, so I just took Imba for a little spin. Some thoughts:

I like the way it looks. A lot. Love, love the tags. Really like the simplified object literals. The use of global variables for class state is deeply troubling - they are not scoped at all. The parser is far too forgiving. if you change do |x| x _x into something like do x x_ x it will compile fine, but be wrong. The tooling is quite nice, and I like the defaults - although it's still a little bit of a mystery where the imba.js file comes from in the Hello World browser example (I ended up just copying it from Github). I'd like to see argument comprehensions, and the option to generate code outside of an immediately excuting function (so I can play with instances at the dev console)

I would like to see a "strict" mode for imba that chokes on a do block without pipes, for example. I think that if JavaScript has taught us anything it's that anal compilers might frustrate us at build time, but that frustration is _nothing_ compared to the frustration down the line when things break at runtime.

<comment><USER6> Thanks for the feedback. What do you mean with global variables for class state? We do consider moving class-bodies inside an actual function (again) - but there is a virtual scope there in the compiler. So

        class A
    	var i = 10
        var i = 20

Compiles to

        function A(){ };
        var i1 = 10;
        var i = 20;

So they are actually scoped even though it does not look like it in the compiled js. I'm looking really forward to improving the sublime plugin to show much more stuff from the compiler and warn about calls to undefined methods etc. There is a lot of analysis from the compiler that can be used to improve the ide-like experience.

<comment><USER26> Ah, okay, well that example makes it clearer. It wasn't clear from your example (or from my local test) where you just show this:

       class Todo
    	# variable defined in class scope
    	var count = 0

Which compiles into this:

       var count = 0;

And also your example page elides the IIFE that your compiler surrounds all output with, implying (falsely) that it's global.

As for ST, I think that for me based on my brief experience, you might want to add more compiler warnings to the watcher. (Basically I messed with Imba locally with two ST windows side-by-side, looking at Imba on the left and js on the right, treating the watcher output as compiler output.) Don't get me wrong, ST feedback is great, but the watcher feels more canonical. Besides, not everyone has ST!

</comment></comment></comment><comment><USER27> Very similar in concept to what I have done with CokeScript. [https://github.com/batiste/CokeScript](https://github.com/batiste/CokeScript)

</comment><comment><USER28> As someone who has been developing using Javascript for 10 years and has seen many frameworks comes and go (including authoring one), this looks refreshingly good on first impressions. Far better than coffeescript or React. Congrats!

Plus, I love the fact that the syntax looks Pythonic :)

</comment><comment><USER29> Is there more information about how the 'very efficient rendering' part works?

<comment><AUTHOR> There's two parts of the "very efficient rendering":

1\. It store the previous rendered tag and does a diff. (Just like React).

2\. Every tag is compiled to JavaScript that's easy for the optimiser.

        tag event < div
          def render
            <self>

 "Hello world!"

Compiles to:

        // Setting up the tag-object. Then:
         tag.prototype.render = function() {
           return this
             .setChildren(Imba.static([
               (this.$a = this.$a || t$('h1').setBar("123")).setBaz(bar)
             ], 1))
             .setText("Hello world!")
             .synced()
        }

While React passes an object of props around, Imba will instead call setters. These setters are very easily inlined by modern browsers. Also note that it caches directly on the tag object itself which gives another additional boost. Since it caches the objects themselves it can also compare everything with `===` and/or `indexOf`.

The `Imba.static`-call marks an array as static which is a guarantee that the structure of the array won't change. In this case Imba will not do the full diff-algorithm, but instead compare each item element-by-element.

And yes, once you've achieved the minimal amount of DOM changes needed (like React), the next step for performance is all of these little tweaks. Does it matter? It all depends. Imba is capable of rendering bigger applications than React when you use the "render everything over again in the animation loop".

TLDR: The tags are more integrated into the language. The language is also designed around features that's easy for the optimiser.

</comment></comment><comment><USER30> We've been using this coffeescript/jsx project throughout our codebase: [https://github.com/jsdf/coffee-react](https://github.com/jsdf/coffee-react)

Similar idea but just ads JSX tags to Coffeescript (cjsx).

Only ergonomics problem is that the syntax highlighting sometimes breaks on single quotes used within the XML tags so you end up having to do something like `<p>{"you're fired"}</p>` so that it doesn't mess up the highlighting in your whole file.

</comment><comment><USER17> So... I don't understand if you're supposed to use this _with_ react, or _instead of_ react?

If the answer is "instead," is it a language _and_ a view framework?

</comment><comment><USER31> Interesting, great work. As someone who's never been able to get on board with JavaScripts syntax, this looks like a viable alternative to CoffeeScript.

Also, for React applications I've found that LiveScript (a functional compile to JS language) makes for a great JSX alternative as shown here: [https://arch-js.github.io/docs/02-basic-tutorial.html](https://arch- js.github.io/docs/02-basic-tutorial.html)

</comment><comment><USER32> I usually don't like the javascript transpiler languages, but this one seems really decent. The classes are even more powerful than those in ES6

</comment><comment><USER33> Personally, I am really over the white-space as a delimiter in my programming languages. I used to love python but that is a long lost love.

<comment><USER34> "You're gonna indent it anyway!"

<comment><USER35> "But you will have to read it later."

"If you mess up your indentation, you're in hell."

"Tabs or spaces? If the latter, how many of them?"

"On what particular character will I be able to hit % to find where the related block is started?"

...

</comment></comment></comment><comment><USER36> I don't see the point.

</comment><comment><USER37> The tag syntax looks like the biggest advantage over ES6. Couldn't ES6 do that though as a template string type? -- like

        dom`<div> ${contents} </div>`

As far as I can tell on a quick google, this remains to be done. (I saw some hits for HTML string templates as opposed to direct DOM construction.)

</comment><comment><USER38> Hmm might have to try this out. The TODOMVC test [http://somebee.github.io/todomvc-render- benchmark/index.html](http://somebee.github.io/todomvc-render- benchmark/index.html) looks promising .

</comment><comment><USER37> Loops as expressions return an array as the value, the page says, but the JS code on the right doesn't seem to show this happening. Which is right? Or does the compiler notice in these cases that the value is not used, and not produce it?

</comment><comment><USER39> Again that mistake with ASI - I wonder how much people like stepping on the same rake.

</comment><comment><USER40> Reminds me a little bit of the Python -> Javascript two way compiler I wrote: [https://github.com/timothycrosley/jiphy](https://github.com/timothycrosley/jiphy)

</comment><comment><USER41> It's quite beautiful looking.

Unsure of what use it would be, but nice for a change.

</comment><comment><USER42> The overview didn't answer my biggest question: what kind of (compile time) type system does it have? Can I use it to get proper type checking, inference and primitive types?

</comment><comment><USER43> Fun fact: "imba" means "sing" in Swahili, a language spoken in East Africa (Tanzania, Kenya, and to some extent Uganda, Rwanda, Burundi, Malawi, and DR Congo).

</comment><comment><USER44> Anybody know the color scheme for the code on this page?

<comment><USER45> Looks like Twilight (which started life with Textmate, but has taken off all over since), or a variation thereupon.

</comment></comment><comment><USER46> Interesting. Have you built real apps with this?

</comment><comment><USER47> I think there would be value in publishing what ever you call your react lib (all the t*$ stuff) as a distinct js library.

</comment><comment><USER48> Ugh. I want to use this but I want docs and how bootstrap this into my build process.

</comment><comment><USER49> really love the design, and how it shows the whole language on the frontpage.

</comment><comment><USER50> I lot of these things are basically irrelevant if you use ES6/7.

<comment><USER31> Are brackets and semicolons now optional in ES6/7?

<comment><USER51> Semicolons have always been optional. Brackets are only used for array literals (oh and destructuring assignment) as far as I know (and are required).

</comment></comment></comment><comment><USER52> Can it render on the server-side (Node.js) without JSDOM?

<comment><USER6> Yes, it can. Serverside rendering is still not very well tested, but it does work. I will create a simple example soon.

</comment></comment><comment><USER53> > _Imba is a new programming language for the web that compiles to performant > and readable JavaScript._

More like, "Imba is a new syntactic 'skin', which transliterates to JavasScript."

</comment><comment><USER54> Comparison against Elm and Purescript?

</comment><comment><USER55> Fantastic work! Thanks for sharing it with the community. I'm excited to check this out further.

</comment><comment><USER56> Thank you for not saying "transpile".

<comment><USER57> Yup. "Transpile" is "compile" for those who're too young to ever have worked with a compiled language.

<comment><USER58> I suppose the idea is that 'compile' implies a low-level target whereas 'transpile' suggests translating to another high-level language. I can see some sense in making this distinction.

<comment><USER59> In the larger linguistics world you have a distinction between "translation" (conversion between languages) and "transliteration" (conversion between forms of a language; cursive writing versus typing versus speech, for instance). I remember this being a particularly important distinction in learning American Sign Language (ASL) because the vocabulary is roughly English-ish it is very easy to transliterate and try to say in ASL an English sentence "as is" without meaningful changes, but just with dealing with the differences between, say, English and Spanish, to speak ASL properly you need to actually translate to more idiomatic forms and abstractions. This is extremely important to ASL not just from a "speak better ASL" standpoint but also because it comes out of a foundational, cultural imperative: ASL was not seen as "a real language" until it proven to some linguists that it validly needed translation, was not just a transliteration of English but in fact a language with its own idioms and grammar requiring translation. This disagreement is so fundamental to ASL also because there was so much pressure from people to "speak real English" rather than develop their own language. There is a transliteration-focused "alternative" to ASL that includes all of the useless English grammar and stutter words like "the" that ASL handles grammatically different, and ASL had to prove its existence against it and also to prove that it was better and also to prove that ASL speakers could still read/write English to work with the rest of the English-speaking country when their native language was grammatically different enough to require translation... It's an interesting cultural battle to read about.

All of which is a long winded example to get back to the idea that the translation/transliteration difference is very similar to the compilation/transpilation difference and while I don't think we've yet seen a cultural battle for supremacy between the terms, I do think there is a usefulness in keeping the distinction. I also see the conversion between idioms/abstractions as being the key difference between compilation and transpilation. Machine language has much different idioms/abstractions from a high-level language; CoffeeScript and TypeScript try to stay very similar in idiom/abstraction to EcmaScript.

</comment></comment></comment></comment><comment><USER60> Awesome!!

</comment><comment><USER61> oh great, another shitty javascript fraemwork

</comment><comment><USER62> awesome

</comment><comment><USER63> Why do people keep throwing around the idea that "X tool is Y times faster than React?" Last I checked no one was claiming React is super fast and I don't know anyone who uses it for its speed. It just seems like such a strange thing. It's like building a new car and claiming it's 100 times faster than riding a horse.

<comment><USER64> Virtual DOMs were pretty much invented while searching for a way to get higher rendering speeds. Just google "virtual dom speed".

</comment></comment><comment><USER65> This is good! Now take away all the unnecessary references to that pile of junk that is ruby and it'll be great.

<comment><USER20> This tool is forked from Coffeescript, which is deliberately designed to resemble Ruby. There's a good reason for that – some aspects of Ruby's syntax are well-loved.

It might be more effective for you to use your time understanding why these aspects are important, since you apparently feel this project is good, and less time being a bit of a dick about it.

<comment><USER66> > some aspects of Ruby's syntax are well-loved.

By Ruby programmers. Why is it that Ruby programmers are incapable of imagining anyone _doesn 't_ love Ruby?

This isn't a universal truth for all programmers either. I've met plenty Java programmers willing to admit the shortcomings of Java, I've met PHP programmers painfully aware of the language's warts, I've even met Python programmers willing to admit Python's limitations. I've yet to meet a Ruby programmer who doesn't believe that Ruby is the best thing since sliced Jesus.

<comment><USER20> _By Ruby programmers._

And clearly other people – or we wouldn't be seeing those syntax elements in other languages.

 _Why is it that Ruby programmers are incapable of imagining anyone doesn 't love Ruby?_

They're perfectly capable of that, and I think you've let your own prejudices cloud your judgement.

 _I 've yet to meet a Ruby programmer who doesn't believe that Ruby is the best thing since sliced Jesus._

Hello, pleased to meet you. I'm a mostly-Ruby programmer who is well aware that the language is not suited to every task. Need high performance? Look elsewhere. Need a highly reliable service? Something that would benefit from static typing? Systems-level tools? Same. Ruby is a pain to deploy and has lots of irritating legacy cruft.

What this doesn't mean is that the statement "that pile of junk that is ruby" is anything other than a fucking stupid thing to say.

<comment><USER65> yeah sure - I was a bit troll-ish in the language. Let me elaborate. Imba is a spin-off of javascript intended for front-end use whose syntax is a mix of coffeescript, jsx and python as well Ruby imho; that said, please name a single use case in which Ruby will be without a doubt the #1 language for performance, scalability and all the other aspects involved in maintaining a business (including availability of programmers). Ruby is only second to PHP, which is just unreedemable (I'm even certified on it... [http://www.zend.com/en/yellow- pages/ZEND005898](http://www.zend.com/en/yellow-pages/ZEND005898) so don't think I'd refrain from criticizing languages I know, even very well).

</comment></comment></comment></comment></comment><comment><USER66> I for once would appreciate it if Ruby programmers would stop trying to avoid writing JavaScript by writing their own JS-based implementation of Ruby.

With ES6 and Babel this "new programming language" provides nothing interesting other than making your code look more like Ruby.

<comment><USER55> Here's a quick (incomplete) list of web innovations you can thank the Ruby community for either popularizing or inventing outright:

* REST * Many parts of ES.next * Front-end build tools * CSS pre-compilation * JS transpilation

I spent years happily using multi-line template strings while JS developers informed me how idiotic I was for using a transpiler. Since Ruby's goal is to be a language that brings joy to the user, I see nothing wrong with bringing that ethos to other languages. You yourself acknowledge the impact it had on the development of JavaScript.

We in the Ruby community will keep innovating, and you keep hoping that we'll stop, and we'll see which happens.

<comment><USER66> > REST

No. Rails populated _a_ form of REST and everybody likes to pretend everything Rails is REST and there are a ton of frameworks trying to imitate Rails' approach to REST but Rails neither invented REST nor was it the one thing making REST popular. It was a major factor, yes, but claiming this purely as an accomplishment of Ruby is silly.

I would be willing to give Ruby the point for MVC because of ActiveRecord but MVC is not synonymous with REST.

> Many parts of ES.next

Again, no. ES.next is nothing like Ruby. Some of the syntax was influenced by CoffeeScript (nobody doubts that -- in fact, TC39 members have explicitly referenced it on more than one occasion) but the features are neither novel nor unique to Ruby:

* The class syntax is pretty much universal.

* The arrow functions are evidently influenced by CoffeeScript but look nothing like Ruby's lambda literals (which are the closest equivalent in Ruby). I think CoffeeScript's use of that syntax was actually pre-dated by C# but I may be mistaken.

* Template strings have no more in common with CoffeeScript's and Ruby's string interpolation than with the same feature in other languages. In fact, if anything, I'd say the interpolation syntax is borrowed from PHP -- but the backticks certainly aren't taken from any of them.

* Symbols are kinda like Ruby symbols if you tilt your head and squint really hard and then only focus on the name and not what they actually are. Again, the concept is neither novel nor unique to Ruby.

* Destructuring and rest/spread operators -- yeah, again, not unique or novel. Plus I think even Python preceded Ruby on that.

* iterators and generators -- again, closer to Python than to Ruby.

* import/export -- just an extension of the ideas of CommonJS which in turn aren't anything like what Ruby has.

* promises -- no, sorry, not Ruby.

* the object literal extensions -- again, not Ruby. Ruby doesn't even have object literals in the sense JS does (which is okay, it doesn't have prototypal inheritance either).

> Front-end build tools

No, seriously not. Yes, rake pre-dates grunt and gulp by a fair amount (as well as jake and other JS-based tools barely anyone seems to use anymore). But it certainly didn't invent them nor was the biggest factor in popularizing them. A lot of build tools before the Ruby (and now JS) toolchains came along were built in things like Java, in addition to the various less formalized build tools written in Python or simply bash.

> CSS pre-compilation

I may give you that. Less pre-dates Sass but started as a Ruby gem. Of course neither of them invented CSS minification and there were attempts at generating CSS before. Compass probably took the crown, though, even though front-end tools in generally have moved on to the Node ecosystem, which seems more appropriate for tools primarily concerned with JS (rather than Ruby, Java or bash).

> JS transpilation

Not _really_. Java-to-JS transpilation was the original hotness that opened up people to the idea. It was followed by various attempts to port other languages to JavaScript. I agree that CoffeeScript is the first one that gained major traction in the startup scene -- although most teams seem to have realised that the drawbacks aren't really worth it (not just the transpilation but the entire part where everyone has to learn a new language on top of a solid understanding of JS itself).

Yes, CoffeeScript was an important step in the evolution of JS but so were DHTML, pop-unders, JSS and animated mouse cursors and status bars -- and everyone agrees those were a bad idea.

The Ruby community is very vocal and self-important but it's neither as uniquely innovative nor as much of an influence as its members like to make it out to be. If PHP is the kindergarden of programming languages, Ruby is the angsty teenager complaining about how nobody understands them and writing blog posts about their deep insights gained from flipping through Atlas Shrugged.

<comment><USER55> > It was a major factor, yes, but claiming this purely as an accomplishment of > Ruby is silly.

A major factor in popularizing it, as I claimed. Personally, I had never heard of it before DHH's 2006 RailsConf keynote. Could you point me to another web framework that had implemented it before 2006?

> Some of the syntax was influenced by CoffeeScript (nobody doubts that -- in > fact, TC39 members have explicitly referenced it on more than one occasion) > but the features are neither novel nor unique to Ruby.

Again, CoffeeScript was popularized by the Ruby community, as uptake increased greatly when it became a default in Rails. The syntax was heavily influenced by Ruby, which then found its way into ES.next.

> Front-end build tools

The Rails asset pipeline was actually listed as the inspiration for Brunch, the closest you can get to replicating its functionality in JavaScript. This went a long way towards _popularizing_ the notion.

> I agree that CoffeeScript is the first one that gained major traction in the > startup scene > although most teams seem to have realised that the drawbacks > aren't really worth it (not just the transpilation...

Yes, and CoffeeScript first gained traction within Rails. You also seem to be discounting the obvious popularity of ES.next transpilers.

> The Ruby community is very vocal and self-important but it's neither as > uniquely innovative nor as much of an influence as its members like to make > it out to be. If PHP is the kindergarden of programming languages, Ruby is > the angsty teenager complaining about how nobody understands them and > writing blog posts about their deep insights gained from flipping through > Atlas Shrugged.

This is rude, untrue, and unhelpful. Be civil. [https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

<comment><USER66> > The syntax was heavily influenced by Ruby, which then found its way into > ES.next.

I pointed out the major syntax additions of ES6 and to what extent they are based on Ruby or not.

> You also seem to be discounting the obvious popularity of ES.next > transpilers.

I'm not. Babel and other "ES.next" transpilers are drastically different in spirit from CoffeeScript. With some exceptions (e.g. JSX and Flow type annotations) most of the syntax it adds to JS are either already part of the language and just not widely supported (i.e. ES2015) or experimental proposals for new language features intended to eventually land in a future JS spec.

CoffeeScript doesn't work because it requires you to learn a new language on top of JS. ES.next works because it's bleeding-edge JS (plus some speculative additions). The code you write for Babel today will likely run without transpilation in a JS environment a year or two from now.

This is a general trend in web technologies. CSS pre-compilers like Sass are being replaced or enriched by CSS "post-compilers" like postCSS (that consume vanilla bleeding edge CSS and spit out CSS that works today). JS transpiler languages like CoffeeScript are being replaced by ES2015 (and speculative ES.next) with compilers that translate the code to JS that works today (or yesterday, even -- Babel generally works fine with IE8/ES3 if you use the necessary shims and shams).

Your point is that Ruby's role to all of the developments you mention is essential and unique. I'm arguing it's not. By far.

The only remarkably unique thing about the Ruby community I keep noticing as an outside its rise and fall of the Brogrammer culture and the aftershock we're still experiencing to this day. But even that, I think, would have happened even if Ruby never existed.

<comment><USER55> > CoffeeScript doesn't work because it requires you to learn a new language on > top of JS.

The folks that have been quietly productive with CoffeeScript for years, and have and continue to make millions of dollars because of it, would likely disagree with you on that point.

> Your point is that Ruby's role to all of the developments you mention is > essential and unique. I'm arguing it's not. By far.

> The only remarkably unique thing about the Ruby community I keep noticing as > an outside its rise and fall of the Brogrammer culture and the aftershock > we're still experiencing to this day. But even that, I think, would have > happened even if Ruby never existed.

Well, you've failed to sway me on that (by far), and the clear chip on your shoulder you have regarding the Ruby community as a whole leads me to believe your vociferous arguments to the contrary might be motivated by something other than your desire to spread the truth.

<comment><USER66> > other than your desire to spread the truth

I'm ranting. What ever gave you the idea either of us is talking about objective truths?</comment></comment></comment></comment></comment></comment></comment>


UK CO₂ Emissions Are Lowest Since 1888 Due to Government Intervention - <AUTHOR> https://fortune.com/2019/06/06/uk-co2-emissions-reduction/ <comment><USER3> That is of course excellent news, but the UK still produces around five tons of CO2 per capita, about 20% more than France, and about three times as much as India. The effort mustn't stop now.

<comment><USER4> The atmosphere doesn't care about per capita. Absolute numbers are what counts and then India doesn't look so good.

<comment><USER5> The atmosphere doesn't care about political boundaries either, so there's not much utility in drawing a line around an arbitrarily large group of people and summing their emmissions. The only reason to look at country-level stats at all is to assess the effect of policy, and controlling for population size is the correct approach for that comparitive analysis.

</comment></comment></comment><comment><USER6> The Australian government is diametrically opposed to taking such action.

Australians, or just over 50% of them anyway, care most about their own pocket, making sure they get money, making sure their house price remains high.

I'm pretty sure a very large percentage of Australians care about the environment at some level, just not more than they care about money.

The Australian government is very much opposed to renewable energy and strongly supports the usage of more coal.

<comment><USER7> I'm Australian as well and I'm ashamed of how many of my fellow countryman prioritising their short term alcohol and other lifestyle "requirements" over worrying about the future of the planet.

Quite a number do care and I've met some of them, but there's a lot of opposition, especially in rural Queensland.

<comment><USER8> Maybe get a few copies of Greta Thunberg's book to give to your friends. Short and clear: [https://www.goodreads.com/book/show/45450258-no-one-is- too-s...](https://www.goodreads.com/book/show/45450258-no-one-is-too-small-to- make-a-difference)

<comment><USER7> Appreciate the reference, I'll read it as well.

</comment></comment></comment></comment><comment><USER9> The weird thing is that nobody is out there taking credit for this success. Probably because all politics is now Brexit.

It seems to have been partly the great expansion of wind power and partly the Large Combustion Plant Directive. Many coal power stations were uneconomic to modernize.

A nuclear plant was commissioned in 2012 but of course won't be ready until maybe 2025, assuming that the UK's exit from Euratom doesn't prevent it.

<comment><USER10> Yes - the main reason is that coal electricity generation is close to disappearing completely in the UK when it used to be baseload c.10 years ago. Change in the car fleet has also contributed a fair amount, mostly by replacing old less carbon-efficient petrol engines with newer diesel or smaller turbocharged petrol engines.

The move away from coal is much more driven by economics than the LCPD - <USER2> wind is built, it will always dispatch before coal, and the UK subsidised a lot of offshore wind build over the past 10-15 years through various mechanisms (ROCs, CfDs, some small tax incentives, historically also state investment through the Green Investment Bank, EIB and arguably corporate "greenwashing" spend).

On top of that, the UK also takes a large share of private investment in green power generation as a result of its reputation as a fair investment destination (predictable legal environment, creditor-friendly insolvency regime, etc) so it's been an obvious destination for private capital looking to invest in green power generation "somewhere" with low risk.

</comment></comment><comment><USER11> Progress, I just hope nobody here in the UK takes this as an excuse to get complacent.

</comment><comment><USER12> Good to see progress. A lot seems down to having some sort of carbon pricing. Currently a floor of £18 per ton of CO2 apparently.</comment>


Evidence of a nocebo response following a nationwide antidepressant drug switch - <AUTHOR> https://cpe.psychopen.eu/article/29642/ <comment><USER2> I think this should be investigated.The use of anti-depressants amount to performing medical experiments on people. E.g. Let's see this anti-depressant, then evaluate side-effects, if it doesn't work switch to different one or adjust the dosage. There is no scientific basis to do that. The supposed chemical inbalance is not being measured so the doctors really are giving people random drugs and those drugs are difficult to quit without medical supervision as well. When you quitting you feel so horrible you rather keep taking them. This is a huge money making racket for big pharma and make doctors look like charlatans at the same time casting doubts on medical profession. This only feeds to another camp like anti-vaxx.

<comment><USER3> Forgive me for being blunt, but that's just how modern medicine works. No one has the Star Trek tricorder that can scan your body, read your genome, and detect a quantum fluctuation in your synaptic waveform matriculation to calculate how many CCs to put in the hypospray.

We really only have one amazing piece of technology at our disposal: statistics. At the absolute best (and I'm not saying it's always the best...), what comes out of a pharmaceutical development pipeline is a drug that works for some people some of the time. Sure, sometimes you get broad categories to try to narrow down effectiveness, but at the individual level there is ultimately no choice but to try a drug and see if it works. And this is especially true in psych drugs, in no small part because there are so many unanswered questions about how our mind works.

And that sucks. I get it. It must be so frustrating to deal with a revolving door of new regimens and new side effects, all while yearning for relief from the underlying ailment. Not to mention navigating our nightmarish medical bureaucracy. But please understand that doctors, generally, are just doing their best to help given the tools they have. If you don't currently have that kind of trust and partnership with your doctor, I hope you are able to find one with which you can. I wish you the best, and hope that this perspective will make your frustrations somewhat easier to bear.

<comment><USER4> Oh all of a sudden we should just accept some pathetically weak argument of "we just don't know". Billions at stake here and yes we can and will severely penalize anyone on the side of nonscience and profiteering where humans are harmed. We can do better. Sorry if it means consequences for certain people.

<comment><USER5> > _Oh all of a sudden we should just accept some pathetically weak argument of > "we just don't know"._

But we _don 't_ know, despite enormous and ongoing effort. Hopefully we'll understand eventually, but right now we don't. I'm sorry if that fact is upsetting, but you can't will knowledge into existence.

</comment></comment></comment></comment><comment><USER6> On the other hand, sometimes there are significant differences between generic and brand name formulations. For example: [https://www.fda.gov/drugs/postmarket-drug-safety- information...](https://www.fda.gov/drugs/postmarket-drug-safety-information- patients-and-providers/update-bupropion-hydrochloride-extended-release-300-mg- bioequivalence-studies)

I wonder how many patients had their complaints written off for the six years the generic was on the market?

<comment><USER7> Absolutely, even when the active compounds are the same but there are changes in composition.

For instance, I'm an asthmatic and I need to use a spray inhaler. The no-brand equivalent is exactly the same, and does work the same in normal circumstances, except has roughly 1/2 of the propellant. But I can tell you that the missing propellant makes all the difference when you're having a stronger attack and cannot inhale.

</comment></comment><comment><USER8> I'm a bit sceptical here. As it happens, my partner was taking Effexor (a branded formulation of venlafaxine) and was switched to the generic Enlafax. She complained to me that she was feeling a little bit worse starting around this point, and when patient groups started sharing stories of many people who began feeling worse following the switch (which is what led, eventually, to the media coverage), she requested switching back to Effexor (which required paying out of pocket, as it's no longer covered), resumed taking it, and started feeling better.

She will no doubt be part of the statistics that paper is using to suggest a nocebo effect, as she only complained publicly after the media coverage started, but she has notes showing she had noticed the effect _prior_ to seeing anyone else complain about the generic formulation.

To be clear: her experience is absolutely not proof that Enlafax is in any way inferior or different than Effexor (for my partner specifically, or for people in general)! It's very possible her entire experience was a nocebo effect (triggered, perhaps, by the Enlafax packaging or something) followed by a placebo effect when she switched back to the branded drug. However, it _could_ equally have been caused by Enlafax being actively inferior for her.

What I think is fairly clear from my partners experience, however, is that the study is not correctly designed to reject the null hypothesis here. It's assuming that the people who publicly complained about Effexor after the media coverage were fine with it until the media coverage, whereas it's just as plausible that they simply didn't publicly complain until they realised other people were also having an issue.

Ultimately, any study here that's not a proper double blind test is going to struggle pretty hard here, and I think this is no exception.

</comment><comment><USER9> The inverse is also true:

[https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4172306/](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4172306/)

Just goes to show how powerful the media is at shaping/controlling the individuals reality.

</comment><comment><USER10> Where have I been that I'm apparently the only person in this thread who doesn't already know what "nocebo" means?

<comment><USER11> It's in the article:

"These switches to generic medical and psychotropic medications have from time to time caused an increase in reported adverse events, and this is likely to be due to negative attitudes towards generic medicines rather than pharmacological differences between the branded and generic versions of the medication.

This phenomenon is known as the nocebo effect"

<comment><USER10> I don't know if I'd call that "in" the article. I suppose it's an explanation of a sort, but really? It looks like it was spit out by a science-bullshit generator.

</comment></comment></comment><comment><USER8> A bit of backstory:

NZ has socialized medicine, with a central drug buying agency (Pharmac) who tries to save costs where it can. It also has a drug safety agency (Medsafe). Not uncommonly, Pharmac reckons they can save money by switching brands, and Medsafe may raise concerns.

In 2017, Pharmac moved from funding a branded formulation of venlafaxine (Effexor) to a generic formulation (Enlafax). A lot of patients reported issues (almost 2k, which is a fair number given the size of the country), and it was a bit of a black eye for Pharmac. So Pharmac went and paid a researcher at a local university to study brand switches in general and the 2017 venlafaxine switch in particular, and show (hopefully) that the issues weren't real, hadn't caused significant problems, and that it was totally fine to switch psychiatric meds. (Which is relevant _now_ , because Pharmac is looking at switching another medicine, Medsafe has raised strong concerns ("potential significant safety issues", "goes against international consensus", etc.), and Pharmac wants to find a way to move forward while covering their ass in case it turns out Medsafe is right.)

In any case, the result was this study. It could well be right, but uh, do keep in mind the context, which is that the researchers got paid hundreds of thousands of dollars to conduct it by an interested party hoping to save millions of dollars and fend off accusations that they had harmed people and risked lives.

Any study funded by people with such a strong interest in it having a specific outcome that then comes out with the exact outcome should be taken with a grain of salt. Doubly so when the study omits to disclose that funding!

Local NZ article with a good roundup of the current controversy, the 2017 issues, and the linked study: [https://www.rnz.co.nz/news/in- depth/390615/guyon-espiner-inv...](https://www.rnz.co.nz/news/in- depth/390615/guyon-espiner-investigates-pharmac-switches-epilepsy-drug- against-medsafe-advice)

Note: The article says that Petrie received NZ$400k from Pharmac for the study. For anyone wondering if that's right, the answer is: Yes! Although it took the NZ equivalent of a FoI request to find out. See [https://www.pharmac.govt.nz/news/oia- response-2018-12-12-res...](https://www.pharmac.govt.nz/news/oia- response-2018-12-12-research-projects/) And note that the study itself disclosed nothing about funding. Given that Pharmac has a _very_ strong and very obvious vested interest in this matter, I find this ethically troubling.

</comment><comment><USER12> Except they used suicidal thoughts as their key symptom -- which is something that is widely already known to increase in prevalence with media attention, see: "13 Reasons Why"...

</comment><comment><USER13> This article does not show any evidence of a nocebo effect. It shows increased reporting following publicity - without distinguishing whether the result was increased incidence of perceived harm, or just increased /reporting/ of perceived harm (for instance, if patients would not have previously attributed those somatic symptoms to their medication.)

Crap study, just an excuse for a publication.

<comment><USER14> agree that it's crap study, but even worse than that it's an attempt to discredit symptom reporting in general

while talking extensively about the nocebo effect, it ignores the fact that without media coverage a patient may experience side effects but not connect that effect with the switch from one drug to another, or may think they're imagining the effect, etc

<comment><USER8> Absolutely. My long-term partner was in this exact situation: She _did_ experience some fairly mild side-effects, complained about them to me, but didn't consider that the medication switch might be the cause until she saw others complaining, checked, and realised the symptoms had begun at the time she'd changed meds. She had simply assumed that she wouldn't have been switched to the generic if it wasn't identical, and thus initially assumed that any symptoms she was experiencing must be caused by something else; the exact _opposite_ of what the study claimed, despite the fact that she will have been counted in that study as evidence of a nocebo effect.

</comment></comment></comment><comment><USER15> > _...people report a reduced therapeutic effect and more side effects from a > generic-labelled placebo compared to a branded placebo_

wa? the power of branding -- advertising can be beneficial?

<comment><USER16> Lots of things can influence the placebo effect, branding is one of them:

> and we know that two placebo sugar pills have a bigger effect than one, and > that an intramuscular placebo injection is more effective than a placebo > sugar tablet[...]

> And a four-way comparison, with either sugar pills or aspirin, in either > unbranded aspirin boxes or mock-up packaging of the Dispirin brand, showed > that brand-name packaging, and the wealth of advertising and cultural > background material that packaging plays on, had almost as big an impact on > pain as whether the pills had any drug in them. So in some ways, it's not > irrational to believe that costly Nurofen is more effective than cheap > unbranded ibuprofen, even if they've both got the same active ingredient.

[https://www.theguardian.com/science/2004/apr/15/badscience.s...](https://www.theguardian.com/science/2004/apr/15/badscience.science)</comment></comment>


Simulating the emergent behavior of ant colonies - <AUTHOR> http://practicingruby.com/articles/ant-colony-simulation

<comment><USER2> The thing I'm most curious about is how to get this working within more "natural" constraints: i.e., ants in real life can't emit pheromones on their entire path history, only their current location. Is there a way to still successfully run this simulation taking that constraint into consideration?

<comment><USER3> It would definitely be interesting to do that! I had originally started out wanting to do something as natural as possible, but got myself into all sorts of frustrating trouble with ants getting turned around or wandering off forever. I'm fairly sure these were just failures in implementation, but they forced me towards looking at slightly more artificial designs.

The Ruby-based simulator discussed in this article used Rich Hickey's Clojure ant simulator as a starting point: [https://gist.github.com/spacemanaki/1093917](https://gist.github.com/spacemanaki/1093917)

Hickey's simulator was perhaps a bit closer to what you are looking for. It only emits one type of pheremone, which it releases on a continuous basis.

In my simulation, I introduced two types of pheremones: one emitted when food was found, and another emitted when the home was found. In retrospect, I possibly could have continuously emitted the "food" pheremone when traveling outbound, and the "home" pheremone when traveling inbound. I can't remember if I tried that and ran into trouble, or just didn't think of the idea at the time I was building this.

I vaguely remember choosing to implement things this way because it eliminated the noise generated by ants wandering in circles endlessly, but I honestly can't remember why I decided to "improve upon" Hickey's simulator.

It's worth pointing out that though the behavior of the world is very artificial (the whole trail gets marked at once after a complete path is run), the behavior of the ants themselves still only relies on their immediate location. And because these ants don't know where "home" is, they're even dumber than real ants that actually do have some sense of direction.

Anyway, refinements on this simulator or links to other simulations that illustrate these ideas are absolutely welcome! I'd definitely update the article if we found a way to improve upon what I've done.

<comment><USER4> I loved reading this because I made something exceedingly similar a few years ago, and I'm similarly fascinated with how complex behavior can emerge from such simple rules.

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

My ants also had no conception of where their home was located, their behavior is entirely pheromone driven. They can "read" pheromones from any adjacent cell.

They leave a pheromone every movement depending on which state they are in, either "find food" or "return food".

In my system, the pheromones have a strength. Whenever an ant touches the nest, his "nest pheromone" is at full strength (255). Each movement decreases the strength by 1. This sets up a natural gradient of nest strength for ants to follow. They also "deteriorate" each round as yours do.

A similar setup is used with food, such that a high food scent is created when they pick up food, and decreases in strength as they return to the nest.

So to find food, they try to move up a food gradient or down the nest gradient (away from the nest), while to return food they move up the nest gradient (towards the nest).

Their searching consists of a random walking into cells that have no nest scent, or following a food trail.

They have an energy cost for moving, and if it's too low they have to eat a piece of food. Returning a piece of food to the hill spawns a new ant. The lines on the right side show the population of each colony and the total food on the board.

From these extremely basic rules, they are very efficient at clearing the "world" of food.

<comment><USER3> This sounds very cool! The video you linked appears to be marked private, though, so I wasn't able to watch it.

<comment><USER4> Ah, my apologies, that was my first time uploading to youtube, haha. It is public now I believe.

</comment></comment></comment></comment></comment><comment><USER5> This is pretty cool, it's one of those "classic" problems in AI/Machine intelligence. I remember working on a slightly less interesting version of this a few (many) years back when I was trying to model a swarm. That was a hardware project, but the basic structure is near identical.

</comment><comment><USER3> I run practicingruby.com and wrote this article, happy to answer any questions!

</comment><comment><USER6> SimAnt (Maxis, 1991) follows this strategy extensively. Ants wander around, dropping different pheromones (food, alarm, ...) and exhibiting surprisingly complex behavior for an RTS of the time.</comment>


Digital Ocean giving $50 credits on Black Friday to new customers - <AUTHOR>

Just found that Digital Ocean is offering $50 credits on black friday. That literally means 10 months of free VPS. Use the code: BLACK50. Use my affiliate link if you want. http://bit.ly/IkEFN6 <comment><USER2> EDIT: I did not scroll all the way down. The promo code input field is at the very bottom of the billing page. So disregard this post of mine please. To confirm, I got the $50 credit successfully.

The bit.ly link resolves to this

[https://www.digitalocean.com/?refcode=4d7fb2079a96](https://www.digitalocean.com/?refcode=4d7fb2079a96)

There is no way to apply a discount code while creating a new account. Looks like you need to open a support ticket to apply discount codes ?

[https://www.digitalocean.com/community/questions/any- active-...](https://www.digitalocean.com/community/questions/any-active-promo- codes-for-septermber-2013)

<comment><USER3> Worked for me as a new customer.

1\. Create Account

2\. Click Billing

3\. Bottom of the page Code : BLACK50

4\. Paypal 5$ ( [http://i.imgur.com/gHAaEZW.png](http://i.imgur.com/gHAaEZW.png) )

5\. Create Droplet - 5$/month

6\. 11 months of VPS for 5$

[http://i.imgur.com/0Zbad7u.png](http://i.imgur.com/0Zbad7u.png)

<comment><USER4> Did not work for me. My Billing history only has PayPal in it. I created a support ticket.

I'm sure they're busy today with all the new sign-ups, I'm curious how long it will take.

<comment><USER4> ^ Resolved. Credit was manually added by support staff.

I look forward to trying out Digital Ocean.

</comment></comment></comment></comment><comment><USER5> I like DO for hosting small, non-critical stuff. However, i can't help but notice how they're giving away too much free service. How are they (planning on) making money?

</comment><comment><USER6> I've been on DO for a few weeks. It was a bit like a learning curve at first, but I really like the service. However, I passed on the promo because there has to be a day where I actually pay for their service.

</comment><comment><USER7> I like what I see in Digital Ocean's offers and will be most likely choosing them the next time I need a host. Are there any catches to look out for?

</comment><comment><USER8> [https://www.digitalocean.com/?refcode=4d7fb2079a96](https://www.digitalocean.com/?refcode=4d7fb2079a96)

</comment><comment><USER9> That was all the motivation I needed to finally kick start my side project. Redeemed the offer. Thanks!

</comment><comment><USER10> I'm getting "that promo code has expired" :(

<comment><USER11> Its working for me. Got the 50$ credit \m/

</comment></comment><comment><USER8> [https://www.digitalocean.com/?refcode=4d7fb2079a96](https://www.digitalocean.com/?refcode=4d7fb2079a96) This is the best deal I could have ever got. Thanks.

</comment><comment><USER12> What about who is already a customer?

<comment><USER13> I got this from support

 _Hello

Thanks for writing in to claim this promo code!

For existing users we've decided to extend the offer in such a way;

a) we charge your credit card $25, if the charge is successful, we match that with a $25 credit, for a total of $50.

b) you make a deposit of $25 on your PayPal payments page

If you chose option (a) please respond to this ticket with: "I authorize you to charge my card on file $25 for the black friday promo!" If the charge is successful we will credit you the additional $25 and respond to you to confirm.

If you chose option (b) simply make your PayPal deposit and then let us know in this ticket, we will review and credit you the $25 and send you a confirmation.

If you have any other questions about this please let us know.

Regards DigitalOcean Support_

<comment><USER14> I wonder if a new customer who gets the discount could then go and create a ticket and pay $25 to get a second discount. Hmm. :)

</comment></comment></comment><comment><AUTHOR> Clickable Link: [http://bit.ly/IkEFN6](http://bit.ly/IkEFN6)

</comment><comment><USER15> Thanks for posting this!

</comment><comment><USER16> this promo code has expired =((((((((((

</comment><comment><USER17> If I want to host multiple websites, would I have to register multiple accounts with DO, or can I sign up for multiple plans with the same account?

<comment><USER5> You can make a number of different "droplets" (instances) through 1 account, provided it has enough funds. However, if you want to host a few small websites, you can do that on 1 droplet using Apache or Nginx to set a directory for each domain.</comment></comment>


Working Hard but reaching nowhere – How should I work hard? - <AUTHOR> I joined this job recently at a well known tech firm where there are super smart people.  10 months in, I have been working quite hard, but not been able to meet the expectations of my team members.  They are awesome people and I hate to let them down.  It seems my hard work isn't paying off.<p>Question is "How do you work hard?  What I might be missing?  Feel free to ask my any followup questions.  This situation has left me very low and sad. <comment><USER2> It's quite hard to give concrete and useful advices over the Internet with vague details.

But one technique I see working over and over again across a wide range of disciplines and industries is this: share your feelings with team lead and/or some senior colleagues, preferably in a one-on-one conversation. Many will try to help in some way, some might even become your mentor.

Do not be afraid to show your weakness, and your willingness to improve is generally a highly valued attitude. If you get in trouble asking for help, then you are probably surrounded by terrible people and better off with another job anyways.

<comment><AUTHOR> Thanks! The people around me are very supportive. They would love to help me. Thanks for the pointer. I was a bit hesitant is sharing my inability to focus my energy in areas that would matter. Will talk to my manager, thanks again!

</comment></comment><comment><USER3> This is an incredibly difficult question to answer. In fact, in trying to mentor some of my colleagues I have been asked this very question more than once.

The best answer I can give you is that you need to find your style as a programmer. There are things you do well and things you don't do well. On the one hand, you should train to improve the things you don't do well. On the other hand you should depend on the things that you do well so that you can support your team. Getting the balance right is not always easy.

You ask about working "hard" and this word seems to come up frequently when I am helping someone. If you are focussing on this, then I think you are treading down a fruitless path. To be frank, there seems to be an assumption that if you work "hard" you will be successful. This is rarely the case, although it is true that successful people must work "hard".

To give you an example, I know from experience that no matter how many hours I put into studying quantum physics, I do not seem to be able to work at the level that would be needed for a quantum physicist. Frankly, this caused a considerable amount of anxiety for the younger version of myself. But, to be honest, I never really wanted to be anything other than a programmer, so it didn't really matter in the end.

At the beginning of this I said that you have to find your style. As you look around at the "super smart people" around you, you will find that no matter how "hard" you work, you can not be like them. That's because you aren't them. You do not have their skills and abilities. You have your own unique skills and abilities.

I firmly believe that "anyone can program", in the Ratatouille-esque sense of "anyone can cook". Not everyone can be a great programmer, but a great programmer can come from anywhere. What are the things that you are good at? What are the things that you enjoy doing? When you are "working hard", do you ever forget to eat?

Hard work does not make you successful. It is rather that there is something about success that drives you to work hard. Very possibly you are successful at working hard, but not successful at programming. Forget about working hard, and concentrate on programming. Do it until you can't do it any longer -- then sleep (and eat, if you have forgotten to). Then do it again. Every day program. If this seems like hard work, then find things that don't seem like hard work.

I hope this helps!

<comment><AUTHOR> Thanks, this hit right in the gut. Truthful advice. In my case, I do love what I do, it's just that I cannot feel like I am good at it.

<comment><USER3> Personal projects are probably the way forward. Juggling life and personal projects is hard, but start out small. I'm far from ready to publish widely, but I have discovered that I can actually program efficiently with one pomodoro a day: [http://mikekchar.github.io/core-wars- kata/](http://mikekchar.github.io/core-wars-kata/)

You will note that I haven't actually done much lately as family tragedies and personal illness have kept me away from the keyboard. But I hope that it will give you some inspiration that even if you devote a small amount of time you can move forward.

<comment><AUTHOR> That will help, thanks a lot!

<comment><USER3> Sorry for the late reply (hope you will see it). I wrote this a long time ago, but I think it might be useful in your current situation: [http://mikekchar.github.io/portfolio/LanguageAcquisition/](http://mikekchar.github.io/portfolio/LanguageAcquisition/)

Long story short: how do I get to a point where appropriate answer pop into my head automatically without having to sit there reasoning about it for a long time.

<comment><AUTHOR> I did read it. Thanks!</comment></comment></comment></comment></comment></comment>


Ask HN: High Volume Email Marketing - <AUTHOR>

We are a software company with about 15 million users (and growing very fast) in Silicon Valley and are having trouble scaling our email marketing campaigns. We will have 25 million+ users by end of month and we can't find a good saas platform to scale with us. Need advice. We are fine with transacation emails (drip emails, autoresponders), but can't find anything good enough for our marketing campaigns.
We tried Sendgrid, we've just temporarily switched to mailchimp right now, but are finding it difficult to:
a. manage large data - uploading a list of 10 million takes about 10 hours+ and is not agile. This sucks.
b. do fast, advanced segmentation of our list based on a dynamic variable such as when we release a feature for 5% of our users, then send. We'd like to just parse this 5% against our master list and quickly send. Or, segment easily using certain variables like license type, sign up date, etc.
c. Easily connect through an API to stop dealing with big data on a website's servers.
d. Robust analytics - we test everything and want to be able to a/b test & get open / click / bounce / manage unsubscribes, etc.
What do high volume senders use? We code all of it our own, just want a sender with a good reputation who handle our advanced segmentation and send well.
Thanks in advance. -m <comment><USER2> Might want to check out Contactology. They'll cover you on c and d pretty well. 10 million contacts in one go will probably choke their web interface, but it sounds like you want to move away from that anyway.</comment>


The Verge, Bitcoin Gold and MonaCoin Hacks: All You Need to Know - <AUTHOR> Reddit user ocminer was the first to notice both attacks. The user commented that Verge's system had not been properly repaired since April, and that "since nothing really was done about the previous attacks (only a band-aid), the attackers now simply use two [algorithms] to fork the chain for their own use and are gaining millions." <comment><AUTHOR> Read the full blog here: [https://blog.coinswitch.co/verge-bitcoin-gold-and- monacoin-h...](https://blog.coinswitch.co/verge-bitcoin-gold-and-monacoin- hack-all-you-need-to-know-585062c00c35)</comment>


Bullying - <AUTHOR> http://redqueencoder.com/bullying/ <comment><USER2> Dear fellow tech people, why do people bully? When the victims have overcome it, how did they thwart their bullies?

It's ridiculous. I remember being bullied in a lab once for being an "outside" major than the lab. I left the class within the drop period. I've also suffered professional bullying at a workplace. The experience still haunts me and will for a long time. Luckily I could move out of state and industry.

<comment><USER3> To feel like they are at least one step higher than the bottom of the hierarchy. Sometimes simply to bond with their (fellow bully) peers, without necessarily considering the deleterious effect on the target.

Maybe its even more primal than that. When I was a kid, our canary somehow escaped, and an adult told me that it would be picked to death by other birds because it looked different. I don't even know if that's true, but it stuck with me.

</comment></comment><comment><USER4> How common is this sort of abusive/harmful behavior in tech?</comment>


The Decreasing Follow-On Financing Success of Startups - <AUTHOR> http://tomtunguz.com/declining-follow-on-success-rates/

<comment><AUTHOR> This should trigger alarm bells in all would-be startup founders. These sorts of patterns should have founders debating about doing things like Bryce Roberts' indie.vc experiment.

[http://bryce.vc/post/116925485725/drafting-a-declaration- of-...](http://bryce.vc/post/116925485725/drafting-a-declaration-of- independents)

I think given this environment (the barbell shape of current day funding) the next financier who wants to make a big impact should fix this middle part of funding. I'd wager right now companies are dying in the series B land that shouldn't be, which means probable opportunity. (YC seems to have fixed early stage financing, so maybe some vc could be innovative enough to have YC level clout in series A land? Maybe it'd cost too much money to pull it off?)

<comment><USER2> I think there are a few things causing this:

1\. Early stage funding is much easier to acquire than it used to be. This means there are more companies looking for A rounds after a seed stage than there ever have been. At this point, everyone thinks they're a big shot and very few people actually are, so their feelings get hurt when there's lukewarm VC interest in an A round.

2\. The smart money has moved from B rounds to C rounds because there's too much noise in the early rounds. By C rounds you know more about the company's chances of success because you need meaningful revenue and a viable business model to raise C round money, but investing in a B round you often don't know an awful lot more than you did about the long-term viability of a company than you did at seed stage.

3\. Companies are failing faster as a result of 1 and 2, which reinforces the perception that the smart money is moving out of B rounds.

I don't think that having more companies fail at A or B rounds is a bad thing; but the VC market is increasingly focused on the unicorns that will have a $10B IPO in 10 years. There are only so many of those that the economy at large can support. And I don't think that there will be a "Like YC, but for A rounds" because the sums of money we're talking are several orders of magnitude bigger. Seed companies need training in how the business world works, how not to get taken advantage of, how to build a model that scales, developing a plan, etc. The money is somewhat secondary in a seed round. Companies raising an A round might need a little bit of guidance and support in fine-tuning their plan, but mostly they need money to hire people and execute on their plan. If you're raising a B round, you just need money. YC solved the problem for seed rounds by just hiring people who know these things and sharing them among a bunch of companies.

And I wouldn't say that YC has single-handedly solved the early stage funding problem. They simply don't have that scale -- nobody does. They have somewhat indirectly solved it by showing the world a model for operating a sustainable startup accelerator that others have copied; and they are hugely influential, but I don't think any one organization can solve a problem like this. It's too much.</comment></comment>


Internet Provider RANT - <AUTHOR> http://codeclimber.blogspot.com/2008/08/centurytel-what-embarrassment.html

<comment><USER2> Everyone loves a good telecom rant, and we've all had to use our best calming techniques after hearing the dreaded "between 9 and 5" (and then again when they don't show up), and we're all a bit sick of the "does this belong on Hacker News" replies, but really, does this belong on Hacker News?

<comment><USER3> No, I don't think it really does. We could make it slightly more relevant, though.

This is obviously an annoying situation that many of us have faced, and complaining to the companies appears to accomplish very little.

So, if you were going to start a company to fix this problem, across multiple industries, where would you start?

</comment></comment><comment><USER4> Gosh, I wish I got that kind of service from Bell Canada. It took me two weeks of calling them at least once per day before they sent a tech.</comment>


Navigating Detroit: A VFA Fellow Discovers Ideas, Energy, Opportunity - <AUTHOR> http://techonomy.com/2013/09/navigating-detroit-a-vfa-fellow-discovers-ideas-energy-opportunity/

<comment><USER2> It will be a while before Detroit makes a 'Mainstream' recoverey but I think it will happen within most HN'ers liftimes.</comment>


Election Systems Across Country Still Rely on Windows 7 - <AUTHOR> https://gizmodo.com/report-election-systems-across-country-still-rely-on-w-1836342889 <comment><USER2> As long as the title is no longer, "[...]still rely on Windows XP", I feel better

But the reality is, like XP, there will end up being so many legacy systems that Microsoft will have to release patches anyway, further extending it...</comment>


Social Distancing Could Change Our Relationship with FaceTime - <AUTHOR> https://www.theatlantic.com/science/archive/2020/03/social-distancing-coronavirus-videochat-facetime/608038/ <comment><AUTHOR> A headline that suggests an Apple-dominated world, but there are vice apps that unite platforms.</comment>


Show HN: VisualCV – A simple way to build parsable resumes for web and print - <AUTHOR> https://www.visualcv.com <comment><AUTHOR> Sole developer: VisualCV has been around since 2007, we recently acquired it to tackle some of the major pain points we had with resumes. Resumes currently have terrible formatting and can't be parsed very accurately.

Most people don't know this but recruiters in large corps rarily read through any of the resumes that comes in. Almost all applications are first parsed by one of the four major resume extraction vendors (sovren, resume mirror, burning glass, daxtra) then dumped into an applicant tracking system. Usually a resume is looked at only when someone does a keyword search on their database. While the process does extract majority of the content it still garbles up a lot of sections that people have spent hours painstakingly editing.

The industry seems to be stuck in a crazy process where it takes structured data turn it into a generally unstructured format (pdf, docx) and use another set of service to try to parse it back again.

We have a unique opportunity to actually work with one of the major resume extraction vendors and start to embed hrXML meta data into a pdf resume so that it can perfectly extracted. We are giving all our pro designs away for free for the next week and we'd appreciate any feedback!

<comment><USER2> My About.me just expired, I think I just found my replacement. Looks good so far.

</comment></comment><comment><USER3> @TOS linked from sign up page ([https://www.visualcv.com/www/site_information/professional_t...](https://www.visualcv.com/www/site_information/professional_terms_of_use.html)): 404...

@CV samples ([https://www.visualcv.com/cv-templates/best/resume- samples](https://www.visualcv.com/cv-templates/best/resume-samples)): layout borked in horizontal view on chrome 38.0.2125.114 for android 4.4.4. Ref: [http://imgur.com/x105xgA](http://imgur.com/x105xgA)

General thoughts: it wasn't (or rather isn't) immediately obvious for tipsy-me what payment model you are going for (subscription I persume?) or how much this service is going to cost me. I'd rather not have to sign up to acquire this information. If this service is free, please state it clearly on the sign up page and tell me what your business model is. If on the contrary it is not, tell me what you plan to charge me before I sign up.

<comment><AUTHOR> Thanks for the feedback. We normally charge subscription but we took off the pay wall this week for promo reasons.

</comment></comment><comment><USER4> What a great idea & execution.

As a programmer, I manage my resume on my github pages where can bring many benefits. - eg. make a new branch for a new company, easily add/remove related projects, install google analytics for checking who is interested in me, and so on.

Recently I've needed to submit my resume to several companies. What I surprised is that they, HR people, wanted only pdf/doc formatted resume even they work for software companies. What a silly.

VisualCV can be a proper solution between a old-fashined pdf resume file and too much opened LinkedIn page.

<comment><USER5> I'm curious - why _branch_ for new companies? Your resume represents the linear flow of time, it's not like we get to try out alternate versions of ourselves :)

<comment><USER4> I'm from South Korea.

To apply for a Korean company, they usually require a formal photo, SSN, parents' jobs, house income, written self introduction, etc. No kidding. And I have a few years military service experiences as a Korean army that might be not related with software engineering.

So for those reasons, I had to split branches to appeal myself to diverse companies properly. I don't want to make companies confused with unnecessary info.

</comment></comment></comment><comment><USER6> Just duplicated the resume I've been passing around to people that was generated with Word (bad idea, I know)

A few issues I noticed:

* Line breaks are not kept in a few areas (contact information specifically, might effect other areas)

* Free design has a header showing where it was made; PDF has a footer. Is there some way to remove this?

Overall, I like it (excluding the two issues shown above). I keep meaning to redo my resume in LaTeX for a while, I'll probably do that still at some point.

</comment><comment><USER7> I scrolled all the way to the bottom and tapped on the names I saw, but didn't find a link to an example CV. Seems like you should have a link to a demo CV?

<comment><AUTHOR> Thanks, I was just about to add a quick comment with our link. Here are some samples: [https://www.visualcv.com/cv-templates/best/resume- samples](https://www.visualcv.com/cv-templates/best/resume-samples) Also a list of our designs: [https://www.visualcv.com/cv- templates](https://www.visualcv.com/cv-templates)

There are more resources and links at the footer

<comment><USER8> This example: [https://www.visualcv.com/robcraig](https://www.visualcv.com/robcraig)

Has UTF-8 encoding errors: [http://i.imgur.com/H0ko8iT.png](http://i.imgur.com/H0ko8iT.png)

<comment><AUTHOR> Thanks, will look into it.

</comment></comment></comment></comment><comment><USER9> So who owns the resulting CV?

Are users free to export their data or have some third party service import it?

Or is it more of a roach motel?

<comment><AUTHOR> The user owns it. One of the core philosophy for us is that we don't monetize user data (ie opening our database for recruiters to search through).

Right now the user can import through PDF / Linkedin and export to PDF. We'll add more export formats in the future, I think hrXML and json endpoints would be pretty cool

<comment><USER9> So how do you make money?

</comment></comment></comment><comment><USER10> pretty neat, could I have multiple versions of my resume?</comment>


Why not discuss the inclusion of python on the browser?  - <AUTHOR>

Don't you think it's time to support python, ruby and other scripting languages in the browser? Why this obsession with Javascript? <comment><USER2> Because really, browsers are large enough and contain enough avenues for security holes already.

I'm no javascript guru, but let's please keep the number of languages embedded in browsers limited to the absolute minimum.

And let's get rid of flash while we're 'discussing' this.

<comment><USER3> What would python add that Javascript doesn't already let you do? Granted it can make programming easier in my opinion, but think of the complexity it would add. Any major website would need to either have two versions of their code (one JS, one Python), or more likely just use Javascript (you can't turn away visitors because their browser doesn't support your favorite language)

<comment><AUTHOR> The answer is that we need a VM supporting many scripting languages.

I recommend the demo where some guy is scripting in Ruby.net and following on Python... The sites can be implemented in any scripting language.

<comment><USER3> That doesn't even begin to handle the backwards compatibly argument. We still have people using browsers like IE6, so for a long period of time you would need to write code in both languages.

</comment></comment></comment></comment><comment><USER4> Which python?

Do you think it's time for python, ruby and other scripting languages to be standardised?

Do you remember how well visual basic worked in the browser?

</comment><comment><USER5> This is the wrong approach. Javascript is rapidly becoming the "bytecode" of browsers. Look at established projects like Haxe and GWT which take higher level languages and compile them down to low-level javascript. Pyjamas is even a python port of Gwt, not sure how well tested.

This approach solves many problems. Browser developers only have to support one language (javascript), and already projects like the V8 engine are making that fast and standardized. Developers can use the language of their choice.

It's what Java should have been in the first place. It's a pity that this is all built on an oddball language like javascript, but perhaps that's the only way this could have happened because there's no legacy javascript outside the browser.

<comment><AUTHOR> But Javascript is the right language for the future? I don't think it's a "21st Century solution"

</comment></comment><comment><USER6> Python used to be available as a client side scripting language for EMCA but I can't find that project these days.</comment>


Ask HN: Should a login page use SSL? - <AUTHOR>

First off, I'm not trying to tattle on my web host here. In a forum post, for my web hosting service, I made the following statement.
"I already feel exposed having to login to the forums without an https login page."
This was in a discussion about their lack of support for encrypted password transmission for their mail server.
The reply I got from my host was.
"I don't know of a forum anywhere that uses an https login.
As far as account compromises that we see (and we see a lot of them), they are almost exclusively due to compromised home or workplace computers, or insecure web sites, not intercepted Internet traffic.
I'm not saying it doesn't happen anymore, but it's exceptionally rare these days, primarily because it's infinitely easier to drop malware or viruses on tens or hundreds of thousands of people in one fell swoop than it is to intercept and analyze an individual users traffic looking for logins.
Security concerns are certainly always valid, and if you have reason to believe someone is targeting you, I can understand the desire for heightened security everywhere you enter a login. But the fact is most people would be better served ensuring security closer to home."
I can understand the claim that accounts are more likely to be compromised by user's not being careful with their own computers, but something about this reply is lowering my confidence. The reason is that many users will create forum accounts using the same credentials (as their host control panel login), which makes for an easy target IMO.
Is this (non-ssl login page) really as common practice as the reply claims? And if so, shouldn't that be changed, or am I just being too paranoid?
EDIT: Clarified statement. <comment><USER2> Yes.

Beyond that, there's really no excuse for not using SSL everywhere now. If a site has user data, or requires any sort of login, it should use SSL everywhere.

</comment><comment><USER3> You're correct about the forums, of course, but obviously the real problem is this:

 _their lack of support for encrypted password transmission for their mail server_

Unacceptable. Get the heck out of there before you lose something vital.

That's the thing about being shipshape. Why do you focus on getting the little things right? Because the attitude you bring to the little things is the same one you bring to the big things. And because, especially in security or reliability, big problems are built out of minor problems that accumulate or escalate without warning.

</comment><comment><USER4> You absolutely should have SSL be required when having a login form. Like 'ctb_mg' said, it's hard to believe we are having this discussion. It's scary where plaintext goes and how easy it is to intercept.

The tough thing is that not too many years ago it was perfectly normal to not use https for logins into anything except ecommerce, online banking, and serious corporate and government stuff. Even Gmail didn't default to https until a few years ago - long after they were huge!

We also have to remember that SSL certificates suffered a lot on shared hosting due to dedicated IP requirements (until SNI) and just plain being difficult and confusing to setup. That's a huge barrier for Average Joe that wants to setup a forum about race cars or Average Jane who just wants to manage her own website via CMS.

So now we have tonnes of legacy systems and people who simply haven't gotten the memo yet. All of which is to say that yes your host should use SSL, but it's going to be a long time before you see this practiced by the majority of websites. I'd say your host might be the norm instead of the exception.

Unfortunately their attitude might be indicative about how they think about the rest of their server security though, in which case you may as well move to a host that takes things more seriously.

After years of working with dedicated server companies I found that little things like this did tend to lead to patterns of bad security, bad backup systems, bad monitoring, etc.

</comment><comment><USER5> Looks like more head-in-the-sand security from people who aren't detail oriented. Yes, your login pages need SSL.

Perceived rarity has nothing to do with it! A password is being transmitted in _plaintext_.

If forum passwords weren't a target then why are so many website databases a primary target lately? They steal the crappy, unsalted hashes and emails and go to town at other services where they are likely to use the same password.

I can't believe we are having this discussion!

<comment><AUTHOR> "I can't believe we are having this discussion!"

That's how I felt, but that is also what made me want to have a quick check with others before voicing that kind of opinion. Seems like when I am the most sure about something, I'm the most vulnerable to making a mistake.</comment></comment>


Could Microsoft's new Surface tablet really cost only $199? We're skeptical - <AUTHOR> http://www.geekwire.com/2012/microsofts-surface-tablet-cost-199-skeptical/ <comment><USER2> As this price ($199~=$250NZ) they wont be able to make them fast enough which is exactly the kind of marketing MSFT needs. Lets say they lose $300 on each device. That means the can sell 80 million a year and still be profitable. That would give them 20% market share! Steve Balmer should put himself in the ads too, his ads were great when Windows first came out. I'd definitely buy one because it will run Office and Visual Studio right? I mean they wouldn't dilute the Windows brand with a Windows but not actual Windows device, that would be crazy. And the new Modern UI (moo-ey), its so colourful. (I love #A05000).</comment>