Apple iOS 7 surprises as first with new multipath TCP connections - <AUTHOR> http://www.networkworld.com/news/2013/091913-ios7-multipath-273995.html <comment><USER2> That's really awesome. I'd like to know, though, whether the MPTCP is integrated into the mainstream API, or a special case for Siri. It's normal that only Siri generates MPTCP traffic since it requires both endpoint to support and enable multi-path. However, multi-path TCP is compatible with original TCP stack so I don't see a reason it can't be built into the general purpose API.

Could somebody who has developer account that can deploy to real device verify it by making another MPTCP-compliant[0] endpoint?

[0]: [http://multipath- tcp.org/pmwiki.php/Users/HowToInstallMPTCP](http://multipath- tcp.org/pmwiki.php/Users/HowToInstallMPTCP)

<comment><USER3> I suspect that this is done primarily to enhance Apple services like Siri, iMessage, and the like (anything that touches the iCloud), since Apple controls both end points.

<comment><USER4> Maybe this is why I always find my iMessages to be working, even when the office wifi is on the fritz?

<comment><USER5> I've noticed this as well, pre iOS 7.

</comment></comment></comment></comment><comment><USER6> Awesome to have. I know Glass can't even understand my speech when it loses internet connectivity so devices are becoming really sensitive to connection loss. Meanwhile on my phone my LTE is often better than my WiFi so it would be nice to have this and not have to turn off my WiFi to use it.

</comment><comment> void-star ProTip: when whiting out your wireshark packet captures, always remember your hexdump:

dst=220.127.116.11

        $ whois 184.108.40.206

        ...

        NetRange:       18.104.22.168 - 126.96.36.199
        CIDR:           188.8.131.52/8
        OriginAS:
        NetName:        APPLE-WWNET
        NetHandle:      NET-17-0-0-0-1
        Parent:
        NetType:        Direct Assignment
        RegDate:        1990-04-16
        Updated:        2012-04-02
        Ref:            http://whois.arin.net/rest/net/NET-17-0-0-0-1

        OrgName:        Apple Inc.
        OrgId:          APPLEC-1-Z
        Address:        20400 Stevens Creek Blvd., City Center Bldg 3
        City:           Cupertino
        StateProv:      CA
        PostalCode:     95014
        Country:        US
        RegDate:        2009-12-14
        Updated:        2011-03-08
        Ref:            http://whois.arin.net/rest/org/APPLEC-1-Z

        OrgTechHandle: ZA42-ARIN
        OrgTechName:   Apple Computer Inc
        OrgTechPhone:  +1-408-974-7777
        OrgTechEmail:  email@example.com
        OrgTechRef:    http://whois.arin.net/rest/poc/ZA42-ARIN

        OrgAbuseHandle: APPLE11-ARIN
        OrgAbuseName:   Apple Abuse
        OrgAbusePhone:  +1-408-974-7777
        OrgAbuseEmail:  firstname.lastname@example.com
        OrgAbuseRef:    http://whois.arin.net/rest/poc/APPLE11-ARIN

        RTechHandle: ZA42-ARIN
        RTechName:   Apple Computer Inc
        RTechPhone:  +1-408-974-7777
        RTechEmail:  email@example.com
        RTechRef:    http://whois.arin.net/rest/poc/ZA42-ARIN

        ...

EDIT:

also

        subject=/184.108.40.206.4.1.318.104.22.168.3=US/22.214.171.124.4.1.322.214.171.124.2=California/businessCategory=Private Organization/serialNumber=C0806592/C=US/postalCode=95014/ST=California/L=Cupertino/street=1 Infinite Loop/O=Apple Inc./OU=Siri/CN=guzzoni.apple.com
        issuer=/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)06/CN=VeriSign Class 3 Extended Validation SSL SGC CA

<comment><USER2> I don't understand. What does dst being apple's IP imply? It's connecting to Siri server which is supposed to be an Apple's server. Am I missing something?

<comment> void-star Yea, i'm not sure why they bothered to try to obfuscate the dst address at all, the article mentions siri...

</comment></comment></comment><comment><USER7> I'm not sure if MPTCP is great or if it's an over-engineering that stuffs brand new abstraction into the socket layer.

See, previously when open a connection with an unbound socket, it would always bind it to the local IP that points at the default router. If you had multiple interfaces and you wanted a specific local IP, you'd bind to it explicitly before connecting. But it has always been that a connected socket is bound to exactly one IP. If you want to use two IPs for connecting out, you will have two sockets.

With MPTCP the socket can now end up being bound to two or more local IPs. So effectively it changes the abstraction of the socket model to be more of a collection of (conventional) sockets. Doesn't it sound like something that could be done in the userspace? Sure, it does :)

Though on the other hand, networking code in the kernel has access to a lot more information about the state of the network, so it can make better decisions and quicker. For example, if there's an interface with no default route going through it, the userspace solution may still try and use its IP to try and connect out. The userspace will also need to monitor the routing table for changes and re-try connecting out in response ... so MPTCP makes more sense if you think about it, but a userspace solution is much easier to implement and deploy.

<comment><USER8> They have a handle on this stuff:

