Tips for beginning systems and software engineers - <AUTHOR> https://ilya-sher.org/2016/05/19/tips-for-beginning-systems-and-software-engineers/ <comment><USER3> I am glad you put automated tests as one of the first ones. To this date I find that many people - often mid level, and sometimes senior developers - <USER2> very uncomfortable with autmated tests. As a result they don't use this tool, and end up being less productive, and often write more complex than needed code - and of course code with more bugs that could have been avoided.

I'm no TDD or automation advocate - however I do see that this tool is essential to modern software development, and the only way to learn to use it, is by practice.

I would encourage every engineer who's covered the basics to go full-in on TDD with 100% test coverage for a few days or weeks. Not because it will make you more productive or less bugs (you will be less productive), but it will change your thinking of writing code (similar to how learning Lisp will have a massive impact on your thinking of structuring code). TDD + 100% coverage is an extreme, which is worth experiencing to take learnings from it.

Later down the road, when you've gotten into the habit of developing with no, or barely any automation, it will be much more difficult to learn to fit this tool into your coding routine.

<comment><USER4> > however I do see that this tool is essential to modern software development

If we are talking about the later stages of the life of a software project then I completely agree with you.

But if you just started a new project and you are still in a constant state of change then a large test suite will slow you down because you have to adapt all your tests all the time. In the worst case you might even stop to improve your software just because updating your tests is too much work.

<comment><USER5> > But if you just started a new project and you are still in a constant state > of change ...

I don't understand what the rush is all the time. Sit down with a pad/pen or whiteboard and _think_ about the design. the last mobile project i started, I sat down and wireframed on paper. Tests came naturally and didn't fight the design.

<comment><USER4> I think it depends on what type of software you are doing. If it is "just" a mobile project then you can pre-plan most of it. But I come from a more scientific background and most of the stuff I did back at university was pretty much impossible to plan because you did not actually know how you would solve your current problem. Usually you would try several approaches until you find the one that works. In such a situation tests are hard to use because they reduce your flexibility.

<comment><USER6> You are completely allowed to throw out your tests if you are doing this kind of exploratory programming.

Then, tests are simply your hypotheses.

<comment><USER7> Yes, that's one thing people often forget. It's OK to delete tests that are obsolete.

</comment></comment></comment></comment></comment></comment><comment><USER8> I can add another thing from my personal experience - if you've just started out and you land in a job where you're the sole warrior or you don't see a single person who's smarter than you, get out as fast as you can. In best case scenario you will not learn anything, in the worst case scenario, you will learn bad things that you'll eventually have to unlearn.

<comment><USER9> Just be cautious with:

"if you've just started out and ... you don't see a single person who's smarter than you"

Many people starting out think they're much 'smarter' than they really are - experience often counts for much more.

Of course, you could also have landed in a real dead-end company.

<comment><USER8> Let me elaborate on that. Usually contracts include a probation period. Use it to evaluate your potential long-term employer in the same way the employer evaluates you as an employee. It shouldn't take more than a month to understand the atmosphere.

<comment><USER9> Absolutely.

</comment></comment></comment></comment><comment><USER10> "Learn at least 3 very different programming languages. I'd suggest C, Lisp and Python. The chances are that you will not find a Lisp job but it surely will make you a better programmer."

(I understand these are suggestions and we are in the realm of personal opinions).

Even as a Systems/Embedded programmer it's hard for me not to consider HTML/Javascript a must-have, this day and age (not a nice-to-have).

Even in embedded/industrial systems nowadays it's perfectly normal to have a maintenance interface based on a lightweight web server.

<comment><USER11> Agreed. C, Lisp, and Python are all integration languages. There's a fair bit of PL history in there, but it's mostly one problem set.

A better mix would be:

Python, Javascript, SQL, and Regular Expressions

This mix would cover integration, ux, persistence, and madness.

<comment><USER12> I still think C/C++ needs to be in the mix there somewhere(or even better, assembly). Even if you don't write them day-to-day knowing how pointers and memory works can be invaluable.

</comment></comment></comment><comment><USER13> Do i really _must_ know 1) Big O notation, 2) common algorithms and their time and space complexity, 3) which opcodes exist for a CPU of your choice and 4) a kernels main system calls?

I dont know any of these. I know they exist, i know of the concepts, but no specifics. I would argue that these are good to know, and a must if you are working in a domain where this matters. For design, architecture and implementation in a high level language when the problem do not touch these areas this is not a MUST have.

<comment><USER14> > Do i really _must_ know 1) Big O notation

Big O's not too hard. I would imagine that most programmers have an intuitive feeling for them. For example:

If I need to use a loop, that's going to slow things down (formally, going from O(1) to O(n)).

If I keep putting loops inside loops, it's going to get really slow (formally, going from O(n^x) to O(n^(x+1))).

Each element requires all the previous to be processed again. That's not going to work (formally, reaching O(2^n)).

Maybe some fancy datastructure would speed this up (formally, going from O(n) to O(log n)).

> 2) common algorithms and their time and space complexity

I think this just boils down to appreciating what kind of work must be going on in some algorithm. For example, sorting a list is surely going to loop through it (i.e. O(n)); actually it's O(n * log n), but that's pretty close.

I would imagine that the most effective knowledge for a complete beginner would be bad usage patterns for a bunch of common datastructures. For example, a loop which appends to the end of a linked list is a bad idea, since finding the end of the list requires looping through all the nodes. This is a loop inside a loop (AKA O(n^2)) when we intuitively know that only a single loop is required (AKA O(n)).

<comment><USER15> > For example, a loop which appends to the end of a linked list is a bad idea, > since finding the end of the list requires looping through all the nodes. > This is a loop inside a loop (AKA O(n^2)) when we intuitively know that only > a single loop is required (AKA O(n)).

That would be indicative of a bad/naive linked-list implementation, wouldn't it? It's not that much overhead to maintain a wrapper with front and back pointers.

<comment><USER14> Well, there are some caveats. Firstly, that would technically be a double- ended queue ("dequeue") rather than a linked list. That's fine if you're using it as an abstract datatype, i.e. you're doing things like "myList.append(foo)", "myList.get(0)", etc. and hence you're able to swap out the implementation of those methods.

There are some widespread cases of these naive datastructures which don't fit that model though. For example, Lisp makes heavy use of "cons" to pair up two values. By nesting these pairs, we can get arbitrary tree structures, and this is how lists are implemented, e.g. "(list 1 2 3 4)" is equivalent to "(cons 1 (cons 2 (cons 3 (cons 4 nil))))". These structures are heavily used in Lisp (since it does so much "LISt Processing"), and since the language is so dynamic it's hard to compile it away.

