

Rewriting Avira's SPA from Backbone Marionette to Angular - alexbardas
https://medium.com/p/33d8c0ac11f1

======
slash3r
"We’ve just rolled out a major rewrite of the Online Essentials (Avira’s
flagship product) in AngularJS." "The whole idea of this web app ..."

No more antivirus solutions from Avira? It's flagship product is a web app?

The rest of the article is just a useless commercial for AngularJS, filled
with buzzwords and fallacies.

~~~
alexbardas
It's a tech post, not an avira commercial. Maybe it will help someone make a
good decision when choosing a js framework, based on real experience and
facts.

You can read more about the product here [http://www.avira.com/en/avira-
online-essentials](http://www.avira.com/en/avira-online-essentials)

Please tell me more about the fallacies you see in the article.

~~~
slash3r
I said it's an AngularJS commercial, not an Avira commercial. But let me get
the Avira part out of the way first: the article is at most an anti-commercial
for Avira. You're saying that this web app is the flagship product for Avira.
Do you know what a "flagship product" means? Do I really have to explain to
you why a web app as a flagship product is not a good commercial for a
security oriented company? But thank you for the link, go with the anti-
commercial even further.

And now for the useless AngularJS commercial part. Here are the fallacies:

\- You argue for choosing AngularJS using statistics from github, now that's
an "Argumentum ad populum". You chose AngularJS just to jump on the hype-
train, because you don't give any other reasons beside "look, so many others
are using it, it must be good".

\- You don't explain how to achieve the results. You're just saying: "here are
the results, you must believe me because I work at a company and write on
blogs". This is called "Argument from authority". You could have crafted some
toy examples to explain how is the debugging easier, or how does it help with
the testability, but no such things from you.

[there are more, but these will suffice]

And another thing about your article: you should explain some of the buzzwords
you use, not everyone knows them. For example: what does "velocity score"
means and/or implies? I can't get anything about it from google, and that says
a lot about it.

In the end, you have a nice skeleton for an article, but is not fleshed at
all. Nice color, pretty, yet absolutely worthless, graphs and no content
whatsoever. I hope you don't code as you write.

[edit: formating]

~~~
alexbardas
If you're really interested in Avira and its products, it's up to you to take
a look into this project from time to time and you may change your impression.

I added certain links in the article (e.g.
[http://www.funnyant.com/](http://www.funnyant.com/)), where the features of
all frameworks are discussed and compared. Read it and you may understand the
advantages. I'm sorry that you don't consider that a community driven project,
managed by top talent from Google is not a good enough reason to invest some
time into a framework.

I explained how we achieved the results: we rewrote it. The facts are pretty
relevant and they may help other teams.

I will craft toy examples in next articles, so it's best to follow me if you
really are that interested and would like to see more examples.

You can find more about velocity here:
[http://en.wikipedia.org/wiki/Velocity_(software_development)](http://en.wikipedia.org/wiki/Velocity_\(software_development\))
.

I'm sorry that you brought it to a personal level in the end, this explains a
lot. Instead, I hope you have a good day and don't forget to follow me to see
how well I code :).

~~~
slash3r
You end your comment in a condescending and yet you have the nerve to tell me
that I should follow you, when you have only one article posted, ever. Are you
for real? And why do you keep telling me to look up Avira? Tell me at least
that you are getting paid to promote Avira in every comment you make, because
I don't see any other logic to speak about it when it wasn't the freaking
subject of my rant.

Anyway, going to back to my issues, maybe you'll understand this time. Your
article has not a single useful thing in it, it just regurgitates random
facts. AngularJS might be the best thing since sliced bread, but you do a poor
job at explaining why. Does it matter that it has more commits, forks and
stars on github than alternative frameworks? No. Does it matter that is backed
up by Google? No. But please explain why are these things relevant in any
shape or form. It seems to me that you just went with the winner of a beauty
pageant.

You didn't added certain links, you added just one link, and it was buried in
a mountain of crap. It would have been nice if you expanded on the content
from that link. You say that this is a tech post, but I don't see no tech in
it (buzzwords =/= tech).

"We rewrote it". Yes, well argued, I see no flaw with that statement
(/sarcasm). You could have said that you used X feature in Y manner to improve
Z and thus replace the god old W way of doing things. But why bother? You were
too busy counting github commits and whatnot.

Do you understand where I'm going with this? Or are you gonna reply with yet
another "look up Avira" and "here's another argument from authority to prove
me right" comment?

In the end, I think I'm just talking to a wall here, so I'll just leave you
with a Pauli inspired statement: "you're article is not even wrong" (you'll
get bonus points from me if you understand this one).

~~~
alexbardas
It's hard for me to make more comments here. I don't know your tech background
and also how much experience you have with frontend or any kind of frameworks.

Unfortunately, you rush to make conclusions. It's my first post on medium
(others will come for sure), but why this have to be the first article posted,
ever?

About the rewrite: you have x features in backbone. Then you rewrite all the x
features in angular and you compare the results.

e.g. [https://tech.dropbox.com/2012/09/dropbox-dives-into-
coffeesc...](https://tech.dropbox.com/2012/09/dropbox-dives-into-
coffeescript/)

Dropbox rewrote its javascript in coffeescript and saw a LOC improvement. They
had a code in js and rewrote it in coffee. We had it in backbone and rewrote
it in angular. I'll probably provide more details (with code and so on) in
next blog posts, but I wanted to keep this one shorter, because it's not about
how we implemented it, but more about the conclusions we reached.

In the end, it doesn't matter how many LOC you have in a certain language,
framework, etc. It's more about the productivity and the quality. It worked
for us very well in both cases, and I think this is the final idea.

I'm sorry that you bring the discussion to a personal level, again. I'm open
for suggestions and would like to make further articles "more relevant" and
share better content. If you think you can help me with this and with one
suggestion or two, please get in touch.

Have a nice day!

------
cdragos
What do you think are the best use cases for Backbone Marionette?

~~~
alexbardas
I think that it may be simpler to learn than both angular and ember.

Unfortunately, given the fact that it's missing 2 way data binding and it's
not declarative, you end up with lots of boilerplate code and in the end you
invest more time in writing your backbone application than in learning angular
and writing the application in it.

To be honest, I'd only start a new project in angular or ember because they
are extremely productive frameworks. Backbone was great more than 2 years ago.

~~~
moimikey
I politely disagree with ending up with more boilerplate code with
marionette... you're ending up with _less_ boilerplate code when using
marionette with backbone, and even when including marionette, your
"boilerplate" code is necessary configuration... binding dom elements, events,
template handling, rendering, data serialization... even more so if you're
doing it in CoffeeScript.

behold... a view in 3 lines of code.

    
    
      class Views.AlbumTracks extends Marionette.CompositeView
        className: 'album-tracks'
        template: 'album-tracks'

~~~
alexbardas
In angular you'd never need the line with className, so you'd end up with even
less code, because of its declarative style.

A good reading when thinking that's necessary to bind dom elements, events,
etc is here: [http://stackoverflow.com/questions/14994391/how-do-i-
think-i...](http://stackoverflow.com/questions/14994391/how-do-i-think-in-
angularjs-if-i-have-a-jquery-background)

------
ds_
Can the improvements in loading time be attributed to angular alone?

~~~
alexbardas
We rethought the backend API calls and made all of them in parallel. Also, the
websocket - server connection is initialized sooner.

So, I'd say that this part could have also be done in backbone. It was also
fast before, but we gained more than 1 second loading time with this
refactoring.