[https://datatracker.ietf.org/doc/rfc6897/?include_text=1](https://datatracker.ietf.org/doc/rfc6897/?include_text=1)

Basically if you bind an address, MP is disabled. If not, then MP will happen by default. If you had code that was doing MP with multiple connections before, it was binding interfaces on multiple sockets and will still work. The idea is that MPTCP is desirable and should be used if possible. Also you get new sockopts for handling the MPTCP stuff like TCP_MULTIPATH_ENABLE and TCP_MULTIPATH_ADD if you want to control the MP stuff in MPTCP.

</comment></comment><comment><USER9> I'm not a networking expert, but does this require system changes/support on the other end of the connection?

<comment><USER10> No, I don't think so. Everything seems to imply that no modification is needed at the application layer.

Additionally, one of the researchers goals behind the technology is to support unmodified applications. Here's a presentation from the team's website [http://multipath-tcp.org/data/MultipathTCP-netsys.pdf](http://multipath- tcp.org/data/MultipathTCP-netsys.pdf)

<comment><USER2> If iOS is exposing the API, I believe it should at least provide a parameter whether it should be a MPTCP or a classic TCP. Sometimes you don't need that reliable trasmission; using MPTCP would cause unnecessary cellular data usage.

<comment><USER11> Multipath TCP could be used for smoothly handing over from the slower, more expensive, less-reliable cellular system, to the faster, cheaper, more reliable WiFi.

Without multipath TCP, you have to drop and restart each connection, which in some applications can cause hiccups, latency, or even complete loss of state.

Of course, all of this depends on server-side MPTCP support as well, which most systems don't ship with out of the box.

<comment><USER2> Right. What I'm saying is that, by keeping alive both path, you need to use some traffic. Although when there's WiFi available, you are primarily using WiFi, there are traffic going through cellular network in order to keep the path alive.

<comment><USER12> would be really _cool_ if slower / more expensive connections could ultimately be drained, and the whole data transfer just switches over to a single more faster connection.

edit-1: note that this is not the _same_ as subflow 'deletion' that would happen if an access mechanism was not available at all.

edit-2: section-3.4 of the mptcp paper indicates that FIN has a more limited 'no more data on this subflow' semantics. so, in _theory_ it should be possible to do just that. would be so much better to not go the ANDSF route at all ;)

<comment><USER2> Hey! I didn't go into that deep! So if FIN is used in a subflow, does it terminate that path? Is it possible to wake this path up again?

<comment><USER12> the shorter answer first: i don't think there is any possibility of resurrecting a subflow once it is gone.

longer one: with mptcp, there needs to be some way to distinguish connection- teardown vs subflow-teardown. with, RST the subflow is terminated. FIN is more subtle (since it occupies the sequence space in normal tcp) however. FIN is handled via an explicit DATA-FIN within TCP option to indicate the end of data-sequence-space (which maps subflow sequence numbers to data sequence numbers in TCP options). gracefully terminating a connection, thus involves sending DATA-FIN on all subflows together with a FIN.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> So does this mean if I'm connected an adhoc eyefi wifi network and want to share whatever pic I took over the internet, I don't have to turn off wifi to do it?

If so, this is very awesome. It makes things like the Sony QX camera probably x10 more seamless.

<comment><USER14> That's basically how AirDrop works on recent Macs and recent iOS devices and why they require more recent wifi hardware to make it happen than the OS supports generally.

</comment></comment><comment><USER15> Cool. So it's like [http://mosh.mit.edu/](http://mosh.mit.edu/) mosh for TCP

</comment><comment><USER16> Does the phone actually send the TCP packets multiple times? Then it would certainly put more stress on the network. Does anybody know how fairness compared to non-multipath TCP stacks is achieved?

<comment><USER11> Multipath TCP sends packets over multiple paths; multiple different connections, such as cellular and WiFi. It doesn't repeat the packets, unless one of them is dropped. It can be used for several purposes; aggregating bandwidth between the paths, taking advantage of the bandwidth of both connections. It can be used for reliability. And it can be used for transparent handover of connections, where you may walk out of your house and switch over from WiFi to cellular seamlessly.

LWN has a good article on it: [https://lwn.net/Articles/544399/](https://lwn.net/Articles/544399/)

</comment></comment><comment><USER17> Am I correct in assuming that MPTCP could potentially make snooping on in- transit data somewhat more troublesome? All potential pathways would need to be monitored simultaneously in order to reconstruct the application-layer stream.

On the other hand, all cross-Atlantic traffic is likely to pass through the same few undersea cables, regardless of the "first 50 miles" are covered (3G/WiFi), so the net effect on snoop-ability is probably null.

<comment><USER18> > On the other hand, all cross-Atlantic traffic is likely to pass through the > same few undersea cables, regardless of the "first 50 miles" are covered > (3G/WiFi), so the net effect on snoop-ability is probably null.

Wouldn't the traffic be split over multiple IPs (not all of which might be known), and wouldn't latency sometimes cause them to be out of sequence? It's definitely not as simple as "monitor this singular connection", though of course it's still feasible.

<comment><USER17> Indeed, on the surface, the multiple IPs would increase the amount of obscurity. Can anyone familiar with the protocol clarify if there are any other header elements which reveal that the packets belong to the same abstract TCP connection?

</comment></comment></comment><comment><USER19> What if you do not want to use your cellular connection when wifi is enabled. Will you have to start disabling cellular?

<comment><USER20> That is in theory exactly what this allows you to do. e.g., if you're watching some streaming video while outside, then come home to wifi, the connection will switch to wifi.

<comment><USER19> It gives you the potential to switch but it isn't explained in the article how iOS7 uses this potential.

Does it automatically kill the cellular data connection and only use the Wifi if wifi is available? Or does it keep both open and use them both?

<comment><USER21> As far as I understand, it uses the least congested path available. In theory, this would mean it would prefer the wifi connection.

<comment><USER22> > As far as I understand, it uses the least congested path available.

IOW, it uses _at least some_ cellular data _even when_ connected to WiFi, because otherwise it wouldn't be able to determine which path is the least congested.

</comment></comment></comment></comment></comment><comment><USER23> Does this mean that if all end points support this, connections could be split all over the place?

A 10 IP round robin setup, if I'm correct, could show stats for 10 different locations. Or does it work differently?

<comment><USER2> All 10 IPs need to be bind on your local NIC(s). If you can get those 10 IP(s), they are mostly registered to your location already I guess?

</comment></comment><comment><USER24> "First" apart from the three implementations which were released before it - including one for linux. So that'd be fourth then...

<comment><USER25> Developers running a modified Linux kernel does not a deployment of a technology make.

</comment></comment><comment><USER26> an enabler for ad-hoc, peer-to-peer wireless networks by providing the additional resiliency of tcp apps simultaneously leveraging (n) network interfaces and distributing traffic?

</comment><comment><USER27> Does this mean that I won't drop connections when I leave Wifi range and switch to 4g, which happens literally EVERY TIME I LEAVE WORK OR HOME? :)

</comment><comment><USER28> Would be great if FaceTime Audio can take advantage of MPTCP for seamless handoffs.

Another packet to chip away at our Tiered Data Packages.

</comment><comment><USER29> Android doesn't even support adhoc wifi.

<comment><USER11> It supports acting as a wifi hotspot. I've never tried it, but does that not work for local area networking with data off?

Also: [http://multipath-tcp.org/pmwiki.php/Users/Android](http://multipath- tcp.org/pmwiki.php/Users/Android)

The nice thing about Android is you get the source. If you want, you can add MultiPath TCP to Android.

<comment><USER2> I'd still love ad-hoc better. HotSpot allows you to share 4G through WiFi, but it doesn't scale. The hotspot because AP, and that's the center of the network. On contrast, ad-hoc can scale to thousands of nodes across miles by using multiple hops. Also, ad-hoc is a more distributed model.

I never understood why ad-hoc mode was disabled by driver. AP mode (hotspot) is still available; users can still share their 4G connection without being approved by their carrier.

<comment><USER11> Ad-hoc networking on wifi generally only supports point-to-point links, not routing, unless you use another routing protocol on top of it like BATMAN Advanced.

I'm not sure why connecting to an ad-hoc network is disabled in Android, but it's certainly never been anything that's caused me problems.

<comment><USER2> Right. But I supposed by hotspot/ad-hoc, we were talking about the link layer possibilities only. hotspot is also about MAC layer only as well. IP runs on top of that. However, the difference is that, in AP/client mode, all nodes need to associate with and be able to talk to an AP; while in ad-hoc mode, every node is equivalent and they can be as distributed as they want. For ad- hoc routing, there're olsrd, batman, etc. They are really cool :-)

We used to use Android devices to test different scenarios of ad-hoc applications. But none of current mainstream devices support ad-hoc mode any more. On contrast, iOS devices can still join (although not create) an Ad-Hoc network, which is ... ironic.

</comment></comment></comment></comment></comment><comment><USER30> So this is an application level approach to the same things as Mobile IP, MPPP, etc?

</comment><comment><USER31> Does this means it will allow me to use both Comcast and Uverse at the same time?

</comment><comment><USER32> First? OpenBSD and the Linux kernel have had this integrated for years.

<comment><USER11> Integrated? I don't know about OpenBSD, but in Linux it is not in mainline. There is an experimental fork of the kernel supporting it, but it hasn't been proposed for merge upstream yet.

Sure, there has been development going on for years, but there are no major distros you can download and use it out of the box.

The point is, this is the first shipping product using it in the wild, as opposed to experimental implementations used in research and development.

Note that this is not multipath routing (which takes place at the IP layer, and requires involvement in routing protocols that end devices don't usually have access to), nor is it channel bonding (which occurs at the ethernet layer).

<comment><USER32> I stand corrected, is anyone trying to merge it?

EDIT: No I don't.

<comment><USER11> Not sure, there's no indication that I could find of a roadmap to merge on the Linux MultiPath TCP web site: [http://multipath-tcp.org/](http://multipath- tcp.org/)

<comment><USER32> "The current implementation of Multipath TCP in the Linux kernel supports RFC6824 and includes this fallback mechanism." - [About Measures][0]

0: [http://multipath-tcp.org/pmwiki.php/Users/AboutMeasures](http://multipath- tcp.org/pmwiki.php/Users/AboutMeasures)

Please don't say things so scary without looking into it.

<comment><USER11> When they say that, they mean in their fork of the Linux kernel: [https://github.com/multipath-tcp/mptcp](https://github.com/multipath- tcp/mptcp) not in the official upstream kernel from Linus [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux....](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/) nor any of the mainstream distro kernels.

You can check this for yourself. Just take a look for the MPTCP patches in Linus's kernel. You won't find them. Here's my kernel git repo; origin is Linus's repo, mptcp is the MPTCP development repo:

      $ git log --pretty=oneline origin/master..mptcp/mptcp_v0.87 | wc -l
           2841

As you can see, there are 2841 patches in the mptcp_v0.87 branch that are not in the kernel repo, all the way back to the original shim6 patch that was used to start building MPTCP on top of shim6, which was a proposal for multi-homed IPv6 (MPTCP now works on top of IPv4 as well).

Note that when you look at the "installing on Linux" instructions, they mention running it in a virtual machine.

This is not terribly uncommon for an ambitious research effort; work on an out of tree fork for a while, and then when it's ready, propose it for inclusion into the upstream kernel. For a recent example, see Bcache [http://bcache.evilpiepirate.org/](http://bcache.evilpiepirate.org/), which was developed out of tree for several years before being merged a few months ago.

> Please don't say things so scary without looking into it.

Why do you find this scary?

And why do you think that I didn't look into this?

<comment><USER32> Ahh, the way you said it made it sound like the first bit was you talking out your ass, assuming that they hadn't merged any of their work by a few pages on their site.

I am currently on a very restricted link, so I was not able to check the commit logs.

</comment></comment></comment></comment></comment></comment></comment><comment><USER33> I wonder what Apple is using on the server side that supports MPTCP?

<comment><USER34> They seem to be using Citrix Netscaler, which has supported MPTCP for a little while:

[http://blogs.citrix.com/2013/05/28/maximize-mobile-user- expe...](http://blogs.citrix.com/2013/05/28/maximize-mobile-user-experience- with-netscaler-multipath-tcp/)

Disclaimer: I'm one of the authors of MPTCP, but I don't have any inside information from Apple, beyond what nmap tells us.

</comment></comment><comment><USER35> is this a good way to minimize the likelihood of MITM attacks?

<comment><USER11> Probably not. A dedicated MITM attacker could simply strip off the MultiPath TCP options from the initial connection, so it would act merely as a regular TCP connection in that case.

Good crypto is a much better solution to minimizing the likelihood of a MITM attack. MultiPath TCP is design to provide speed, reliability, and mobility of TCP connections.

</comment></comment><comment><USER36> Except it already existed in the Linux kernel for years, or am I missing something? The article even says so itself.

<comment><USER37> > am I missing something?

The first phrase of the article maybe?

> Apple's iOS 7 is the _first large-scale use_ of a newly-minted Internet > protocol, called multipath TCP.

(emphasis mine)

The linux implementation is a third-party module with, as far as I can tell, little penetration so far. And the article linked here seems to have been partially cribbed from said module's implementors (the wireshark screenshot was lifted straight): [http://perso.uclouvain.be/olivier.bonaventure/blog/html/2013...](http://perso.uclouvain.be/olivier.bonaventure/blog/html/2013/09/18/mptcp.html)

<comment><USER36> Android runs Linux. Thanks for the unnecessary downvote. Want me to lookup the charts for you? Also there are millions of people running Linux (about 1.3% of all computer users if I remember correctly).

<comment><USER37> > Android runs Linux.

For the second time, since you apparently missed it the first time around, MPTCP is a third-party module, it is _not_ part of the mainline kernel, it requires using the developers's kernel fork. Do you have any evidence that Android is doing so?[0] Then Android running Linux is irrelevant.

> Thanks for the unnecessary downvote.

I didn't downvote you.

> Want me to lookup the charts for you?

No, I'd like you to read what people write.

> Also there are millions of people running Linux (about 1.3% of all computer > users if I remember correctly).

That's completely irrelevant to the thread because _they are not running an MPTCP-patched kernel_.

[0] I'll help you, the MPTCP project has a page pointing out to Android ports of the MPTCP module: [http://multipath- tcp.org/pmwiki.php/Users/Android](http://multipath- tcp.org/pmwiki.php/Users/Android) which include a rebuilt kernel to include MPTCP as well as patched connection manager, network daemon and iproute2. Doesn't sound like base Android supports MPTCP to me.

<comment><USER36> > MPTCP is a third-party module, it is not part of the mainline kernel, it > requires using the developers's kernel fork.

Oh I get it now, that explains. I stand corrected. Sorry for being so bitchy about it, I just thought they were saying Linux was not widely used and hyping iOS7 instead.</comment></comment></comment></comment></comment>


How the Rise of Apple is Just Like the Rise of Mammals - <AUTHOR> http://www.technologyreview.com/blog/mimssbits/26810/ <comment><USER2> A lot of things are like this, such as how much of what Amazon sells, Kindles are at one end and obscure books, dvds are at the other end, it's an often quoted phrase for online selling. It's a flipped round (but still related) version of <http://en.wikipedia.org/wiki/Long_Tail></comment>


Why IntelliJ IDEA is hailed as the most friendly Java IDE (many screenshots) - <AUTHOR> http://blog.jetbrains.com/idea/2016/03/enjoying-java-and-being-more-productive-with-intellij-idea/ <comment><USER2> "Friendly" is not the word I would use. Powerful, sure. But IDEA breaks quite a few universal GUI concepts and that takes a bit to get used to.

For example, Ctrl-w is a very important keybinding on IDEA, one that I use all the time (it expands the selection to the enclosing expression). It's literally wired in my brain now. To the point that I now use it in Eclipse as well and I even started using it in other places (Sublime, etc...) and... closing the window as a result. Very annoying.

Another one is that Ctrl-n sometimes creates a new file (expected) and sometimes... something completely different depending on your current window. Again, not friendly. Optimized for development and a life saver on the long run, for sure, but it's fairly user hostile.

<comment><USER3> The non-standard default keyboard shortcuts bug me as well, but on the plus side they can be rebound.

The thing that frustrates me most in IntelliJ is that all of the dialog windows are modal for no apparent reason. Why can't I focus the main window or at least interact with it to change tabs, select text, etc when I have dialogs open?

"Find in Path" is a particularly obnoxious example: it's fairly common that I want to search for a string fragment, so I open the search dialog and set up my search context, then try to select text to copy as the search term, but I can't, so I have to start over.

I want to be able to interact with the editor at all times, though I could see locking it during complicated refactors to keep me from changing code while the IDE is trying to change it too (only while a progress bar dialog is visible).

Modal windows should be the exception, not the rule.

\---

To be clear I love IntelliJ. While I prefer simpler editors in many situations, I can't see myself going back to anything else for medium-to-large JVM projects (Scala especially). The modal niggle and a few other minor usability issues are small blemishes on an otherwise great IDE.

<comment><USER2> > The thing that frustrates me most in IntelliJ is that all of the dialog > windows are modal for no apparent reason. Why can't I focus the main window > or at least interact with it to change tabs, select text, etc when I have > dialogs open?

Funny, as soon as you said that, I nodded and I immediately thought "For example, the universal search dialog should definitely not be modal". And then you follow with...

> "Find in Path" is a particularly obnoxious example

Totally agree and I'm surprised I missed it. Modal dialogs are not user friendly (and very old school UI).

</comment></comment></comment><comment><USER4> About a year with eclipse and nearly two with IDEA now.

In terms of overall usability, speed, and stability IDEA is incomparably better. Yes, there are a few minor things that eclipse does better/IDEA can't do (so I keep reading). But this is hugely overshadowed by the fact that IDEA is a high-quality, well-supported professional-feeling _product_. In comparison, eclipse looks, smells, and acts like a kludgy, bloated, long-lived open source _project_.

The main important difference is that eclipse is _free_ , and thus some folks seem to really go to bat defending it. There is a certain powerful frugality ethic among developers.

But really, if you're not going to get bent out of shape about spending a few bucks for a piece of software you spend many of your waking hours using, there is no serious comparison.

<comment><USER5> > IDEA is a high-quality, well-supported professional-feeling product. In > comparison, eclipse looks, smells, and acts like a kludgy, bloated, long- > lived open source project.

Proprietary, closed source development vs. Open Source software development in a nutshell.

I'm really glad a friend recommended IntelliJ IDEA to me. It's a great product. Having used both Netbeans and Eclipse on a rather powerful machine, the UI would lag. I don't like to wait for computers to finish computing things when I'm programming pretty much in just a text editor ("writing code mode")...which brings up another point - Atom is not a great text editor either because it is so UI laggy it slows down development.

<comment><USER6> The core of IDEA is open source: [https://github.com/JetBrains/intellij- community](https://github.com/JetBrains/intellij-community).

The Ultimate Edition is worth the money, but the whole system is just a bunch of very well built plugins atop the CE.

</comment></comment></comment><comment><USER7> Agreed. Switched to IntelliJ about 4-5 months ago. Haven't looked back since. Interestingly, what caused me to look at IntelliJ wasn't a lack of features in NetBeans, but rather the fact that still today NetBeans doesn't work properly on a retina MacBook Pro. __

 __To elaborate, on a MBP Retina, you 'll find that the UI lags slightly if typing fast, especially if a lot of syntax highlighting is happening on the screen. It does not happen if you are using NetBeans on an external monitor. The NetBeans team claims it's a Java issue, so in the end I just didn't want to wait anymore, and I downloaded IntelliJ.

<comment><USER8> Ehem... As far as I remember, IntelliJ is also programmed in Java, so about that Java issue with Retina...

<comment><USER7> Agreed. Never bought the argument from the NetBeans guys.

</comment></comment></comment><comment><USER9> The only thing I don't like about IntelliJ vs Eclipse is unit testing. Because Eclipse eagerly compiles everything with its special compiler it seems to have a much faster startup time for unit tests. In fact with Eclipse I use JUnit as a Java repl because you can test a single method. Also I hate how I can't configure IntelliJ's gutter size. It feels massive. Other than that IntelliJ is far superior.

As for dark theme and theming Intellij/Eclipse both have their quarks (Eclipse being far more quirky).

Here is a screenshot of a personal port of the Atom One Dark theme (I love that theme) to both IntelliJ and Eclipse (left and right respectively): [http://imgur.com/Myo4KxM](http://imgur.com/Myo4KxM)

IntelliJ One Dark Theme: [https://gist.github.com/agentgt/bf2271786c250e86ab19](https://gist.github.com/agentgt/bf2271786c250e86ab19)

Eclipse One Dark Theme: [https://gist.github.com/agentgt/fcaf75eb8acf92e08926](https://gist.github.com/agentgt/fcaf75eb8acf92e08926)

<comment><USER10> > Because Eclipse eagerly compiles everything with its special compiler it > seems to have a much faster startup time for unit tests.

You can configure IntelliJ to behave similar, the option is disabled by default. Its the "Make project automatically" option in the "Build, Execution, Deployment -> Compiler" settings window.

Also, IntelliJ can use ejc if you like, the "Build, Execution, Deployment -> Compiler -> Java Compiler" window, the "Use compiler:" option.

<comment><USER9> I tried that before but its still faster in Eclipse by 3/4 of a second (I was wrong about being just the compiler). Its as though Eclipse doesn't fork a new Java process.

</comment></comment></comment><comment><USER11> ...according to the marketing manager for the product ;)

<comment><AUTHOR> With all respect, I don't I understand your point. FTR, I'm also a developer in past and in present. If you have an argument in regard to actual points shared in my article, please share it with others.

<comment><USER12> Reasons I prefer eclipse:

The git "commit and push" workflow is less ergonomic than eclipse's - you have to wait for it to perform the commit and then ok another dialogue to do the push, rather than just hitting "commit and push" and letting it happen in the background.

There's no obvious way to search within a directory. I don't want to search everywhere which is the only option I see in ctrl-A. I want to be able to right click or similar on a directory in my project and search just in that directory.

I can't tell how to reorganize the UI. In Eclipse I have the Window > Views menu. In IntelliJ panels seem to appear and disappear arbitrarily as I invoke particular actions and I have no idea what rules it follows or how to control it. Edit: aha, there's a weird square in the very bottom left corner: having clicked that the tabs for the panels have appeared which makes it much easier.

No save button means I can't tell the IDE when _not_ to try to compile. This is important when working on complex code (particularly Scala) and I know compiling it is going to take a few seconds of sluggishness.

The Scala presentation compiler (admittedly not really the subject of this article) has too many spurious errors (most prominently one I reported as SCL-9700).

Most importantly of all, continuous building simply isn't reliable enough. In eclipse, if I've hit save I can tell when the build has finished, and if the build has finished and there are no problems in the problems view then I am 100% confident that my code actually compiles. This simply isn't the case in IntelliJ (e.g. after renaming a class it won't necessarily complete the rebuild and so errors don't always show up until after you deliberately make).

<comment><USER13> > There's no obvious way to search within a directory.

On OSX at least: CMD+SHIFT+F brings up the Find dialog. Scope defaults to Whole Project (ALT+H) but you can change it to Directory (ALT+O) which seems to default to the directory of the currently selected file. (Or maybe Scope actually defaults to the last one you used.)

I'm wondering what version of IDEA you tried that wasn't this way?

I don't run into compiler issues too often, but I also don't use shapeless or scalaz so I wouldn't be surprised if more complex type signatures give IDEA trouble. I have noticed a drastic improvement with the Scala support since IDEA 13 or so.

<comment><USER14> I use JetBrains Webstorm, and on that hitting CMD+SHFT+F creates a search local to the selected folder in the directory tree. Seems pretty intuitive to me, but finding files themselves, as opposed to string constants and the like, is actually the more difficult thing Ive yet to figure out.

<comment><USER12> Ctrl-Shift-N gets you an "open file" dialogue that does slightly fancy filtering/searching (e.g. you can put a substring of the name and it'll find it).

</comment></comment></comment></comment></comment></comment><comment><USER15> If you are looking for something lighter weight to run java snippets checkout [http://jpad.io](http://jpad.io) I made it to avoid writing the usual class/main boilerplate when all I wanted was to write a few lines of code to explore something.

<comment><USER16> JPad looks like a IDE dedicated to learning new things in a programming language. Eg. you want to try java9 feature without creating new project, writing new class. Gonna try it today. Thanks.

</comment></comment><comment><USER17> I'm a long time user of Eclipse but recently have tried IntelliJ again, it's got some really nice features such as the inline values while debugging but by far the biggest annoyance is not being able to have multiple projects within a workspace.

At work I mainly work on two APIs that work closely together so in Eclipse I can have both open and just jump between the projects easily and at home I like to have all my scratch pad projects/ideas in one eclipse workspace so I can jump between them all easily.

I know there are kinda workarounds with modules but it doesn't really work well, if they allowed the ability for multiple projects in a workspace I'd jump ship but sadly it seems it'll never be supported (according to co-worker who is a die hard IDEA fan).

<comment><USER18> Same here. Not having multiple projects open is a total deal breaker for us. We have a couple of shared libs that go with our projects and not being able to have them all open together is painful.

<comment><USER19> I work around this by either checking the core libraries out into my new project folder, so ice got multiple copies around- and also I've got a core- Luba project that's literally all 12 core libraries we have that I can have open in one window with my other project open in another.

</comment></comment></comment><comment><USER20> This may seem silly, but one of my main reasons for using IntelliJ over Eclipse is because it has a nice looking dark theme. I've tried using the dark theme on Eclipse, and on both Windows and OS X it had very bright scroll bars that clash with the dark editor.

I think my favorite keyboard shortcut in IntelliJ is double-tapping shift to get a really smart search to pop up.

<comment><USER21> I can't guarantee that I can reproduce it, but I have been able to get a nice Eclipse dark theme that includes the scroll bars (on Windows).

I'm starting to use IntelliJ for other reasons though - double-shift is one of my favorites as well.

</comment></comment><comment><USER22> IntelliJ and it's derivatives are excellent. I'm completely addicted to RubyMine as well. Just the ability to jump to method declarations in a big project has ruined me for any IDE that doesn't have it.

<comment><USER23> I've used IntelliJ, ReSharper, and RubyMine, and all have been best-in-class products.

The only thing I can complain about is that IntelliJ's Maven support is atrocious. Maybe I'm missing something but I've played around quite a bit and I just can't make it search Maven Central's catalog properly. I literally have to drop back into Eclipse to add dependencies. It's OK given that you usually set up your dependencies once and are OK for a while, but it's definitely out of step with how perfect everything else is.

<comment><USER24> At a startup I worked at, we had to switch back to eclipse from any IDE - netbeans, IDEA, emacs, vim because eclipse is the only one that can really get maven right.

The better question is, what is eclipse doing right that all the others can't?

<comment><USER25> Whereas I really don't like Eclipse's requirement that you have an Eclipse plugin for each Maven plugin you use -- I have found it much easier to work with Maven projects using IDEA than with Eclipse, especially on a team where not everyone wants to understand what's going on.

</comment></comment></comment></comment><comment><USER26> Other IDEs just dropped the ball. There is 13 years old pull request to enable language support for languages such as Groovy or Scala: [https://bugs.eclipse.org/bugs/show_bug.cgi?id=36939](https://bugs.eclipse.org/bugs/show_bug.cgi?id=36939)

You can fork Idea on Github and send pull requests...

<comment><USER27> For the last 3 months, Groovy has been officially known as "Apache Groovy".

</comment></comment><comment><USER28> While my peers using emacs might disagree, I'd argue it's also by far the friendliest scala development env as well. I've used the community and ultimate edition for many years. CE is fine coupled w/ sbt for most anything you want to do and promises to remain free.

<comment><USER29> Yes, Scala-wise I prefer it to Eclipse (Scala IDE) by a wide margin. That said, my coworkers and I routinely experience Idea 'hangs' while working on our Scala projects. That's something I never experienced while working on large Java projects in Idea, and I'm curious whether it's because Scala (as a language) is harder on the IDE, or whether the Scala plugin needs more love, or...

Oh, and auto-import of SBT changes? Turn it off. Definitely turn it off.

<comment><USER30> > my coworkers and I routinely experience Idea 'hangs' while working on our > Scala projects.

Same here. It sounds like my MBP is going to take off when it has to build it's indices or whatever. Would be nice if it didn't cane my machine so much but I guess it's all the type stuff and implicits, etc.

</comment></comment></comment><comment><USER31> Other things I love about IntelliJ (in my case, Android Studio):

Code generation. Getting a bunch of getters and setters from a right click is nice sometimes. But more importantly is being able to go to a class definition, do an Alt + Enter, and create a test file for that class in the correct tests directory.

Auto-completion is very powerful. If you're trying to call a method on your AbstractBeanFactoryImpl, you don't need to start by "Abstrac", if there are other results with that preface. You can just try "abfi" and it will probably get the right result. Super useful when you have multiple variables that start with the same sequence of letters.

All the space-saving it does. Have a one line getter or setter? It will display those as one line (with highlights to let you understand they're actually three lines, brackets included). Even some common things like creating a Runnable in Android and overriding it's Run method. Replaces three lines with a straightforward: "Runnable myRunnable = () => {". Feels like you're programming in a less verbose language.

</comment><comment><USER32> IDEs are either swaggering monoliths, where all complexity has been hidden away in a labyrinth of options- or a small basic set, that waits for you to be turned into such a custom tailored to your taste monstrosity.

Sad thing is, really new interesting features are rare. There is no deep learning IDE that watches you debug, and associates source code by changing variable X fixed bug in file Z via time of change correlation and instruction flow graph.

There is no real approach to layered responsibility. Meaning, a beginner should be allowed to change functions, but not add classes and interfaces to existing well structured code, without the author signing those "big" changes off. This crucial "zoom out into algorithms and architecture" and drop back in to display details- still often happen via external tools, as the IDE is not able to abstract Information from the actual sourcecode away.

Finally - debugging and Unittests, these are actually highly automate-able task- yet here im stepping it, even though by now at least conditions can be attached to the various execution paths.

Finally, no ide has a "User" Simulation, to detect crappy requirement engineering before the whole thing is gone into software. A proportioned team of simulated "persons" and "use-situations", that gets to traverse a draft of the gui and the workflow should detect hotspots and annoyances, and avoid a lot of unnecessary & expensive itteration.

</comment><comment><USER33> Can it show multiple projects in the same winfow yet? And I don't mean by abusing the maven module set up, some of my projects use grails for example.

It's nice having my relevant Java, grails and php projects in one window, which eclipse is quite good at. A way to get multiple maven and grails in the same window is pretty much a must for me.

<comment><USER34> workspace in eclipse -> project in intellij ; project in eclipse -> module in intellij

</comment></comment><comment><USER35> Does IntelliJ IDEA have an equivalent to Eclipse's Call Hierarchy view? It allows me to select a method, and get a tree view of code paths that call into it (recursively). I use it all the time and couldn't find it when trying to help a co-worker who was using IDEA.

<comment><USER9> I hate to say this but it takes 3 seconds to google this and find it on Stackoverflow.

If your on Mac its Ctrl-Alt-H and if your looking for Eclipse find references for intellij its Alt-F7. If your looking for mini outline mode (aka command-o in Eclipse) its command-F12.

[https://www.jetbrains.com/idea/help/navigation-in-source- cod...](https://www.jetbrains.com/idea/help/navigation-in-source-code.html)

</comment></comment><comment><USER36> I keep trying PyHarm and giving up. I've never been able to get it configured well for the way I work. So I keep going back to SublimeText with with Python IDE plugins.

Then I get frustrated with that workflow because it doesn't well working on remote servers and go back to VIM. Which I also can't seem to get comfortably configured.

So then I boot one of my macs into Windows for a while and use VS with Pyrhon Tools and get frustrated with Windows, and well . . . .

Sorry, I know this isn't about Python. I've just never found that jet brains products work well for me. I feel like I'm fighting with them. Maybe it's time to give it another shot.

<comment><USER37> Disclaimer: I'm the PyCharm Developer Evangelist. That said, I'd be interested to hear what stuff from ST you couldn't get going the way you'd like in PyCharm. In fact, I just wrote draft docs talking about migrating from text editors.

Also, if it helps, we just did a Getting Started nine-part series of screencasts, available on YouTube. Of course, if the part that isn't working for you doesn't get mentioned, then I need to add to the series.

<comment><USER36> I don't want to further derail this thread, but I'm happy to,take this conversation to email if you would like. Address is in my profile.

</comment></comment></comment><comment><USER38> Can we fix the title to be that of the actual post? The real title has nothing to do with 'friendly' nor are many hailing it.

The title should be "Enjoying Java and Being More Productive with IntelliJ IDEA" as per the original post.

</comment><comment><USER39> Also has a great Golang plug-in

</comment><comment><USER40> We've evaluated it and it was the best we could have bought. We've decided not to use it because they didn't provide perpetual licensing.

<comment><USER41> [https://sales.jetbrains.com/hc/en- gb/articles/207240845-What...](https://sales.jetbrains.com/hc/en- gb/articles/207240845-What-is-perpetual-fallback-license-)

<comment><USER42> I don't know why they didn't make it more obvious. The aparant Adobe like subscription model almost scared me off too.

</comment></comment></comment><comment><USER43> Does anyone know where IDEA stores its build scripts? They don't seem to use gradle/ant/maven by default.

Specifically Java2EE/Web?

</comment><comment><USER44> Title: Enjoying Java and Being More Productive with IntelliJ IDEA

</comment><comment><USER45> > Why IntelliJ IDEA is hailed as the most friendly Java IDE

To be fair, most Java IDEs suck. Eclipse's usability is the worst I've seen in any IDE and, surprisingly, one of the most popular.

</comment><comment><USER46> Nice ad

<comment><AUTHOR> I've written this article with one simple idea in mind – give for reading to everyone asking me to explain how IntelliJ IDEA is compared to other IDEs. Just now I've also realized that I can use it to explain what we're doing at JetBrains.

<comment><USER40> What you're doing is charge people as much as possible by not giving the option of perpetual licensing. That's what you're doing.

<comment><USER47> Not true: [https://sales.jetbrains.com/hc/en- gb/articles/207240845-What...](https://sales.jetbrains.com/hc/en- gb/articles/207240845-What-is-perpetual-fallback-license-)

</comment></comment></comment></comment><comment><USER48> IntelliJ is also the only Python IDE that I am not allergic to. I normally just VIM, but when I am forced to use an IDE (e.g. pairing), I use IntelliJ.

(Curiously, I've found IntelliJ to be actually better for Python development than the Python-specific offering from the same company - PyCharm)

<comment><USER49> What's better about developing Python in IntelliJ versus PyCharm?

<comment><USER50> The Python plugin for IntelliJ is virtually the same as PyCharm. The plugin sometimes lags a bit behind the PyCharm version, while PyCharm sometimes lags a bit behind the IntelliJ IDE version, but in general, it's the same.

Of course, you get support for lots of other languages in IntelliJ that aren't available in PyCharm.</comment></comment></comment>


Breaking News - Google Calendar is down - <AUTHOR> http://search.twitter.com/search?q=google+calendar <comment><AUTHOR> More people complaining: [http://www.google.com/support/forum/p/Calendar/thread?tid=63...](http://www.google.com/support/forum/p/Calendar/thread?tid=63b0d69b40463d83&hl=en) No official answers yet.

</comment><comment><AUTHOR> Anyone on the inside know what's happening?</comment>


How Many Women Actually Used Ashley Madison? - <AUTHOR> https://daringfireball.net/linked/2015/08/26/ashley-madison-women <comment><USER2> Why is the article link to DaringFireball and not the original source at Gizmodo? (Why is DaringFireball not a banned site on HN? His commentary rarely adds any value — certainly not to this story)

<comment><USER3> People post knock-off stories all the time. We usually try to change the URL to the original source. This one, though, was already posted: [https://news.ycombinator.com/item?id=10125704](https://news.ycombinator.com/item?id=10125704).</comment></comment>


Anatomy of a Logging API - <AUTHOR> https://google.github.io/flogger/anatomy.html <comment><AUTHOR> Disclaimer: I am an employee at Google, but I have never touched the code for flogger.

I found this and thought it would be interesting for others to read.</comment>


A Closer Look at North Korea's Ullim Tablet - <AUTHOR> http://38north.org/2017/03/mwilliams030317/ <comment><USER3> This is a terrifying manifestation of what technology makes trivially possible. This device:

* Logs every app and web page that you open.

* Keeps forensics on shared files based on hashes, to track networks of like-minded dissidents or individuals sharing similar files.

* Refuses to open any _files_ which are not signed by either the government, or the device which created the file. (e.g. photos can be viewed only on the device that took them, while government-approved files can be shared freely.)

Among other things. Yikes.

<comment><USER4> So, basically Android? Except, you don't get shot in the back. With Android, it automatically syncs Contacts and photos to the "Cloud", unless you disable it. But, you cannot do it 100%, because it's turn on by default when you first sign in. Also, it's not a secret that Google logs your locations history.

<comment><USER5> I don't fully understand that this comment is downvoted. He has a point there. We are all being tracked, just see your history [1] on the google website.

It tracks the websites you've visited, the video's you've watched, music I've played, things I've searched, App's I've used (Camera for example), directions I've searched (google maps), ads I've seen, cards in my feed (google now), my location history (actually very cool and very scary)... There are probably a LOT more metadata they have on me that I don't know

I mean, they have a LOT of my data, they know probably more about me that I know about myself.

Of course we aren't blocked for using any apps or viewing files, but they know that we are using and viewing the apps/files. I think it's in their best interests not to block anything, as this way they get a lot of information they otherwise would not get.

You can compare the "my activity" with "Trace Viewer". It's just a matter of perspective. Don't get me wrong, I don't approve the NK way of blocking everything, but the tracking of the data happens in the West already too and we just "accept" it.

[1] [https://myactivity.google.com/myactivity](https://myactivity.google.com/myactivity)

<comment><USER6> Keep in mind that you're comparing an oppressive regime with... android. The open source phone operating system. And you think this is a sensible comparison?

<comment><USER7> He's comparing this device's tracking with Google's tracking. Why are you pretending you don't realise that?

<comment><USER6> There is a difference between opt in and getting yourself and your immediate family killed in the process of opting out. You can also install custom ROMs, or just use android without the google apps and not worry about any of this. You can do this in like an hour. If you're stuck in North Korea, there is damned little you can do other than get shot for sending a text message about it (if that is even possible). Which is what we should be discussing here.

<comment><USER7> So instead of a potentially interesting thread about this device, what it (supposedly) does, how it compares to tech or practices here, we should have another all-been-said-before-1000-times discussion re-stating the boringly obvious about how grim life is in NK?

<comment><USER6> This comment thread isn't about any kind of NK tech. It's another all-been- said-before-1000-times discussion re-stating the boringly obvious about how Google is evil.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> Funny thing capitalism, I have a more robust version of this on my work PC (seriously, makes this look amateurish). Except of course I have the "choice" to not accept it and go work for someone else.

<comment><USER9> You highlight choice like you're being sarcastic, but is there anything that stops you from looking for a job? If it's a big deal to you you'll make it a priority, if it's not a big deal to you you'll stay where you are.

<comment><USER8> Why do poor people accept the mistreatment by their employers?

Why do you complain about the company dumping waste in your backyard - <USER2> move to a nicer neighbourhood.

</comment></comment></comment><comment><USER10> Reading this the engineer in me was impressed at their thoroughness. I believe it's easy to fall into a trap of thinking of the North Korean government as grossly incompetent, and this isn't necessarily true. If these assumptions extend to Western leaders, it could one day have a disastrous result.

<comment><USER11> I do wonder where they source the talent and expertise with these platforms necessary to pull something like this off. I understand that's kind of a naive question—any functional state has sufficient resources to solve such problems for itself—but one does wonder. I can only assume there was extensive Chinese help. They definitely have the critical mass of engineering ecosystem for that sort of endeavour.

<comment><USER12> If you think about, the NSA, GCHQ, etc probably run similar software on their own devices to monitor employees and be able to trace back where any leaks came from. I wouldn't be surprised if there is a commercial company that sells this type of software.

<comment><USER13> > I wouldn't be surprised if there is a commercial company that sells this > type of software.

BlueCoat. They're called BlueCoat. As an aside, a subdivision of Intel actually runs the internet filters for some middle eastern country (due to some chain of acquisitions). Isn't that great.

<comment><USER14> BlueCoat is used in private industry for security / DLP, certainly, but IC agencies have their own comprehensive systems in place to ensure sensitive data access is highly controlled and audited.

</comment></comment></comment></comment></comment><comment><USER15> Random fact that I learned recently, 20% of the North Korean population was killed during the Korean War (1950-1953). Mostly with Napalm. :(

<comment><USER16> The US dropped more bombs on North Korea than we dropped on all of Europe and Japan during WWII. Proxy wars between superpowers never work out well for the actual people affected, and we should not be so forgetful of that.

<comment><USER17> It worked out well for the South Koreans

<comment><USER18> It was no treat for anyone involved:

Number of Americans killed in the Korean War: 36,000

Number of Americans wounded in the Korean War: 105,000

Number of South Koreans killed in the Korean War: 415,000

Number of South Koreans wounded in the Korean War: 429,000

Estimated number of Chinese and North Koreans killed in the Korean War: 1,500,00013

I would like to hear more from historians as to what would have happened had the war never occurred. My guess is a united Korea would be in line as a periphery of China with their level of technology... with Kim Il Sung and his family long gone and irrelevant.

I would also like to add that Americans know nothing of modern war never actually having had to live through it or having to deal with its consequences on their livelihoods, economy, or psychology. War for Americans is stuff that happens to other people... where they send oblivious young men to fight who are usually forgotten as soon as they are sent off to protect "freedom".

<comment><USER19> In a recent talk by Chomsky, he described US Air Force literature or rather documentation of the Korean conflict. Apparently the bombing was so thorough, they ran out of targets in North Korea. Not only military, but infrastructure and cities as well, as I recall. One of the impressive things about post '53 North Korea is that they did a complete rebuild.

<comment><USER20> There was a lot of pressure from the operations level to expand bombing into China, which tactically made a lot of sense; NK and Chinese MiGs retreated across the Yalu River each night and there were plenty of worthwhile targets such as supply dumps and routes.

However the JCS denied all such requests and remarkably there were only two or three violations during the entire war, such as the August 1950 strafing- attack on Antung airfield. The USA offered compensation afterwards despite that being the home of over 100 MiG-15s engaged in the war.

<comment><USER18> Imagine what the world would be like today had they bombed the shit out of China. No way in hell you repair a relationship like that.

</comment></comment></comment></comment></comment></comment></comment><comment><USER21> Here's a link to the talk from 33c3 - [https://www.youtube.com/watch?v=fAtWwadP6CY](https://www.youtube.com/watch?v=fAtWwadP6CY)

</comment><comment><USER22> The North Korean developers who worked on this must be privileged beings with access to the open Internet. I can't imagine developing such a complex system without documentation and references.

Maybe they even hang out in Stack Overflow...

<comment><USER23> There is good chance it's actually developed by developers seating somewhere in Bay Area working for some VC-funded company with inconspicuous name.

After all there is a lot of commercial surveillance software that sold to authoritarian regimes. Of course that doesn't mean someone work directly with NK.

<comment><USER24> Exactly. This was almost certainly made by a Western country under NDA.

<comment><USER25> I doubt it. They would be too scared of implemented backdoors. They might outsource some parts, maybe to china or india, but they will likely assembly it in NK - to have full control over it.

<comment><USER26> They're likely a test-bed for a prototype surveillance system already being developed and/or deployed by the Silicon Valley of the West for Western regimes and dictatorships.

edit: Even simple surveillance features like file tagging are already deployed within the US, and is how the FBI claims to track stolen documents to Chinese hackers. Although, the system the FBI uses to track document content traversing the internet is likely quite a bit more sophisticated. The prototype system can even be a rootkit spying system used by corporations to spy on their employees and/or their consumers and customers.

The chain of sales is almost certainly from Silicon Valley, to a Chinese front, to North Korea or [ SV and China ] to North Korea. SV, US, and China work closely together in regards to surveillance, the only real difference is their rhetoric and how they sell it to their citizens.

</comment></comment></comment></comment></comment><comment><USER27> ok , so DPRK is installing spyware on tablets that are sold in DPRK.

Reading this article, it occurs to me that it's not very different than the surveillance that the NSA is performing on US Citizens, except the NSA is smarter about it and taps the network access, at the network provider.

<comment><USER28> Are you joking? We couldn't even have this conversation on North Korean devices. As bad as the NSA might be, this is on a completely different level.

<comment><USER29> Its only a different level because of the amount of control the NSA has over the technological infrastructure, and the degree of force that can be brought to bear - through multiple independent factions of the US military-industrial infrastructure - upon those whom the establishment deem, through surveillance, to be un-savoury.

You probably haven't been paying attention, but the US Gov't make dissidents disappear all the time. They just do it with a velvet glove on, whereas we're more accustomed to complaining about/being distracted by the heavier hand represented by the propaganda against North Korea.

The US gov't is not as innocent as you might think when it comes to handling dissidents. Its just very, very good at maintaining the facade that its all done 'for the greater good of the people of the United States and its possessors'. The USA is, after all, a PR-first nation.

<comment><USER30> Are we really comparing the DPRK with the US? This thread has jumped the shark. Anyone in the US could be a dissident -- it's called the first amendment. Unless you are from the People's Republic of Fantasia, there's a good chance your country isn't a shining example of freedom either. But, it seems that the fashion on HN is to complain about the US at every opportunity -- even within an article about North Korea.

This could be a story about Hilter and people would find a way to engage in moral relativism.

<comment><USER31> > fashion on HN is to complain about the US at every opportunity -- even > within an article about North Korea

See "Whataboutism"

</comment></comment></comment></comment></comment><comment><USER32> Weirdly, I actually liked the part where you could browse through the data the device tracked. I wish I could do this on normal Android, because I know I am being tracked by Google and other apps but I have no way of knowing what they actually recorded.

</comment><comment><USER33> Definitely puts a dent in the distributable flash drive plan that many activists have been working on implementing. Unless some kind of self signing flaw is discovered and exploited seems unlikely subversive media will be as widely distributed.

</comment><comment><USER34> The business would love to lock down their employees' devices (especially handheld and embedded) like this.

They should just come with this system to open market, make a company that is worth billions from the start, because every BigCo would love to buy.

<comment><USER35> It would be illegal in many countries. E.G: france law consider that an employer can't watch private documents even when opened by an employee, during working hours, using the company equipment.

<comment><USER34> But this way, employee can't even open private documents! Which makes transgression impossible. Any document that can be opened is a company document, which can be watched.

<comment><USER35> It would mean that any document sent by a client or a peer would need pre- approval which would make you very, very improductive. In NK, you can get away with it because you have basically no competition. In our countries, the company doing so, unless everybody is doing the same (or only if secrecy/security is part of the value of it's business) would make it completly uncompetitive.

<comment><USER34> But it isn't for white collar. It's for workers operating tablets and embedded touchscreens as parts of machinery.

They have all kinds of embedded Windows and Linux there, but they have more holes than Swiss cheese.

For white-collar workers you can integrate this with e-mail and workflow solutions, needs additional work but will make that company worth $10B.

</comment></comment></comment></comment></comment><comment><USER36> Maybe they just pointed the tablet to the government's servers instead of Google's. The rest comes out of the box..

<comment><USER37> Hey dazhbog, coming to Shenzhen soon May 21-23rd -- looking to connect. can you reach out to me? email@example.com thanks

</comment></comment><comment><USER38> There's a positive project for the CIA/NSA. Flood the North Korean market with smuggled privacy protected versions of the same model of tablet that work on the DPRK network. And maybe a worm that fixes the other tablets.

</comment><comment><USER39> Credit where credit is due - they have turned android into ios. They have locked bootloader, kernel patch protection and static and dynamic code signing.

</comment><comment><USER40> The one good, albeit tragic, thing about the existence of North Korea is that it serves as a constant reminder of what society can become if we're not vigilant about educating each generation about the dangers of certain ideologies and modes of social organization.

<comment><USER16> The government of North Korea is one of the two puppet dictatorships established in the Korean peninsula after World War II. It was the will of the Korean people to establish a socialist democracy, not a Juche dictatorship, but in 1946 the USSR and USA decided that what the Korean people wanted was the least important concern. The point is that it wasn't the ideology of the Korean people that mattered, it was the clash of 2 imperialists and its result.

<comment><USER41> Dictators have come to power through many methods through history. Being given power by an outside force is only one possible route to totalitarianism. Many dictators start out popular and sometimes even democratically elected.

The scariest thing about modern dictatorships is they may never go away once established. As surveillance technology improves, perfect ideological control becomes possible. As drones and robots replace human soldiers, uprisings become much less practical. Nuclear weapons eliminate the threat of foreign invasion. Eventually anti-aging will prevent the dictators from even dying.

That was always the scariest part of 1984 for me. Not that the world was a dystopia, but that it was _completely stable_. The state could continue on for thousands of years. Or at least until they ran out of natural resources.

</comment></comment></comment><comment><USER42> They could start selling these to Turkey... ;)

</comment><comment><USER43> xda-developers need to root this device.

</comment><comment><USER44> NSA is working relentless trying to figure out how to get one of these in the western market ;-)

</comment><comment><USER45> The same in Europe today.

Smartphones are so bad.

Tricks or truth, reality or fiction. What make your phone?

</comment><comment><USER46> In North Korea, browser history deletes you!

<comment><USER30> I think today you won the internet.

</comment></comment><comment><USER47> Total war against the whole Japanese Empire was completely morally justified in the same way that total war against Nazi Germany was.

<comment><USER48> You can never morally justify war against civilians, sorry.

<comment><USER29> Civilians are responsible for their governments. Alas, this is a hard truth that many civilians do not wish to be reminded about.

<comment><USER7> >> You can never morally justify war against civilians, sorry.

> Civilians are responsible for their governments.

So the attack on the WTC was justified in your opinion?

<comment><USER29> If you wage war on foreign nations, and allow your government to do so, then you shouldn't be so surprised when it comes back to roost. No, the WTC attacks were not justified. But they were definitely to be expected, given the carnage around the world that the USA has been propagating now, for 80 years. When your nation maintains its moral authority to indiscriminately wage war around the world, you should not be surprised when that war comes to your footstep.

</comment></comment></comment></comment></comment><comment> ezequiel-garzon I prefer the version "not all that glitters is gold", otherwise it sounds like gold, which glitters, is not gold. Interestingly in Spanish both versions are also popular.

<comment><USER49> The word order "All that gli[t]ters is not gold" is taken from Shakespeare ( _The Merchant of Venice_ ), so that gives it quite a bit of staying power in English.

<comment><USER50> Although in the originl he used the word "glister".

<comment><USER49> Hence why I put the bracket around the first 't'.</comment></comment></comment></comment>


China launches social compliance game - <AUTHOR> http://theantimedia.org/china-just-launched-the-most-frightening-game-ever-and-soon-it-will-be-mandatory/ <comment><USER2> I wonder if people will manage to game the thing.</comment>


Ask HN: How do you negotiate an internship salary? - <AUTHOR>

During community college, I did part-time PHP/MySQL web development for a local web dev company. I was making $16/hr when I quit after two and a half years when I graduated and moved on to a state university. Two years ago, I got an internship doing C#/ASP.net development where they kept me at that $16/hr rate (although they provided housing, utilities, and a light breakfast).
Today I'm applying for a co-op. The application asks for past salaries and expected salary. Do I leave the past salaries blank and put down "Negotiable" for the expected salary? Based on my relevant experience and the amount of schooling that I have completed, I believe I'm worth at least $20/hr, if not more (24-26?). How do I get the best possible offer from HR without coming across too strong? How and when do I approach this subject during the interview process?
Edit: For context on the salaries, I'm in the Midwest and applying to a local job, where I expect to commute 45 miles each way. <comment><USER2> Yes, but with an internship one assumes that "pay" = financial remuneration + learning + experience

You don't say what your major is but if it was, say, robotics and the iRobot Corporation or JPL wanted to offer you an internship you might decide that a free/no pay internship was worth it due to the experience alone.

Thus without knowing the degree of learning and experience you will get it is hard to know what is a fair $ salary.

</comment><comment><USER3> You should leave the salary fields blank. There's usually no need to fill those in, unless it's explicitly stated.

Most large companies have set scales on internship salaries based on your seniority in college (freshman, sophomore, junior, senior). There's usually not too much wiggle room, if any. You shouldn't really discuss salary with HR until you get a formal offer in writing. Get the job first, then worry about how much you're going to get paid.

High range for software dev internship salaries this year is probably around $34/hr in the bay area. It depends on what you'll be doing though.

</comment><comment><USER4> In my experience, those fields are often quite extraneous - not too relevant for interns, since many internships aren't really negotiable. This being said, the high end of your range is the low end of what I know internships pay on an hourly basis at top companies; $20/hour is certainly entirely reasonable. I think that given the likelihood this field will largely be disregarded anyway, you run little risk at putting in figures on the high end - if they are otherwise interested, they'll still talk to you, attributing your figures to your lack of knowledge about the local job market, etc.</comment>


Imperfect Foods – San Francisco (CA), Remote – Full-Time - <AUTHOR> https://www.imperfectfoods.com <comment><AUTHOR> At Imperfect Foods we are all about groceries on a mission. Since 2015, our services have saved over 100M lbs of food. Our product and technology team is responsible for building our ecommerce platform and internal tooling, as well as ensuring smooth daily operation of our rapidly growing business. We are swimming in interesting problems around customer-facing features, scale, and logistics. If all of this excites you, come join us!

We're hiring for roles across technology:

\- Data Analyst: [https://jobs.lever.co/imperfectfoods/e8b6ce5a-033b-4798-bb1f...](https://jobs.lever.co/imperfectfoods/e8b6ce5a-033b-4798-bb1f-495fe07ec68e)

\- Data Scientist: [https://jobs.lever.co/imperfectfoods/4c198d6e-acc4-405a-996c...](https://jobs.lever.co/imperfectfoods/4c198d6e-acc4-405a-996c-93a2b756936c)

\- Engineering Manager: [https://jobs.lever.co/imperfectfoods/e3f3dde1-2520-4331-85c0...](https://jobs.lever.co/imperfectfoods/e3f3dde1-2520-4331-85c0-c26e86f10fdb)

\- Software Engineer (JavaScript or F#): [https://jobs.lever.co/imperfectfoods/ebdaba83-69b0-4e10-aeac...](https://jobs.lever.co/imperfectfoods/ebdaba83-69b0-4e10-aeac-0614b480c982)</comment>


[FRAMEWORK] JavaScript Translated Edition - <AUTHOR> I have invented a fully new JavaScript Framework called JavaScript Translated Edition which allows anyone to develop his/her own web application and write its code lines in his/her own local language as a plain text instead of the syntax of web programming language which may seem complex to many people. I have released its first alpha version v0.1.0 Alpha under AGPL-v3.0 License 2 months ago, but unfortunately I don't know how to market it and how to find a sponsor for it.
You can try it out on CodePen at: https://codepen.io/jste/pen/rGegLE https://codepen.io/jste/pen/zEqQYV https://codepen.io/jste/pen/yzOrJP https://codepen.io/jste/pen/JrXqOK https://codepen.io/jste/pen/gGrJxo https://codepen.io/jste/pen/yzOrJP
You can check the introductory video of the project at: https://www.youtube.com/watch?v=dST3FvQDAm4
You can also check its status and what have been done at: https://github.com/project-jste/framework/blob/master/README.md
And access its documentation at: https://project-jste.github.io/docs/en-us/ https://project-jste.github.io/docs/en-uk/
You can support it by posting about it or helping me find contributors and sponsors.
JavaScript Translated Edition official website: https://project-jste.github.io/ JavaScript Translated Edition official GitHub repo: https://github.com/ProjectJste JavaScript Translated Edition official page on Facebook: https://www.facebook.com/ProjectJste
I hope that you send me your response as fast as you could <comment><USER2> Project home page, [https://project-jste.github.io/](https://project- jste.github.io/)

Looks Awesome. If it meets the guidelines, this might make a good 'Show HN'. Show HN guidelines: [https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html)

</comment><comment><USER3> Great job and lots of work, but i dont think it will take of. Its an other language to learn.</comment>