Haskell's default list type works in this way too. There, the problem is compounded by immutability: changing the _start_ of a list is easy, since we can re-use the pointer (immutability allows a lot of sharing). For example, if "list1" is "[1, 2, 3]" and "list2" is [9, 2, 3]", they can share the "[2, 3]" part:

                    1
                    ^
                    |
        list1: cons * *----+    2           3
                           |    ^           ^
                           V    |           |
                           cons * *--->cons * *--->nil
                           ^
                           |
        list2: cons * *----+
                    |
                    V
                    9

However, if "list3" is "[1, 2, 5]", it can't share any of the "list1" or "list2" structure: the last element is different from the other lists, which requires the second-to-last element to use a different pointer, which makes it different from the other lists (even though it uses the same element); this requires a different pointer in the third-to-last element, and so on:

                                            5
                                            ^
                                            |
        list3: cons * *--->cons * *--->cons * *----+
                    |           |                  |
                    V           |                  |
                    1           |                  |
                    ^           |                  |
                    |           V                  |
        list1: cons * *----+    2           3      |
                           |    ^           ^      |
                           V    |           |      V
                           cons * *--->cons * *--->nil
                           ^
                           |
        list2: cons * *----+
                    |
                    V
                    9

The problem's not as bad in Haskell as it is for Lisp: Haskell doesn't allow as much dynamic behaviour, so a lot more usage information is available during compile time, and allows optimisation like "list fusion". Also, Haskell makes it easy for programmers to define their own datatypes (like dequeues), and allows datatypes to be abstract (either using typeclasses or "smart constructors"). Being abstract makes pattern matching more difficult though (requiring "views").

<comment><USER15> Ah, I was thinking more in terms of C/C++/Java/C# style linked lists, which tend to look something like this:

      class List<T> {
        ListNode<T> head;
        ListNode<T> end;
        int size;
      }
      class ListNode<T> {
        T data;
        ListNode<T> next;
        // possibly, if it is doubly-linked
        ListNode<T> prev;
      }

</comment></comment></comment></comment></comment><comment><USER16> I've been told conflicting things about don't repeat yourself; sometimes you end up making something wildly complex to avoid repetition - since learning functional programming I'm starting to think breaking things down into small reusable pieces that can be repeated in different ways is better.

<comment><USER17> The problem with DRY is people will see "Oh, hey, I'm doing the same thing in multiple places. DRY says I should factor that out!" without actually thinking about whether it makes sense for there to be a dependency between those pieces of code. Moving duplicated code into a shared function/method/etc -creates an implicit dependency- between all callers of that function/method/etc. That's exactly what you want in some situations (and is in fact the benefit of DRY, i.e., because when you have to fix that code for one function, you have to fix it for the other(s)), but if you do it blindly you create a dependency between two unrelated bits of code, and that's where complexity comes from, as you start adding conditionals and things to try and make that shared code handle all cases.

I find considering whether the repeated code is innately related, or in the same domain, or not, to be the best metric for determining whether I should refactor it to not repeat. It's adhering to the principle of least astonishment. Sometimes it should all stay separate. Sometimes a few pieces should be refactored to share code, and others left to repeat. Sometimes one set of the repeated code should share a function, and then the other set should share a different function, -even if that different function has the same implementation-, simply because the second set is so unrelated to the first. Sometimes they all should share the same code, because they're all related.

Breaking things into small, reusable pieces helps avoid this because the dependencies you create are on small, easily understood, easily replaced snippets, which tends to have a very clear context/domain. It's easy to prove that the abstracted function is correct, since it's so simple, and it's clear what domain(s) it involves, since again, so simple, and thus the problem with any given bit of functionality is almost assured to be the composition of those functions, i.e., your specific use of it in this one instance. You can still run into issues if you reuse some of those composed functions, however.

In general, the greater the complexity and domain specificity of the code you're trying not to repeat, the greater the danger you're shooting yourself in the foot.

FP is especially beneficial, as such, because the higher order functions that tend to be common are both pretty simple in their function, and pretty universal in their domain.

<comment><USER16> There was a great talk in the Elixir Meetup London by Anthony Pinchbeck about organising functionality not around MVC but the functional unit being build.

So for example if you have something that is dealing with registering your website, create a directory called register_website and all models, functions and controllers to do with that code go in there. The talk suggested deleting the controllers and models directories. He also said there was duplication but everything was more loosely coupled and you could always group things in deeper functional units later.

I'm not 100% brave enough to go for this structure quite yet but it certainly makes coming to a project pretty clear as you literally have a list of all the functions of the site where the code sits for each thing :-)

</comment></comment></comment><comment><USER18> I would add two things to this:

1\. Automated tests are not the only way to write code with less bugs. The other two, currently less in fashion but IMHO very important, techniques are abstraction and assertion.

2\. In my view, there are two kinds of automation - bad and good. Bad automation checks if humans did some process correctly. Good automation implements some process without human intervention. It's very easy to start working on bad automation rather than the good.

<comment><USER19> Automated tests aren't the only way to write code with fewer bugs, but they are the easiest way to write such code. Automated tests are also the easiest to have running constantly, giving you instant feedback when you've broken something. The only downside is that there are some tests (like testing with particular datasets or high-load performance testing) that can be onerous to automate.

My personal rule of thumb is that checks for program _correctness_ should all be automatic. Non-automated tests ought to be reserved for testing non- functional requirements (e.g. making sure the service is performant under load, reliability measures like failovers, etc.).

<comment><USER20> > Automated tests [...] are the easiest way to write [code with fewer bugs].

Actually, automated tests are best at ensuring the code doesn't have regressions. But writing bug-free code takes much more than just that; it needs thought-out architecture and interfaces, and with those you often can get decent code without automated tests, so no, it's not "the easiest way".

<comment><USER21> They also serve as a form of code documentation (defining expected behavior).

When doing TDD, often speed up development owing to the ability to get much quicker feedback on the code you just wrote.

Code without tests has a tendency to congeal owing to the massive uncertainty surrounding changing any particular part.

<comment><USER20> > They also serve as a form of code documentation (defining expected > behavior).

Oh, far from it. Tests are not documentation, documentation is documentation. Tests can be treated as a set of examples at best.

<comment><USER21> Good well explained tests serve well as documentation. I've used them before in lieu of specifications.

Bad tests not so much.

</comment></comment></comment></comment></comment></comment><comment><USER22> I must say that the more I read articles of this character, the more I feel that it would make sense to distinct between different types of "engineers".

A lot of the proposed advices are applicable only in certain fields, and not so much (or not at all) in different fields, whereas every field can go very deep (so it's a waste of time gaining knowledge you'll never use there). While a number of these advices are fairly generic, others definitely are not. A front end (client side) web developer won't benefit from having deep knowledge of data structures or the kernel, but he will benefit from knowing about Big O notation. Additionally, he will benefit lots from knowing how browsers work, and having deep knowledge of HTTP. Someone working on ETL processes all day will not benefit much from knowing about interpreters and compilers, but will benefit from knowing a lot about UTF-8. But also, he will benefit lots from knowing a large number of layer 7 transport protocols. A systems programmer (defined as "someone who programs close to the hardware") won't typically benefit much from knowing javascript or how browsers work, but will benefit lots from Big O notation, data structures and algorithms, and C. And so on.

I'm seeing a future in which we will be able to more distinctly treat separate specialisms within the field that we now call "software engineering" (or countless variations on it).

<comment><AUTHOR> As with any other advice, one should use common sense to see how and which parts of it apply.

> A front end (client side) web developer won't benefit from having deep > knowledge of data structures

but basic knowledge is still a must

I consider the basic knowledge of the "must" sections really a must for everyone. The depth might vary.

</comment></comment><comment><USER23>
      > Automated healing / rollback

Jesus christ on a cracker, please use this sparingly. It's one thing to have buggy software. It's another to change versions of software _right underneath your users_. This is like polishing a dance floor while the DJ is still spinning. It doesn't matter if you're reverting to an old good version; unannounced, unplanned & unexpected changes lead to disaster. Known bugs are better than unknown changes.

      > Don't duplicate code

Yes, this is a really bad idea, but forking is the cheapest possible way to make changes that break as few things as possible. Yes, it's a nightmare in the long run. Ask your boss if he really cares about the long run.

Everything else was spot on.

</comment><comment><USER24> I don't really get the Ease vs Simple section, what point is he trying to make?

This is simple:

      i  = 0x5f3759df - ( i >> 1 );

Where this is just easy:

      famework.authService.login('user','password')

Good article though.

<comment><USER25> If you haven't already done so, listen to this talk by Rich Hickey (the creator of Clojure). This should clear it up for you. [https://www.infoq.com/presentations/Simple-Made- Easy](https://www.infoq.com/presentations/Simple-Made-Easy)

<comment><AUTHOR> Thanks! Added link from the post to the lecture.

</comment></comment></comment><comment><USER26> Nice post! I hope lot's of people read and understand it, the world will be a better place for it :)

One thing that would be good to add is: If you implement a way to create/add something, implementing a way to delete/remove that something isn't optional.

As Lovecraft put it: 'Do not call up that which you cannot put down.'

This will result in a system that keeps proper track of stuff.

</comment><comment><AUTHOR> There are many good points in the comments here. Thank you! I have added a link from the blog post to this discussion.

</comment><comment><USER27> It's usually managers who buy the hype. They're the ones who need to be told to be sceptical.

Nice post, by the way.

</comment><comment><USER28> Good list.

I would add "Software that does not ship is essentially useless."

To clarify, I mean that you can polish and try to perfect as much as you want, but at some point you have to get it into the hands of users to be actually useful.

</comment><comment><USER29> I'm not convinced on servers must be set to UTC timezone. Maybe just write your server code to read/store UTC time, which is easily calculated from any timezone.

<comment><USER15> Time should be converted to UTC at the earliest opportunity, and kept that way as long as possible.

Also, always, always, always, serialized in ISO-8601 format if it is getting turned into text.

</comment></comment><comment><USER30> Can we somehow change UTF-8 to WTF-8?

Over the last 12 years or so I have constantly been bitten in the ass by UTF-8. It first started when I moved from the US to Europe and decided to help people make websites in their native language.

More recently I was developing a piece of python code to help me with a thing. Running into UTF-8 problems made me decide to do a deep dive into what it is and how it works. After a week of diving down a rabbit hole I am still none the wiser.

Blog post after blog post, video upon video, and it still doesn't click for me. Yes, I solved my problems, but in a black box type of way.

Can anyone recommend a good book or long source to help me with this?

</comment><comment><USER31> Missing advice: Learn to read specs.</comment>


Flexbox Adventures - <AUTHOR> http://chriswrightdesign.com/experiments/flexbox-adventures/

<comment><USER2> This makes doing layouts in css so much easier. I can't wait until we can drop al the grid frameworks and use this instead.

Another good explanation on CSS-Tricks: [http://css- tricks.com/snippets/css/a-guide-to-flexbox/](http://css- tricks.com/snippets/css/a-guide-to-flexbox/) Browser support: [http://caniuse.com/#search=flexbox](http://caniuse.com/#search=flexbox)

<comment><USER3> Wouldn't you rather use CSS Grid to replace grid frameworks? [http://igalia.github.io/css-grid-layout/](http://igalia.github.io/css-grid- layout/)

</comment></comment><comment><USER4> This little tool is neat for making quick flexbox structures: [http://maxsteenbergen.com/fibonacci/](http://maxsteenbergen.com/fibonacci/)

<comment><USER5> I use this one, which has a bug or two but is excellent and feature rich: [http://the-echoplex.net/flexyboxes/](http://the-echoplex.net/flexyboxes/)

</comment></comment><comment><USER6> How does this work responsively? I was initially reading this on my phone, and the first example says the middle item is not allowed to grow so the left and right have been given an equal share so they are sized evenly.

Except on my phone I was seeing the left and middle taking up 50% and the right one being pushed down and taking up 100%.

<comment><USER5> flex-shrink dictates how negative free space should be distributed. When there is no free space, it is irrelevant.

In addition to that, below a certain width, the CSS on the parent UL is being changed from flex-wrap: nowrap; to flex-wrap: wrap;, so when the container shrinks to a width smaller than the sum of the flex-basis of all elements, it will wrap.

Keep in mind I haven't read the flex spec yet, though, so that's based on observation not spec.

</comment></comment><comment><USER7> Here's my favourite example of a layout that to the best of my knowledge, you can't solve with flexbox. I've only been able to solve it with JavaScript

A grid representation of a list, let's say a list of image thumbnails along with small amount of other data. Something like the image grid in iPhoto.

What's so hard? Let me expand the requirements. I want the dimensions of each item to be identical, let's say a square. I also want each item to be as close to a specific size as possible, but scaled up or down slightly to allow each row of items to exactly fit the width of the containing element. With the exception of the last row, which is allowed to be unfilled.

You can _nearly_ do this with flexbox. The only problem is that the elements in the last row will be stretched to fill the row if it's short a few items. It's also fairly awkward ensuring the height of an element matches it's width, the current solution seems to be a hack involving padding-bottom.

I'm planning on trying out [http://gridstylesheets.org/](http://gridstylesheets.org/) to see if it's expressive enough for what I want. Of course, the catch is that I'm still depending on JavaScript.

<comment><USER8> Can you add at least one row worth of empty items? They'll spill into an extra row and get stretched, but you won't see them.

<comment><USER7> That's a novel approach. The catch is that the number of items per row is fluid, so you'd have to overestimate on how many extra items you'd need, then you have the problem of not knowing how much overflow to hide for the parent container. Unless i'm misunderstanding your idea?

</comment></comment></comment><comment><USER5> If flex hasn't completely changed how you write layout related CSS, and it isn't because of legacy browser support, you're missing out.

I also recommend this guide which is very visual and helped me a lot: [http://css-tricks.com/snippets/css/a-guide-to-flexbox/](http://css- tricks.com/snippets/css/a-guide-to-flexbox/)

<comment><USER9> What's browser compatibility like on this? Do I need to install any polyfills to get this to work on older browsers (mostly older IEs)?

<comment><USER10> [http://caniuse.com/#feat=flexbox](http://caniuse.com/#feat=flexbox)

Internet Explorer, as usual, screws everything up. No support in IE8 and IE9, limited support in IE10.

<comment><USER5> In practice, IE10 is totally fine. If you have to support IE9 and lower you shouldn't adopt flex box yet.

</comment></comment></comment></comment><comment><USER11> Great post. Just used Flexbox for the first time on a production site and it's working great. I did have to use significant fallbacks for IE though, but that'll soon be a thing of the past.

</comment><comment><USER12> I remember about 4 years ago I discovered flexbox but of course it didn't have good browser support yet and there were even a few other competing proposed CSS solutions.

Just last month I started using it on a production application for the first time. We all talk about the web moving fast, but 4 years is a long damn time to have to wait. Especially considering I was doing a lot of WPF/Silverlight at the time as well and this type of layout support was built in from the start.

<comment><USER13> You didn't really have to wait that long, I used it on a site a year ago (Autumn 2013) and managed IE8 support along with FF, Chrome, IE8+ with a combination of the 'old' flexbox and the new (+ a couple of IE hacks).

<comment><USER14> Could you please describe, or point to a resource for, the necessary IE hacks? I'd be most appreciative. Thanks!

<comment><USER15> One technique is, alongside flex, to use Sass/LESS/Stylus mixins (or just CSS classes), using float and widths: IE8/9 use those, they're ignored if flexbox is supported. It takes a little work, and you have to limit yourself somewhat, but it's reasonably robust. Effectively, you describe a float-based grid, but include all necessary flex-based declarations. Alternatively, you describe a display:table based grid, but that has fairly serious downsides.

All current hacks available are pretty fragile. Best solution is a separate set of rules scoped to .no-flexbox (or .flexbox if you're going the other way). It's a massive pain in the arse, tbh.

</comment></comment></comment></comment><comment><USER16> Can we get a new rule? "In the first few paragraphs of "introduction to X" or "all about Y", mention what X or Y is?

Please?

</comment><comment><USER17> Looking forward to using this once IE8 drops off the radar (never mind IE10). I considered using it with fallbacks, but deemed it to be not worthwhile since A) I had to limit flexbox to whatever the alternate scheme (display:table-cell in this case) could do, B) I was basically maintaining and debugging two separate layouts at that point.

<comment><USER18> But it doesn't work in IE 9, right? Isn't that a big chunk of audience?

<comment><USER19> Depends on where you source your browser usage statistics, but IE9's share is smaller than IE8's. For example, caniuse.com[1] has IE8 on 3.18%, and IE9 on 2.13%. Later versions of IE (and Windows) are better at auto-updating, and people using them seem to be more willing to upgrade.

I'm lucky enough to work for a company with a last-2-versions support policy for IE, meaning IE10 and 11 are all I have to worry about. I can't understate how much nicer it makes web development. So much of the bad reputation of web technologies stems from wrestling bugs in old versions of IE and the lack of proper layout capabilities in CSS.

[1] [http://caniuse.com/#search=flex](http://caniuse.com/#search=flex)

<comment><USER3> In case you want a more "mainstream" sample, I see this on bloomberg.com: IE9 6.20%, IE8 4.09%, IE11 3.80%, IE10 3.12%, IE7 0.42%

<comment><USER19> To be clear, the caniuse.com stats are sourced from StatCounter Global Stats[1], not from the site itself, so they should be fairly reliable, albeit averaged across the world. Obviously, nothing beats measuring for your own site and audience.

[1] [http://gs.statcounter.com/](http://gs.statcounter.com/)

</comment></comment></comment></comment></comment><comment><USER20> I'm using a multitude of nested flexboxen in a web app currently in testing and it's working well. There may be theoretical performance issues and slightly odd behaviour at points but nothing I've noticed -- main thing is all the layout-juggling JS I didn't have to write...

</comment><comment><USER21> Wow it's really impressive.

</comment><comment><USER22> _"…while helpful tools like grunt-autoprefixer will feel like magic, my personal experience with them has shown them not to be so perfect."_

Can the author elaborate?

</comment><comment><USER23> Flexbox syntax reference: [http://ptb2.me/flexbox/](http://ptb2.me/flexbox/)

</comment><comment><USER24> According to caniuse.com it is fully supported on all major browsers now too.

<comment><USER25> Yes, but are you willing to forgo IE8, IE9, and IE10 support?

[http://www.netmarketshare.com/browser-market- share.aspx?qpri...](http://www.netmarketshare.com/browser-market- share.aspx?qprid=2&qpcustomd=0)

Let's hope Windows 10 is a huge hit.

<comment><USER26> If you're willing to include vendor prefixes and all three syntaxes, you can get considerably better support, including IE10: [http://css-tricks.com/using- flexbox/](http://css-tricks.com/using-flexbox/)

<comment><USER27> IE10 uses a substantially different interim spec syntax that is conceptually different in a couple of key ways.

<comment><USER19> If you run your CSS files through Autoprefixer[1], it's possible to use the latest syntax, and have it automatically converted to all necessary older ones.

[1] [https://github.com/postcss/autoprefixer](https://github.com/postcss/autoprefixer)</comment></comment></comment></comment></comment>


Ask HN: Is it possible for an author to completely conceal his or her identity - <AUTHOR> While using a fake name is fairly common among published authors, it's also very common for the fake name to be linked back to a real life identity.   Is it possible for an author to remain completely anonymous from the publisher and still receive payment for his or her work? <comment><USER2> Why would a major publisher want to take the risk that the author isn't somebody reprehensible who would bring bad publicity to the press when their identity is revealed.</comment>


Trivia quiz about energy sources and electricity generation around the world - <AUTHOR> https://lowcarbonpower.org/quiz <comment><USER2> Of course, it may be a matter of taste, but the quiz is mostly asking you to make fine distinctions between small countries' (or percentages of) power generation portfolios, which is not something any average person is tracking.

It would be a little more interesting if the quiz could lead people to understand something new / unexpected about clean power. Or help them choose to do something about it.

Aside from that, it really is trivia. Or minutia.

<comment><USER3> Um, yes.

"In Gabon in the year 2015, what percentage of the electricity generated came from Renewables Except Hydro?"

</comment></comment><comment><AUTHOR> Thanks for the feedback! The quiz content is sort of randomly generated every day. There is a preference given to large countries (countries that generate a lot electricity, to be precise), but small countries can also appear.

"lead people to understand something new / unexpected about clean power. Or help them choose to do something about it." \- that is exactly what the site aims to do. Feedback much appreciated!

</comment><comment><USER4> It is a fun quiz.

However, since it's random, why do you have to stick to the daily regeneration? Could it be regenerated per request or is it somehow managed manually?

<comment><AUTHOR> Doesn't have to be daily. I think it's fun that people get to do the same quiz, ie you can take it and then ask a friend to take the same one. Then come back the next day for a new one, if you're interested.</comment></comment>


How We Hacked the Media and Landed Six-Figure Contracts in Four Days - <AUTHOR> https://medium.com/life-learning/how-we-hacked-the-media-and-landed-six-figure-contracts-in-four-days-96ea4aca4eef#.vzzr3xy38 <comment><USER2> More like tricked the media into thinking the app was real. Social networks had banned their domain name, due to too many postings/spammings of it. But people still talked about it because it was controversial. An app that matches you up to other people to fight. Sort of a Fight Club app rather than Tinder for fighting. One that was a mockup that lead to their real web page and campaign.

I'm sure they could have made a real app that matches people up with other people to fight, but there would be a big liability if people got hurt in those fights. There also could be criminal charges as well for provoking assault and battery.

It just shows how gullible the media is to believe almost any project is real, and how some people will just fund anything even if it is a bad idea that leads to liabilities from getting people to fight each other.

Still there are things to learn from it to get the media's attention. Like writing to new media companies about your app, getting people involved to promote your app, making a mock up first before writing your app so people will know what it should look like when finished, testing it out on a web app first before making the mobile app, etc.</comment>


Neovim wants to crowdhire a full-time developer - <AUTHOR> https://salt.bountysource.com/teams/neovim?

<comment><USER2> A decent wage for a good C programmer in the USA might be $100k. Which works out to about $2000/week. Before taxes.

But this campaign is asking for $7500 a week! Where do they get these numbers from?

<comment><USER3> It's 7500/month for 5 days/week.

<comment><USER2> My bad.</comment></comment></comment>


Ask HN: How/Where do I Find a Mentor? - <AUTHOR>

Does anybody have any tips for finding a mentor? I'm an 18 year old college student in NYC and I'm interested in tech startups and computer programming. <comment><USER2> Hacker news is a good venue to know about Tech Startups. Go to meetup.com to find local hacker groups/startup confs.</comment>


It's time to call time on nerd culture - <AUTHOR> http://radar.oreilly.com/2014/10/its-time-to-call-time-on-nerd-culture.html <comment><USER2> Just no. He mixes this,

"nerds now have money, power, and status", and "mainstream culture has shifted from mocking us to respecting us" with, "GamerGate made me ashamed to be a gamer"

Nerds are still the butt of the joke, and still get the negative media attention. Gamergate is the perfect example of this. The media spin has been enormous, and not in "nerd" favor. I don't know how many times I've seen "fat sweaty basement dwelling nerd" thrown around during the ordeal. If the nerds had really won, certainly the nerds would get the spin, or at least a proper voice. No, This guy has obviously just been reading the mainstream, otherwise he'd know that the death threats, harassment, and other terrible elements of internet culture have been thrown equally at pro-gamergate supporters.

The nerds haven't won yet, not even close. Some nerds and elements of culture have merely gone mainstream, but nerds themselves are still pariah at large. In TV they're still black-faced by shows like The Big Bang Theory and Scorpion. Negative stereotypes still rule public perception. I would equate what's happening now to the rise of Jazz and The Blues in early America. Many whites during this time were accepting of some black musicians (enough to listen to them), but blacks themselves at large didn't benefit from the popularity of the media they'd largely created.

Are there issues in the community? Yes. There is in any, and they should be addressed reasonably. But only because that's the right thing to do, not because nerds have "the power" now and have a responsibility to do right by it as such. Most of the money and power they have is locked up by non-nerd businessmen, investors, and a select few nerds who have taken nerd labors and interests and made them profitable and mainstream.

So for the time being, while the mainstream is so bent on portraying nerds so insultingly and wrong, they should keep not listening. Nerds should solve these problems from their own ranks, and not from impartial bystanders. Nerds have gotten _better_ over the years, and almost none of it because the detractors.

<comment><USER3> A while back I was with a friend, and in the course of a conversation she referred to another person we know by "what a fucking nerd." I said "don't you call yourself a nerd?" And she replied "Well yeah, but not a _real_ nerd."

I don't play games much anymore, but I still have affection for them. I have watched the gamergate thing unfold and began to feel things I hadn't felt in a long time. It took me a little while but I finally remembered. It felt like back when being a "nerd" wasn't cool, and your peers treated you like human garbage for loving science fiction or typing code from a book into a Commodore 64.

I don't think a god damn thing has changed about people hating nerds, except nowadays you pretend you're tolerant and enlightened so you have to construct a moral failing that the nerd is guilty of even if they didn't personally do anything to you. Then they're fair game for name-calling and personal abuse. Basement-dweller neckbeard dateless permavirgin fedoralord.

</comment></comment><comment><USER4> What I'm seeing is a group of traditionally marginalised people being suddenly thrust into positions of power. And lo and behold, their behaviour is more mainstream than they're willing to admit.

And therein lies the problem. Nerd culture holds fiercely to the differences between them and the "mainstream". But what does one do when ones culture becomes the mainstream? Suddenly, caustic behaviour and bullying are no longer the eccentric responses of an oppressed people, but instead are the humdrum machinations of your average asshole.

This is not nerd culture; it's HUMAN culture, and must be dealt with as such. You don't treat those who lack empathy with kid gloves.

</comment><comment><USER5> I agree with @mindcrime that the spirit of this is right and the details have probably been implemented by an amateur.

I read an article on this topic recently which said something about people who grok what a meme is.

Let's say that you are in that club and also agree with the author in spirit.

Some trolls are paid to be disruptive because you-know-who doesn't want our geek community to be _too_ unified. Oh, and the shills are sometimes armed with big-data insights, too.

...Yes? Okay. :)

</comment><comment><USER6> I had to stop reading half way through. Whenever this type of examination is posted, it's usually that the author finally realizes he's an individual and doesn't have to adhere to any culture at all.

</comment><comment><USER7> I'm not sure I agree with all the amateur psychoanalysis stuff in this piece, but I generally agree with the overall spirit. Hacker culture / geek culture / whatever you want to call it, isn't always as welcoming and kind-spirited as it could be, and I think that's sad. It's sad on very many levels too - everytime a prospective Open Source contributor walks away because a group of morons on IRC were acting like dickheads, or anytime a kid decides to study finance instead of physics or computer science, everytime somebody (note: Female OR Male OR Trans, whatever) is harassed and abused at a conference, it makes the world a suckier place.

I wish we could get geek culture (and, to be honest, ALL human culture eventually) to adhere to a simple "Be Excellent To Each Other" principle. It's really not that hard to choose being kind over being a dick, or to choose to treat other people with respect and dignity instead of being an asshole. So why not just do it?</comment>


Ask HN: Which are the things you want the most? - <AUTHOR>

Just a question, in order to know which are the things that are valuable to us. Also... which are the things you don't want, but have to do in order to get those what you want? <comment><USER2> Valuable: Time. Friendship. Backups. Moore's law. Coffee.

Unwanted: Excess red tape. Non-deterministic bugs. Win32. IE. Reality TV. Murphy's law.

</comment><comment><USER3> I'll be materialistic in my response, because love and all that jazz obviously are up there.

I want things that do what I want them to do. For four years that meant the Mac I have now. Now that I've got it, I'll be content for years and years.

I want stuff that changes how I look at the world. That means music, books, movies, but all stuff that changes me as I consume it.

I want people who are able to tolerate me and who I in turn can tolerate because we have similar values and standards.

I want out of my life the things that don't matter to me. Right now that means a lot of my classwork in college, which is the stuff that's teaching me the least. In the future... who knows? There'll probably always be something. Hopefully there will be less every year of my life.

</comment><comment><USER4> Ok, I'll play devil's advocate.

Money.

Not so much to spend it on stuff, but rather the freedom that money buys in today's society.

<comment><USER3> You know, most of the freedom money gives you _is_ the freedom to buy stuff.

<comment><USER5> You write that like "buying stuff" is a bad thing.

It isn't. Stuff makes things possible.

<comment><USER3> Entirely agreed! I was confused by his post, which said:

 _Not so much to spend it on stuff, but rather the freedom that money buys in today's society._

And I was arguing that the freedom money buys _is_ the freedom to spend money on stuff.

</comment></comment></comment></comment><comment><USER6> Freedom to do nothing.

Everything else comes from that.

</comment><comment><USER7> Opportunities for eager learners to more faster without being hobbled by the school system.

<http://learninfreedom.org/>

</comment><comment><USER8> A woman's love <3

</comment><comment><USER9> More time. Thanks a lot.

</comment><comment><USER10> to stay healthy. everything else is minor in comparison.

<comment><USER11> What about happiness? I'd rather be dying and happy than eternally healthy and not.

(You could be including happiness in healthiness.)

<comment><USER10> something like that

</comment></comment></comment><comment><USER12> (In no particular order)

Want: Artificial Intelligence, Seamless integration between tech and humans, Technological innovation, Good health, Time, Love, Friends, Good books, Good movies

Do Not Want: Death, Extremists, Bad movies, Bad friends, Bad books

</comment><comment><USER13> I always remember what my mother once told me: "Son, whatever you do in life, treasure your family and friends. Don't do things I wouldn't be proud of and always remember- _health is greater than wealth_."

</comment><comment><USER14> Money and health.

Just about every problem I have right now (and for the foreseeable future) can be solved by the judicious application of money. Health can be improved by money, but not guaranteed by it.

Love and friends are also important, but I already have that.

</comment><comment><USER15> My supergoal: Get everyone to the top of Maslow's hierarchy. Forever.

</comment><comment><USER16> I want to experience innovation without advertisements.

<comment><USER8> if you have not noticed yet, HN is pretty heavy on the entrepreneurial spirit. That is to say we generally accept the constructs of Capitalism.

If you do not like advertisements, develop a better system that gives companies a good incentive for offering products and services to consumers AT NO COST.

</comment></comment><comment><USER17> What I want: Time (I wish I could live forever) and Happiness.

Striving for it by: Friendship, Family, Health, Savings, Entertainment

</comment><comment><USER18> A futon and a few kettlebells for the office. A power nap and a quick 15 minute workout can do wonderful things for productivity.

</comment><comment><USER19> want : time to go surfing, rock climbing, meeting friends at the bar.

do not want : development (but that's the only thing I feel good at :( ), redtape, trying to sell stuff, trying to sell myself.

</comment><comment><USER20> i want to make an impact on other people's lives, like creating a popular product or teaching them how to do things in right ways.

</comment><comment><USER21> Health and useful work that brings enjoyment.

</comment><comment><USER22> Things (material): Rocio Romero LV. Vintage Schwimm. Vintage typewriter.

</comment><comment><USER23> Valuable in no particular order:

Coffee and/or coca cola. Boyfriend. Any book by Richard Dawkins, Dan Dennett, Sue Blackmore, Peter Atkins, Stephen Hawking. Any psychological horror film like 'Session 9' or 'In the Mouth of Madness'. Formerly camels, now e-cigs for nicotine. CNN. C. Cygwin. Textpad.

Things-to-be-endured:

Diet coke. Boyfriend's spending habits. Any book positing emergent, or anti- reductionist views of any sort. Mindless slashers like 'Texas Chainsaw Massacre'. Nicotine gum that doesn't do squat. Fox News. Java. DOS prompt. Ultra-edit.

<comment><USER24> Huh. When you find just one name you don't know in a list, you know you found something interesting :) Thanks. (it was Susan Blackmore).

</comment></comment><comment><USER25> World peace</comment>


"Very bold or very dumb": data caps don't apply to ISP's own movie service - <AUTHOR> http://arstechnica.com/tech-policy/news/2011/07/very-bold-or-very-dumb-data-caps-dont-apply-to-isps-own-movie-service.ars

<comment><USER3> This is exactly what I've been fearing for a while. As soon as we go soft on the net neutrality issue, ISPs are going to take advantage. Favoring some traffic over others because they are part of an ISPs product line is ridiculous and anti-competitive.

With practices like these it will become increasingly rare for startups to be able to compete with large companies because customers won't want to spend extra money to use a startup's service.

There is a distinct difference between capping a customer's traffic after a certain point (which I don't agree with either) and favoring some traffic over another.

This is bad for everyone.

<comment><USER4> > There is a distinct difference between capping a customer's traffic after a > certain point (which I don't agree with either)

Why do you not agree with it? Is it because you feel that you have no choice in the matter, or because you think it is somehow wrong to charge for some things and not others. Once again, this is the ISP's house, and their rules. They can charge $10 billion per byte. You don't have to pay of course.

The big problem I see with this is if they deliberately slow down services like Netflix. Or if by providing their own streaming service, they are exhausting the bandwidth, thus effectively throttling services like Netflix. Otherwise, they have a natural advantage: they are transmitting data from a much closer location. Otherwise, it would be like requiring that your water company deliver you water sourced in the Alps for the same price as from your local reservoir.

EDIT: Back to data caps issues: I love them. Because now if there is any question on what I can or cannot do, there is no fuzzy wording about "appropriate network use", etc. I get 100GB a month or I do not. Anything "unlimited" is evil. My big issue is that companies like Verizon, AT&T, etc. only sell plans that are capped very low: 2GB a month is nothing for the way I use data. Give me 200GB a month and I'll pay $30-45/mo for the privilege. And while you are at it, drop the silly minutes notion. Just provide data.

<comment><USER5> I think the reason why people hate caps is because there is nonobvious how much data you have used or even are currently using at any moment. Sure you can typically log in and discover how much you have used but that workflow is well beyond what the average consumer is willing to do, even if they are technologically aware enough to know to do so.

This, combined with borderline draconian pricing schemes, makes for horror stories where someone had a $30/month plan and they end up getting charged $300 for using 2x their rate.

When you decide to use your hair dryer, you don't have to wonder if it's going to cost you $0.15 or $15.00. Electricity or water utilities are billed generally flat per-usage, the pricing schemes that come with bandwidth caps are not. So you paid $30 for X amount of data, which should indicate that the cost per data is $30/X, but if you use Y amount of data you have _no idea_ what the price of it will be; it depends on your historical usage (and that of your teenage kid or neighbor who was on your open wifi or ...)

Bandwidth caps are a perfectly reasonable concept; higher usage actually does cost the company more to provide. But it is simply _not_ the case that sending 1000 texts costs the company $10 but sending 2000 texts costs the company $100. It seems extremely likely to me that the plans are deliberately obtuse so that they can fleece customers of their money without any way of the user knowing until very far after the fact.

ISPs easily could redirect users to a page that says "You have used your quota for the month, would you like to continue at our per-byte rate of XXXX?" and block all their traffic until the user sees the page in the browser and click yes. I'm fairly certain that anyone who actually uses a capped plan would greatly prefer having the choice. They do not do this because they don't actually care about overages, they are being underhanded to trick people into using an expensive service without their knowledge.

<comment><USER6> _When you decide to use your hair dryer, you don't have to wonder if it's going to cost you $0.15 or $15.00._

If you are a commercial customer, you actually might. Often times big consumers will have tiered rates based on time of day or caps that trigger punitive rates when they are exceeded.

<comment><USER7> Not just big customers. Here in Toronto (not in Shaw's jurisdiction, but if Shaw isn't slapped _hard_ on this very soon, Rogers and Bell will do the same), we have Time-Of-Usage rates with smart meters. Our usage is still fairly predictable because there's three time bands, but we pay 5.9c/kWh at low price, 8.9c/kWh at mid price, and 10.7c/kWh at high price ([http://www.torontohydro.com/sites/electricsystem/residential...](http://www.torontohydro.com/sites/electricsystem/residential/smartmeters/Pages/TOURates.aspx)).

<comment><USER8> Same in California, with PG&E we had an gas & electricity rate that increased quite steeply if you went beyond "normal household" amounts.

</comment></comment></comment></comment></comment></comment><comment><USER9> My ideal ISP: Providing internet access is their only business. They thrive at providing as fast service as they can. If they have to have data caps that's fine; but they don't advertise unlimited unless that's what they provide. They don't inspect packets.

It seems that few of my ideal ISPs exist. My question is: why? Does the market not favor this type of ISP? Or does the other type have a competitive advantage that prevents my ideal ISP from thriving (and if so, what is it?)?

<comment><USER10> When all you do is provide a dumb pipe, you're a commodity. When you're selling a commodity, and there is any competition at all, your margins will race down to virtually nothing pretty damn quickly. No one wants to invest billions of dollars to build up the infrastructure for a barely profitable ISP.

<comment><USER11> >No one wants to invest billions of dollars to build up the infrastructure for a barely profitable ISP.

Google does.

<comment><USER12> Providing internet access is not Google's only business.

</comment></comment></comment></comment><comment><USER13> It's not bold or dumb in Canada. Expect to see similar plans from Rogers and Bell very soon. The Canadian telecom industry, backed by the CRTC, has operated as a public cartel for a very long time now. These are the same folks responsible for giving us the highest cell phone rates in the world, no such thing as nation-wide long distance plans, maximum data caps that dropped from 95GB to 80GB over the past 5 years (at least on Rogers), and basic cell phone plans don't even come with call display or voice mail (those are extra features).

Unless a government rolls in and breaks the ISP portions off into independent companies I don't see anything on the horizon stopping this syndicate.

</comment><comment><USER14> I'm in mixed minds about this.

For as long as I remember, Australian linux users have been able to download isos from their ISPs own mirrors, without it counting against their cap. Which makes total sense, because it's internal to the ISPs network, so it costs them zero in peering fees.

It's hard to argue that this is a bad idea.

Now Shaw do the same thing, and it's .. awkward. It smells anticompetitive & self-serving. But it's essentially the same thing.

<comment><USER15> iinet (at least) also gives free quota to 3FL gaming servers, as well as a large portion of Steam downloads. Which I've definitely never had a problem with it (still being able to play games when capped = :D)

</comment></comment><comment><USER16> This is what data caps have been about all along, at least in Canada - <USER2> sincerely hope no one is surprised. I'm just a bit surprised to see Shaw leading the charge, and not Rogers or Bell.

This is what happens when all the major ISPs in a country also happen to be the major TV companies. There's no reason to expect them to just roll over and die while the Internet eats their lunch.

<comment><USER7> Shaw is smaller than Rogers or Bell. If they can get away with it, you can bet that Rogers and Bell will be chasing quickly behind.

Stephen "Friend to Big Businesses and Media Conglomerates" Harper won't bat an eyelid about how bad this is for consumers and competition.

</comment></comment><comment><USER17> Comcast appears to be aware of the net neutrality concerns since they don't give their Xfinity streaming service any preference[1]. Their VOIP, however, doesn't count against your quota. They claim that is because it uses different infrastructure.

1: [http://customer.comcast.com/Pages/FAQViewer.aspx?seoid=Frequ...](http://customer.comcast.com/Pages/FAQViewer.aspx?seoid=Frequently- Asked-Questions-about-Excessive-Use#otherusage)

<comment><USER18> This is actually an interesting point - Shaw's VOIP service similarly doesn't count towards cap. As mentioned in the update to the ArsTechnica article, the movie service not counting is apparently because it is delivered via different infrastructure -

"Shaw's existing video-on-demand QAM cable infrastructure. When users access Movie Club through a computer, they will access an IP-based version of it delivered over the Internet—and this will affect monthly data caps."

but surely the VOIP phone data is delievered over the internet...

<comment><USER19> The VOIP data is probably not delivered over the internet for local calls. The calls probably come out of the cable network and hit a softswitch in the same city. For local calls, they probably have a TDM interface (T1s/DS3s etc) to the incumbent carrier and possibly other CLECs too.

</comment></comment></comment><comment><USER20> This has been happening in Australia for a little while now. 2 of the biggest providers have struck deals with all sorts content providers (IPTV, music, etc) to provide unmetered access. Most people see this as a good thing (data caps are pretty high here, reasonably priced for 100GB/month), but as more and more content starts coming via the internet, 100GB won't last very long.

Here are the 2 "freezone" or unmetered offerings by bigpond and iinet in Australia <http://www.bigpond.com/unmetered/> <http://freezone.iinet.net.au/> (Freezone Partners at the bottom).

Very clever..

</comment><comment><USER21> At college I worked close to the networking department. It was common knowledge that whenever a computer went to do a speed test, the user would get more bandwith, thus showing a higher speed. It was also the case that faculty got more bandwith during the day. The internet was shoddy and this was just 2 years ago..

</comment><comment><USER22> Taking this even further, what if an ISP partnered with Google/Facebook/Twitter/whatever to expose their services on an "internal" box, and thusly provide an extreme "basic internet" ISP package that didn't allow you to leave the ISP's network?

Alternatively, should ISPs be charging for P2P traffic that stays within the network?

<comment><USER23> There are already "basic packages" like that where I live: free access to Facebook using Facebook Zero. Also BlackBerry access packages that only give you email & chat / Facebook access only, without web browser access to the entire Web.

</comment></comment><comment><USER24> Slightly offtopic perhaps, but would IPv6 + multicast use substantially lower the cost for ISPs and Content Providers ?

By that same token, wouldn't that be a reason to push IPv6 more into the market place as everybody wins in the end ?

<comment><USER25> Multicast doesn't (currently) work in the Internet due to router state cost, and is orthogonal from IPv6. In a hypothetical Internet where multicast works and is free, I could see pirates adopting it but anybody who can afford to pay would probably stick with unicast — bandwidth isn't _that_ expensive these days.

<comment><USER24> Merci.

</comment></comment></comment><comment><USER26> __This article is incorrect. __

<https://twitter.com/#!/ShawInfo/status/91924351456260096>

<comment><USER27> If you watch shows through their set top box it doesn't count towards any limit. So, kind of like standard cable going to a TV, where the TV channels are on a dedicated 'connection' to the provider and watching TV doesn't utilize the broadband connection.

I'd like to know if their set top box utilizes the same pipe and throughput going to your house, and if watching a show through their set top box would diminish throughput speeds for others on the line. If it does, then that's bogus. If their box utilizes a separate dedicated connection to Shaw, then that's fine and I say fair.

However, in practice, it's hard for average folks to understand why Shaw's box doesn't count towards a limit when the Apple TV, Netflix-enabled Blu-ray box or whatever DOES count towards the limit. But I'm not sure Shaw is in the wrong here if their box has a dedicated 'line' to them.

<comment><USER28> It utilizes the same pipe insofar as it uses the same cable HFC plant/infrastructure to deliver the signal to your home. On the wire however typically VoD services on set tops do not use the same DOCSIS channels as cable modems delivering IP video via Netflix, Hulu, etc. Cable VoD typically is just a block of regular video channels. Your set top requests a program and one of those video channels is allocated for this program. It's a bit old fashioned but it works. It is however possible to do this over DOCSIS which starts to blur the lines.

</comment></comment></comment><comment><USER29> This thing is very common in India. Check out <http://emergic.org/2009/02/17/we-versus-vodafone/> <http://emergic.org/2009/02/18/we-versus-vodafone-day-2/> <http://emergic.org/2009/02/18/we-versus-vodafone-day-2/>

</comment><comment><USER30> I understand the argument that traffic from your current network is cheaper and therefor enables cap-less ISP services but I think it's nieve to believe these ISPs don't intend to control as much of your purchase and viewing activity as possible. Cable companies do this now with traditional cable and telephony services and it makes them a fortune. Any ISP owner worth their salt would always prefer to have an unfair advantage instead of an even playing field. Capping your competition is an unfair advantage and too good to pass up if legal.

First it's the direct media (movies, music, etc), then it could be gaming networks, VOIP services, cloud file storage and so on. It's entirely conceivable that we would be financially forced to use the lower quality services of an individual ISP instead of a higher quality alternative. Then the real competition would be ISPs fighting over physical turf while online services look to parter with those ISPs instead of focusing on innovative products.

</comment><comment><USER31> I'm afraid this demonstrates how ad-hoc the definition of net neutrality is. No packets are being blocked; none are being slowed down. The ISP is not charging any content provider a special rate.

(If having the content "homed" on the ISP's network is a problem, then any CDN would be a problem.)

I am not saying that the ISP isn't taking advantage for their own benefit. I am not saying it's not shady.

I _am_ saying that the behavior is not a violation of any previous technical definition of neutrality – maybe the "spirit" of it, but technologists don't believe in spirits, one hopes.

<comment><USER32> _No packets are being blocked; none are being slowed down._

Sure they are. If I try to watch _n_ GB of movies on NetFlix, then the last _n-m_ GB get blocked, whereas on the ISP's service, none do (where _n_ > _m_ = data cap).

 _maybe the "spirit" of it, but technologists don't believe in spirits, one hopes._

This is a pretty silly equivocation.

</comment></comment><comment><USER33> We've had things like this in NZ for several years now

</comment><comment><USER34> This is what net neutrality was all about. They said it would never happen...

</comment><comment><USER35> How is this not a violation of Sherman anit-trust legislation?

Sometimes metaphors for the internet/cyber world don't map well to real worl past examples. But this instance aligns very well to Standard Oil's transport rebates for their own oil. Oil is to content as railroads are to networks.

IANAL but until the US starts enforcing anti-trust legislation this kind of thing will continue to happen. Net neutrality doesn't stand a chance against these kinds of behemoth ISPs and their lobbyists.

<comment><USER36> Because they're in Canada.</comment></comment>


Know Your Twitter Followers with Machine Learning - <AUTHOR> https://blog.monkeylearn.com/know-followers-machine-learning/ <comment><USER2> From their on documentation on the "Keyword Extractor" module:

 _This keyword extraction algorithm employs statistical algorithms and natural language processing technology to analyze your content and identify the relevant keywords._

The source code doesn't seem to be available, but presumably by "statistical algorithms and NLP" they mean TF-IDF.

Question is -- is this what they mean by "machine learning"?

And more to their point -- do their investors know what's going on here?</comment>