Language Learning for the Dispassionate - <AUTHOR> https://langliter.com/blog/longterm_challenges/ <comment><USER2> Do you want content for Chinese? I have a lot of data I've gathered for use with [http://pingtype.github.io](http://pingtype.github.io) that I'd be willing to share (and I admit that your web design is better than mine).

Learning Chinese has a lot more initial barriers, which I explain more in this blog post:

[https://pingtype.github.io/docs/failed.html](https://pingtype.github.io/docs/failed.html)

<comment><AUTHOR> Eventually yes, my vision for the app is to effectively use NLP to solve some common challenges readers have when learning a language. I'd like it to be more than a news reader with a flashcard system.

So to do that properly, I would need to learn a bit more about Chinese to understand how it would fit. Your docs do a good job explaining the problems you're solving, but since I lack even a cursory understanding of the Chinese writing system, I have a hard time following it all.

Impressive app btw, I clicked the "Advanced" button and can see there's a lot of functionality there.

</comment></comment><comment><USER3> Looks like OP is the author behind the app, so I would suggest adding a "Show HN" to the title, for more kudos and feedback.

That said, congrats for the good work! I really like the idea, and I feel this problem very much. Currently picking up Swedish, and unable to find easy enough news worth reading every day, so I'm a bit stuck at that level "able to understand a bit but not enough to read everything".

Do you happen to have a roadmap about the addition of new languages? If Swedish was there I would totally go Pro.

<comment><USER4> Jag är också tränar hur man pratar lite svenska.

What resources have you been using? Klartext is a service that delivers news in accessible Swedish (sort of like simple English Wikipedia) along with pronounciations that I've found to be very useful - sverigesradio.se/klartext

I've also changed my phone's native language to Swedish and I've been watching English Netflix shows with subtitles which has really helped with picking up new words. I'm also using the SVT Play app to watch Swedish language programs with Swedish subtitles to develop oral comprehension and improve pronunciation.

There's probably no substitute for total immersion but since I don't plan on moving to Sweden anytime soon I've found the above resources to be helpful.

</comment></comment><comment><USER5> Looks cool, thanks for sharing.

Duolingo Spanish has a new "Stories" section that quizzes you in the context of a story.

[https://stories.duolingo.com/](https://stories.duolingo.com/)

I'm also digging their new Podcast, which tells stories, NPR-style, alternating between Spanish and English.

</comment><comment><USER6> Nit pick: shouldn't marginal utility be the first derivative of total utility? That bend in the marginal utility near "ventriloquist" looks wrong to me given the total utility shown.

<comment><AUTHOR> Ha ha, yeah you caught me. I was fighting with the Vector tool in Sketch. My old econ professors would be disappointed.

</comment></comment><comment><USER7> I have been working on something very similar for the past year.

I first build this prototype with the goal of generating sentences and then analysing the user translation because I wanted a feature to see if the user knows the word even though he misspelled it.

[http://ling-academy.com/](http://ling-academy.com/)

I finished that 3 months ago, received feedback but its just a proof of concept and since then have been building v2 which is very similar to what you have build - the idea is to have users learn vocab and then match them up with fitting text. This v2 is almost done but not deployed yet.

I do however plan on going much much further then this. I have been looking for a co-founder who is also invested into e-learning and language learning. Maybe we should team up? Email is:

Michael . baumgarn at gmail . com

</comment><comment><USER8> Thank you so much for this. I'm an unabashed linguistic philistine. I see language at best as a useful tool and find no more beauty in it than I do in a hammer. But I'm also a long term expat and I feel kind of rude barging into these countries, taking the jobs and the women and not adapting the culture at all. This is exactly what I need.

Before now I've half-heartedly tried to write a script that would give flash cards based on a combination of word frequency in common texts and the amount of times I've gotten the word correct in the past. It didn't work. I should try your app.

<comment><AUTHOR> Funny you should mention that, in about a week I'm planning to make public a frequency list collected from a corpus of over 40k Spanish news articles (I've been working on Langliter for a long time). Since I'm finding the lemma of every word in the corpus and I'm tagging each word with its PoS, it's actually a really valuable list. I plan to update the list quarterly as my corpus grows.

I'm currently only using it to calculate a modified version of the Dale Chall readability score. Figured people could make good use of it and it would be a good way to drive people the the site.

<comment><USER9> That would be absolutely amazing. I can't wait for the German addition to the site (current learning project).

How much hand tuning does this process require? If you had a corpus of German news articles, for instance, could you just run the software and receive a sorted frequency list?

<comment><AUTHOR> Just letting you know that I've uploaded the first frequency list. Just Spanish at the moment, but will be adding more over time.

[https://langliter.com/blog/frequency_lists/](https://langliter.com/blog/frequency_lists/)

</comment></comment></comment></comment><comment><USER10> Can you go into any detail around how you curate the Portuguese content? The icon has both the Brazilian and Portuguese flag. One thing I've had difficulty with is that there's just enough differences between the two that mixing them can be confusing while learning. Lack of European Portuguese is why I basically dropped Duolingo and settled on just reading books/listening to music. The dialects are super similar to those who already know the language, but when even basic nouns differ it can get hard!

Just downloaded the app and it's awesome. Thanks for making it!

<comment><AUTHOR> Glad you like it so far, and that's valuable feedback regarding Portuguese as it's not a language I'm personally studying.

I'm leveraging RSS feeds from popular papers in the languages I'm supporting with some weights applied so no single source is overly dominate in the feed. That said, I need to add more Portuguese and French sources, which is something I'm planning to take on this weekend. Right now the only paper from Portugal I've included is Correio da Manhã. If you have a favorite paper, let me know and I'll look to add it.

In terms of control, you can filter by country of origin. Please let me know if you think that is sufficient to address your concerns or if there is more I should be doing to separate the European and Brazilian Portuguese.

</comment></comment><comment><USER11> Thanks for this! It's nice to see more tools out there for advanced language learners because, like the article states, it sure is a long slog isn't it. I especially am happy to see that this app adds the Lemma [https://en.wikipedia.org/wiki/Lemma_(morphology)](https://en.wikipedia.org/wiki/Lemma_\(morphology\)) of the new vocabulary to the spaced-repetition flashcards rather than the particular form it appears in on the page. That has taken up a lot of my time with other similar apps.

<comment><AUTHOR> Thanks, the lemma issue is literally the reason I started building Langliter.

</comment></comment><comment><USER12> The idea sounds great, but the app description definitely should have mentioned what languages are available. I spent five minutes fighting with the faulty OAuth only to find that German is not offered.

<comment><AUTHOR> Sorry about that, I really should keep an updated list of supported languages with the call to action download at the bottom of the article. Thank you for bringing this to my attention.

I'm looking to support German the first half of this year. It's currently number 2 or 3 on my new language priority list. If you'd like to get an email when it's available, there is a form at the bottom of the homepage that let's you fill out what language pairs you're interested in.

<comment><USER13> I would make that form a bit more visible. If I wouldn't have read this comment I would have left the website and didn't come back.

Looks like a great app; while I'm learning german I will definitely sign up when it becomes available.

</comment></comment></comment><comment><USER14> Any plans to support Asian languages?

<comment><USER15> The short answer is no, because I don't know enough about those languages to deliver a valuable experience.

I think the value from Langliter comes from two areas:

1\. The NLP processing and tooling built on top of that processing 2\. Its superior mobile experience

If I just used a simple form of tokenization, I think I could very quickly deliver a superior mobile experience than what is currently available from similar apps. However, I'm not sure if PoS tagging and some of the other techniques I'm using translate to those languages or if they do, how much value they'd add to the learning process.

But it's something I'll certainly revisit if the app ends up being popular and I have the resources to do it properly.

<comment><USER16> Awesome work! I am learning a language and have been fantasising about a tool like this.

What about support of non-latin alphabet languages? I'm learning Dari at the moment. It uses Arabic alphabets, the words are a string of alphabets, there is tenses, verbs, nouns, adjectives. It's different to English only by the alphabet used, the vocabulary and the ordering of the verbs/nouns/subject.

Is it possible for it to be opened up to third parties to contribute new languages?

<comment><AUTHOR> It's definitely something I hope to get to explore. Langliter is only a side project at the moment, so I'm focusing on languages that I have a little experience with. But as long as the licensing is compatible, I've built Langliter to be pretty flexible in terms of the types of tags it could support.

</comment></comment></comment></comment><comment><USER17> For those interested in languages, I've got an iOS Word Search game that allows you to play in English, French, German, Italian, and Spanish.

[https://itunes.apple.com/us/app/h4labs-word- search/id1311744...](https://itunes.apple.com/us/app/h4labs-word- search/id1311744075?mt=8)

I noticed that there is some interest in Russian here. I can add that in the future. There wasn't enough room on the controller so I left it out.

</comment><comment><USER18> I hope that language education services don't forget the desktop experience. As someone who spends 8h a day online, I have times where I go home and don't want to look at a screen.

I want a good desktop experience. I'd love something that would ping me every few hours to make me exercise my language practice.

</comment><comment><USER19> The Internet + Yomichan + Anki integration is basically this for Japanese. You read real texts, Yomichan helps with missing words and with one click you can add them (with context) to Anki.

</comment><comment><USER20> Add support for Russian and I'm in. This looks like exactly the language app I've been dreaming of--real language-native content with quick lookups for stuff you don't know.

<comment><USER15> Glad you like the concept! Russian is currently language #4 on my list, and I hope to add it in the first half of this year. There's a form at the bottom of Langliter's homepage that lets you select which language pair you'd like to see supported. That'll let me can shoot you an email when it is ready.

<comment><USER21> The concept seems really interesting and I've signed up to try and improve on my Spanish. I currently live in Amsterdam though, and there's no option in the drop-down for learning Dutch. Is it likely to make it onto your list?

<comment><AUTHOR> Thanks for checking out the app. Dutch support would probably be a ways out. I think I'm going to need to eventually decide if I want to support languages before I have a lemmatizer in place. For me lemmatization is Langliter's killer feature and it's core to a lot of what's going on in the app.

But others might be okay with just a reading app that works offline, provides PoS highlighting and let's them build a vocab list (even in a less refined way).

</comment></comment></comment></comment><comment><USER22> Nice. I'm also making a language learning application and getting "real" content (websites, tweets?, news, etc) into the app is definitely one of my main targets.

</comment><comment><USER23> What's your language priority list? I'm learning Polish

<comment><AUTHOR> Italian, English, German, Russian

German might happen before English depending on how much ground I cover supporting more navigation languages.

Beyond that I'd need to do some research on which languages to support.

</comment></comment><comment><USER24> Any chance for Arabic in the future? Looks like a great app!!

<comment><AUTHOR> Thanks! I'm not planning to support Arabic any time soon, but from a tools and data set perspective it's possible. I'd just need to invest the time to research the language and talk to users about challenges specific to that language. Hopefully the project is successful enough that I get a chance to do that.

</comment></comment><comment><USER25> Installing on my phone now. My major beef with duolingo was that it felt too much like a game. Goddamnit, learning isn't fun and don't try to make it be!</comment>


Perceptual Image Compression at Flickr - <AUTHOR> http://code.flickr.net/2015/09/25/perceptual-image-compression-at-flickr/ <comment><USER2> Very nice article. BUT it's as if there's a couple of paragraphs that have deleted in the middle. They say absolutely nothing about HOW they are doing perceptual image compression. Maybe they're using SSIM (structural similarity) values, which is standard in image compression literature? In fact they don't even explicitly say they are doing perceptible image compression, but I assume that's the whole point of the article.

JPEG appears to be too aggressive at compressing areas of an image with a low imformation content. Look at the first 4 examples: the people and other detailed ojects look fine in all four images, but there's a huge difference in the near-flat red regions, because too many bits have been cut out. Really, it's the JPEG compressor that needs tuning rather than the q-level or other settings.

That might be the reason that some users loudly complained about the more aggressive compression when their testing showed that on average people could only notice it 3% of the time. Probably that means the compression became noticeable for a few images or parts of images.

<comment><USER3> The Petapixel article shows some fairly dramatic issues in -- as you mentioned -- supposedly low detail areas.</comment></comment>


Ask HN: Looking to join a startup in Montreal - <AUTHOR> I graduated with a Comp Sci degree from Concordia earlier this year and promptly started working at a corporate job in a stuffy corporate environment. I'm not enjoying it - we support IE6, and the work is mostly editing XML.
I want to stay in this city, but I'm unsure how to go looking for a small company to join. I've checked out montrealtechwatch, but they don't have much going these days.
Does anyone have suggestions, either specific to Montreal or maybe even for any city?
Just in case some of you are from Montreal, I'm a programmer who knows Java and Python, and loves JavaScript. I've got some experience in C++ but none professional.
Thanks HN. :) <comment><USER2> Get on the Montreal Python mailing list and try to get to an event. StartupDrinks.ca also hosts regular monthly meetups. There is plenty of interesting stuff going on if you know where to look.

<comment><USER3> Where else do we look? Cheers

</comment></comment><comment><USER4> Have you also checked out programmer meetups on Meetup.com?</comment>


PINE A64, First $15 64-Bit Single Board Super Computer - <AUTHOR> https://www.kickstarter.com/projects/pine64/pine-a64-first-15-64-bit-single-board-super-comput <comment><USER2> Why are they calling it a "super" computer?</comment>


Censorship Kills Potential Twitter Acquisition - <AUTHOR> http://seekingalpha.com/article/4011340-censorship-kills-potential-twitter-acquisition <comment><USER2> It doesn't look good for an article on political censorship when its main example is a tweet literally advocating violence ("run them down"). I don't see any evidence (in the article, or elsewhere) that Twitter's "censorship problem" is a bigger problem than the notorious amount of abuse on the platform (for example, the recent Leslie Jones incident).

<comment><USER3> Violence _in response to violence_. As explicitly stated in the article:

 _One example of this was journalist Glenn Reynolds getting his account suspended for tweeting "run them down" in reference to drivers being in a situation where protesters were blocking the streets and attacking cars which stopped._

Unless you're a pacifist, or otherwise opposed to self-defense, it's not objectionable, certainly not to the level of suspending someone's account, and only letting them return after deleting their own comment in Communist self- criticism style.

And censoring the relatively moderate but incredibly high profile Instapundit was an unbelievably stupid move, it might very well mark the tipping point after which saving Twitter became impossible.

Along with the continuing purges of "conservatives" (Glenn's a libertarian, actually), as the article says, Twitter has become an explicitly political platform, and in a US presidential election season (note also the shadow bans and one deletion of Trump's ~34 tweets on simple voter registration), and that's pure poison for the types of bidders it was soliciting.

</comment></comment><comment><USER4> No, no.</comment>


World of Commodore 2016 - <AUTHOR> http://www.tpug.ca/world-of-commodore-16/about/ <comment><USER2> _" We have listened to the feedback and this year for the first time we are expanding WoC to a full two days!"_

It's been a long time since I thought I'd see the day when Commodore conferences were getting _bigger_ over time.

The crowd looks pretty old (not to say I'm young), and I think it's likely that this will be like classic cars. It'll come and go, as a phenomenon (or, at least, the era of what makes something "classic" will shift forward). But, it's fun while it lasts. I'd really like to make it to an 8 bit computer show one of these days.

<comment><USER3> > The crowd looks pretty old

Oh man, don't say that! When I first got into C64 nostalgia, you had the older camp that was still staying productive on the 64, and us twenty-somethings nostalgic for the computer and games we grew up with.

Now we've got kids of our own, grey hairs and yellowed machines. At least my son got a kick out of playing Ultima V with me.

<comment><USER2> I'm in the older camp, I think. My dad brought home a C64 when it was pretty new; maybe it'd been on the market for a year or so, maybe less. So, I was a first generation user, and it was my computer all through middle school and some of high school (a C128D that I found at a yard sale replaced the 64 after a few years, and the 64 got turned into a dedicated BBS host running Color 64). An Amiga replaced the C128D when I was in 11th grade, after I'd been saving up for literally years.

So, I say they look pretty old with acknowledgement that it means I'm getting up there, too. I don't mean to demean or dismiss the folks at that conference. It's totally my kinda scene, and I'm sure I'd have a great time talking to any one of them.

</comment></comment></comment><comment><USER4> Good to see the Vampire will be making an appearance, though I'm guessing no new announcements about upcoming releases.

For anyone out of the loop with Commodore stuff, the Vampire is an FPGA-based accelerator for classic Amigas. This is a decent introductory video:

[https://m.youtube.com/watch?v=8S3B8a8N83k](https://m.youtube.com/watch?v=8S3B8a8N83k)

<comment><USER5> Given how much they seem to stuff onto that FPGA, it strikes me more like they are effectively replacing the internals rather than accelerating it.

<comment><USER4> Yeah, eventually I see it becoming its own standalone board, but it's nice that it's allowing Amiga users to make use of their existing hardware (peripherals, etc...).

Also, no announcements I know of have indicated this is on the cards, but I'd also be interested to see if it becomes a more general-purpose 68k accelerator, there may be users of other 68k-based machines that would be interested in a clip-on accelerator. Not for any practical reason, just for fun. I think it'd be funny to see a Mega Drive run homebrew faster than a PlayStation. ;-)

<comment><USER6> There's already work happening on a version of Vampire for the Atari ST.

But I'd prefer they just come out with a standalone board with the Apollo core on one FPGA + a bunch of configurable soft peripherals on another. Then people could configure it out how they wanted and put it in their own case.

</comment></comment></comment></comment><comment><USER7> I'm only 29 and have memorable experiences playing with my father's C64. I consider myself lucky that he introduced me to C64+BASIC at an early age. I will never forget it.

I think our family already owned a Gateway 2000 PC (66/90MHz, Win 95) by then, but I actually liked the C64 more. Second favorite was the Atari 1040ST, the PC came last.

The C64 is a crucial element that got me into programming/CPUs/Hardware. I went from BASIC to QBasic, then to VisualBasic 3, then 5. After that I got my own PC my father bought me Visual Basic 6, students edition. In retrospective, this has to be the best investment of 120DM (Deutsche Mark) ever made. It fueled my interest even more. I was finally able to write my own 'real' Windows programs. I suddenly had access to everything, from DFU dialups, window managment, Browsers (ActiveX!). It even introduced me to 2D/3D graphics because you can use DirectX/DirectDraw directly. All thanks to the Windows API and Visual Basic.

It took a long time until I finally got into Linux and C++, but I never regret that I was introduced to BASIC first, and was taught that GOTO is not evil.

PS: If you have kids and want to introduce them to programming, give them access to Blitz BASIC!

<comment><USER8> I often think of the Raspberry PI as the modern equivalent to the c64. Affordable, powerful, educational. It would be great to develop a specialized Raspberry PI BASIC in tribute to Blitz or QBASIC.

<comment><USER9> BASIC did enough damage to programmers. It's good that it's dead. Don't bring it back.

People mistake BASIC's simplicity with a feature. It's an atrocious language, it encourages the worst sorts of programming, and it's so feeble that doing anything useful in it is painful at best and discouraging at worst.

On the C64 with limited memory BASIC was a lot better than nothing, but today, given the vast wealth of documentation, of videos that explain fundamental concepts, there's no need for something as dumbed down and useless as BASIC.

Lua, Python, Node.js, Ruby, _anything_ modern on the Pi is a vastly better learning experience because not only can you pick up the basics, but you can apply that to real-world problems, possibly even get a job, and carry on learning.

With BASIC and hacking around in ignorance you're going to do everything wrong, and reversing all those bad habits is really tough to do. It takes years.

If you want to learn how to program the C64, stick to assembly. This used to be a dark art back in the 1980s, reference material was thin, examples scarce, but now there's an enormous wealth of that you can pick apart and learn from.

<comment><USER10> BASIC on an 8-bit computer is a bit closer to the underlying hardware than C and it's a worthy educational experience. You have to be clever to work with all global variables and subroutines instead of functions and you'll have to invent your own stack to express recursion.

<comment><USER9> > BASIC on an 8-bit computer is a bit closer to the underlying hardware than C > ...

Well, that's wrong. There's nothing about BASIC that has anything to do with hardware. If anything it made the computer feel like a rubber mallet when inside that hardware was some real power, if only you had the knowledge to unlock it. I always felt cheated, that no matter how well I knew BASIC my programs would be stupidly slow compared to someone who knew assembly.

C wasn't an option on something like the C64 since there was no C compiler. It was BASIC or, if you were bold, hand-written machine code. The tools were very primitive, very expensive, or both.

BASIC is junk. Get rid of it. Teach proper programming. If you really need to squeeze a lot out of your hardware, and on the C64 you absolutely need to, then it's assembly or machine language.

<comment><USER10> The point is not being fast, but easy. BASIC has GOTO and GOSUB, IFs (which take the place of conditional jumps), no stack (that you can use yourself), no named functions (except branchless one liners) and a meager set of primitive types which are handier than the 6502 registers. Ever tried floating point on a 6502? Even with the routines in ROM, it was all pain and suffering.

I am sorry you had such a bad experience with BASIC, but, for teaching the very basics of programming, it was a useful tool. In order to teach assembly you'd need a text editor, an assembler and a floppy disk. BASIC came up when you powered your machine on.

I used Aztec C on the Apple II and, while it was painfully slow, it was a reasonable C for the time and, IIRC, it had a C64 version.

<comment><USER9> To be specific, I'm talking about _today_ and how BASIC is an anachronism, not unlike making your own natural pigments just to learn how to paint.

BASIC was nothing but bullshit, it taught me nothing other than computers are obnoxious and difficult to use. I spent several years "learning" how to program in BASIC, later QuickBASIC, and the stuff I cranked out was atrociously bad. The only excuse I have is that I was coding like they did in the magazines I bought, their code was a disaster as well, and I had no way of knowing there was a better way.

It was only when I switched to Pascal (via TurboPascal) that I realized _how_ to program. At that point things started to make sense, and no longer was I feeling like a third class citizen: Programs in TurboPascal would run very quickly compared to BASIC. They were _compiled_. While the performance wasn't on par with C, it wasn't nearly as hard to get right as C was.

I wouldn't recommend Pascal today, but there's other languages that are as good or better.

Today there's absolutely no reason to teach BASIC as an introduction to programming. You're only going to hurt people.

<comment><USER10> Would you have realized how Pascal is better without struggling with BASIC first?

<comment><USER9> Would you have realized how C is better without struggling with machine opcodes first? Would you have realized how x86 is better without struggling with a 6502 first? Would you have realized how DRAM is better than struggling with drum memory first?

You can start anywhere _if_ you like what you see and feel motivated to learn more.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> Should've gone to X instead:

[https://en.wikipedia.org/wiki/X_(demoparty)](https://en.wikipedia.org/wiki/X_\(demoparty\))</comment>


List of cool stuff you can do with Core ML and iOS 11(welcome contribution) - <AUTHOR> https://github.com/likedan/Awesome-CoreML-Models/blob/master/README.md <comment><USER2> Don't have a developer account yet. Looking forward to give a try after Xcode 9 releases!!

<comment><AUTHOR> Soon will happen.</comment></comment>


$200B pension fund manager deletes Facebook account, citing offensive management - <AUTHOR> https://www.cnbc.com/2018/04/05/calstrs-cio-deletes-facebook-account-citing-offensive-management.html <comment><USER2> Isn't there a distinction between deactivation and deletion of your facebook account? If he deactivated it, then it still exists?</comment>


Turnitin and the Debate over Anti-Plagiarism Software (2014) - <AUTHOR> https://www.npr.org/sections/ed/2014/08/25/340112848/turnitin-and-the-high-tech-plagiarism-debate <comment><USER2> My university used turnitin (I assume it still does), largely to check journal paper submissions and theses.

This was pretty frustrating, as my undergraduate thesis had some publishable work in it. When I reformatted the thesis up so that it would fit the standards of a journal, I still ended up getting a pretty high match...to my own work (the thesis). I ended up rewording as much of the paper as I could, but I couldn't get the %match below whatever the threshold was. Eventually my adviser said "ok, that's good enough" because he could see that I was being accused of plagiarism against myself.

<comment><USER3> Obviously, there's a big problem with procedures in your university. The software did it job well finding what it should find, then a human should have looked at what it is, instead of you doing meaningless work of chasing lower match score.

<comment><USER4> It seems to fit in a larger anti-pattern of educational institutions and administrative ass-covering by using "objective" rules and scores to disguard any judgement even when it is obviously and hillariously wrong.

See Zero Tolerance for another example. I snark that the best antidote to this lack of discretion is to fire the management and replace them with a minimium wage position if they won't exercise any thought.

</comment></comment></comment><comment><USER5> Turnitin was very annoying to use back in my college days (roughly around when this article was published). So many mislabels of content being plagiarized even when I'd properly quoted/cited anything I added. It would even label sentences or phrases that are fairly common to communicate with as being copied from the internet.

Maybe it's improved since I graduated, but it definitely wasn't pleasant to use.

<comment><USER6> This has been my overall experience with it since it's inception. They have had years to improve, but just like Blackboard, they failed.

</comment></comment><comment><USER7> There was a push when I was in college to extend it to programming assignments, which at the time it was monumentally poorly suited to. It turns out there's only so many unique ways first years can write hello world in Java, or the Car make/model getters/setters. It also was prone to pull lines out of context like "Why yes, someone has written for(int i = 0; i < 100; i++) before".

By second year using it for code was abandoned as a failed experiment, thankfully.

Even for essays, it was quite fond of flagging the entire references section by finding each reference individually somewhere else.

</comment><comment><USER8> Turnitin is was and always will be complete FUD. Universities use it to pretend like they care about plagiarism, while turning the other cheek when large groups of international students are caught blatantly cheating.

<comment><USER9> Is this a common occurence? My classmate was complaining to me back when I was in uni about how a group of students from her ethnic group were not punished when they were caught cheating and so did a PhD student about a similar event.

<comment><USER8> I wouldn't blame a particular ethnic group, I think its purely due to the economics of international students paying 2x or more in tuition compared to other groups. At my school international students were paying 70k-80k a year, not to mention their contributions to the local economy in terms of rent, food, cars, etc.

Likely universities always want to keep statistics of plagiarism, drop-outs, and graduation rates, at certain levels as well.

</comment></comment></comment><comment><USER10> I had the displeasure of using turnitin for a software engineering college course semi-recently (Long after this article was written).

It was a nasty mess that would scream at you whenever you quoted a source or referenced something and would get snagged on small commonly used interjections ALL THE TIME.

Some people ITT are saying how it's still up to the teacher's discretion whether you've plagiarised or not ...NOPE!

At the college I went to (and this seems to be a common experience looking at the thread) there were hard limits of how much it could flag before you had to resubmit. What a joke.

The teachers were nice and would let it slip if it was really stupid but it still was russian roulette any time I had to submit something. NOT FUN.

</comment><comment><USER11> > The fact that anti-plagiarism software can't tell the difference between > accidental and intentional plagiarism is just one reason that Rebecca Moore > Howard, a professor of writing and rhetoric at Syracuse University, is not a > fan. Here's another reason: "The use of a plagiarism-detecting service > implicitly positions teachers and students in an adversarial position," > Howard says.

I don't understand this objection at all. It's just a tool. It tells the teacher "this was plagiarized". It's then up to the teacher to ascertain the moral character of the plagiarism, i.e. if it was intentional or not.

<comment><USER12> _> I don't understand this objection at all._

They feel policing plagiarism turns them into a parking warden or a cop, when they want to be more like a coach, older student or parent.

I assume that's important, if you're hoping to have productive exploratory discussions in class, rather than the classic take-notes-in-silence type lecture.

<comment><USER11> If you aren't going to police plagiarism why are you assigning essays at all though?

<comment><USER13> "Police" being the verb in this situation is exactly the problem, just like with actual crime. Like another comment mentioned, this calls more for coaching or mentorship than rule-enforcement and punishment. Aside: I think we should stop using the word "police" for things that are not law- enforcers/punishers.

<comment><USER11> But that is completely orthogonal to the issue of _detection_. In order to coach/mentor correctly, you need to know what it is your students are doing. It's still up to the teacher how they respond to plagiarism. But if you don't even know your students are plagiarizing, you're hardly in a position to coach them.

</comment></comment></comment></comment></comment><comment><USER14> Ahhhh, turnitin and company. The majority of students just want their damn degree and so the majority of students use translation plagiarism, heavy rephrasing and other simple tricks to create yet another useless paper / thesis no one will ever read. If they even write it themselves...

I am sorry for the coming generations that have to deal with more and more of this nonsense but I am optimistic that turnitin will eventually get so clogged up content, that essentially everything becomes a plagiate.

<comment><USER15> Well GPT-3 seems to be capable of producing at least C level essays...so how many weeks are we away from AI just infinitely generating these things?

</comment></comment><comment><USER6> This software was absolutely hated by the students. Not only is it difficult to use for some who have trouble with technology, but it would often score a persons paper with wildly inaccurate remarks to the point that the instructor accused the person of cheating. It made many students cry.

Edit: I'm not sure why my comments are coming up as "dead" but only when logged out. Seems like I am shadowbannned, for some odd reason. Might have to make a new account?

<comment><USER16> You have slightly negative karma. If you make good comments or submissions so that you collect karma or vouches from other users then the situation will improve. I would not encourage you to make a new account since the newness of an account seems to count against it.

<comment><USER6> Good to know thanks</comment></comment></comment>


RWW Writeup of Duck Duck Go - <AUTHOR> http://www.readwriteweb.com/archives/duck_duck_go_silly_name_interesting_search_engine.php

<comment><USER2> Congrats to epi0Bauqu on the article! Proof that hard work pays off, Duck Duck Go is looking better and better with time.

<comment><USER3> Thanks! Of course any feedback is greatly appreciated (here or otherwise).</comment></comment>


Show HN: Pluggable Paxos in Go - <AUTHOR> https://github.com/RichardKnop/paxos <comment><AUTHOR> Fell free to review my code and suggest any changes or improvements. The goal of this project is to provide a generic and decoupled Paxos algorithm implementation which can be imported from other projects and used for distributed consensus.

For example, if you are building a key/value store or blockchain, this could be of interest. Networking and agents are outside of scope for this project but I have included a simple RPC agent system for testing purposes.</comment>


Tesla is about to turn the car insurance world upside down - <AUTHOR> http://www.businessinsider.com/tesla-liberty-mutual-create-customize-insurance-package-2017-10 <comment><USER2> It seems like little by little we will get to CAAS (Car As A Service) ...

<comment><USER3> Exactly. Order it with an app as needed without having to buy or insure anything yourself

<comment><USER2> >Order it with an app ...

... or more traditionally, with a phone call, a SMS or by simply going to a nearby CAAS kiosk ...

... wait a minute, is not this latter already existing and called "rent a car", "long term rent" or "full lease"?

<comment><USER3> Except you(or anyone else) probably won't be driving.

</comment></comment></comment></comment><comment><USER4> "Tesla hopes to one day bundle the price of insurance and maintenance into the price of future vehicles." now that'd be great!

<comment><USER5> Why? Seems just vertical monopolization to me.</comment></comment>


Hello World: Explore the Tech World Outside Silicon Valley with Ashlee Vance - <AUTHOR> http://www.bloomberg.com/features/2016-hello-world/ <comment><USER2> With posts like this it's better to submit the most interesting example of content from the site instead of the site itself. Then people have something specific to discuss, which makes the thread more substantive. The appearance of a new web site isn't intellectually interesting, but something on the site might be.</comment>


What the iPad Can't Do - <AUTHOR> http://www.nybooks.com/blogs/nyrblog/2010/jun/08/what-ipad-cant-do/ <comment><USER2> Maybe replacing textbooks is not what the iPad is not aiming to do. For those who are not in the know (pun intended) check out <http://kno.com/> which is actually aiming to replace textbooks.</comment>


New A.I. Tool for Web Designers (heyleia.com) - <AUTHOR> An email from Tim Roberts <email@example.com>:
My name is Mitch, and I'm the marketing director here at Vybe Software. We've recently created a tool specifically for web design companies like yours, and we'd like to pay you to use it. It's called Leia, and it uses A.I. to build, publish, and host websites.
Since June, we alone have added over 25,000 active hosting clients with Leia. Our current focus is now on establishing partnerships with creative agencies like yours who excel in the customer-relationship side of this space. We have no doubt that Leia will save you guys some development time, increase the number of clients you can take on, and add some more volume to your residual income.
I'd love to learn a bit more about you to see if this might be a good fit. Do you have time for a quick 15-minute call on Wednesday, Thursday, or Friday this week?
Thanks, Mitch
Mitch Marchand Director of Marketing P: 603-867-1558
https://heyleia.com/ <comment><AUTHOR> Its not clear how much they are paying, and what is required. They also did not provide any data to backup their claims of their product providing more revenue for your business. Im curious about what it cannot do. Can it do: shopping cart, what types of payment, security, ease of editing once a site is live, etc?

You may be curious to ask them the questions above - and more details about how the AI and the tool works. I dont think you could fit all that in a 15min call.

Why do they not provide any examples of websites that they have created?

</comment><comment><USER2> The pricing screen didn't scroll when I went to it. so I couldn't see the pricing. Also, when it asked for a captcha I wasn't able to enter it.</comment>


Ask HN: What did you do when your work wasn't fulfilling anymore? - <AUTHOR> <comment><USER2> Started a side-project. Focused more on the monetary, business and marketing side of things and left all of those "YOU MUST BE USING _______ FRAMEWORK" fallacies at the door. Note that this turned into my full-time job about a year later and I haven't looked back at all.

<comment><AUTHOR> Congratulations on your success!

</comment></comment><comment><USER3> Kept on, because I was "doing good work for society" and because people depended on my work (though they were unaware of that). Ignored signals of health and sanity and life impact until it was no longer possible to do so. Took about 10 years to go from from "this isn't fun anymore" to "i cannot physically do this anymore"

My advice: don't do that. do _something_ to change the situation. you might make it worse but you won't be gently boiling yourself without noticing.

</comment><comment><USER4> Unsubscribed from working unfulfilling jobs, unsubscribed from anything that would require me to have one, started coding personal stuff.</comment>


Ask HN: Which subdomains do you deny/block for your SaaS applications? - <AUTHOR>

I'm working on a blacklist here: https://github.com/sandeepshetty/subdomain-blacklist/blob/master/subdomain-blacklist.txt<p>What does your list look like? <comment><USER2> A much smaller subset of yours.

Coincidentally, I was using your Shopify API client just yesterday. Thanks for that.

<comment><AUTHOR> Looks like you're a solopreneur like me. Would love to connect and exchange notes.

<comment><USER3> I doubt he runs w3counter alone?

<comment><USER2> No, sandeepshetty is right.</comment></comment></comment></comment>


A little Golang way - <AUTHOR> https://www.aerofs.com/blog/a-little-golang-way/ <comment><USER2> There have been several blog posts and conference presentations with a similar theme -- "Go is efficient, especially compared to X."

I know it seems like hype, but I encourage others to try Golang out, maybe even slap a web app together with it. What you'll find is that your Go app will be extremely efficient and performant. It's kind of unfair to compare Go to many of the other languages of the web because it is compiled, which is a huge reason why it is so performant. So rather than compare Go to other languages, I encourage you all to give it a try. If you already program, working on a small Go side project will get you up to speed quickly and you'll learn about some of the awesome packages individuals from the Go community have put together for us.

Disclaimer: I do not work for Google. I write Go code and enjoy it. I think others will too.

<comment><USER3> _> What you'll find is that your Go app will be extremely efficient and performant._

This is true, for sure. But my experience--and I've written plenty of Go, though I find it unpleasant to write and think about for all the usual reasons that Go partisans roll their eyes and so would rather deal with it as artifacts rather than actually writing it--has led to watching lots of developers make mudball codebases in the process (while blogging very heavily about how great it is three weeks in, and less a year-plus in). A pursuit of faux-simplicity has led to what I see as reinventing a lot of Java-1.4-era (because the language itself is essentially that) design patterns--and we should be reminded that design patterns exist to address defects in tooling-- that more expressive languages have managed to avoid; the general desire for smaller applications helps to some extent, but software has this tendency to grow that I don't think Go gives you the tools to effectively manage and maintain. Reasonable minds can differ, of course.

Past that, while I think it's an alright choice for company-internal deployable products--web servers, worker nodes, etc.--I have straight-up problems with it being the new devops tool of choice. Statically linking your SSL library makes you an asshole when it inevitably fails and now an application has to be regression-tested so that new features and new bugs don't hose you just because that's the only way to upgrade Heartbleed 2.0. (Go also discourages program extensibility through components and rather as recompilation; the stuff Packer and Terraform do to provide "plugins" that the same company's Vagrant just did with a `require` is gross and, to my mind, completely foolish.)

So I wouldn't say it's _hype_ , but I would say it's not all _true_ , either.

<comment> grey-area _reinventing a lot of Java-1.4-era (because the language itself is essentially that) design patterns_

Really? Java 1.4 had an extensive and consistent standard library, implicit interfaces, composition instead of inheritance, static builds, and built-in concurrency?

Go is not early Java, it's more like C 2.0, and I don't really see anything faux about the simplicity, it really is pretty simple, perhaps too simple for some tastes, but it's not pretending to be simple, nor is it simplistic. Which specific design patterns did you have in mind?

<comment><USER4> > extensive and consistent standard library

yes

> implicit interfaces

no

> composition over inheritance

yes

> static builds

no

> built-in concurrency

sure, with an 1:1 thread model as opposed to an M:N thread model.

M:N is not always a clear win over 1:1:

[https://mail.mozilla.org/pipermail/rust- dev/2013-November/00...](https://mail.mozilla.org/pipermail/rust- dev/2013-November/006550.html)

[http://xiao-feng.blogspot.com/2008/08/thread-mapping-11-vs-m...](http://xiao- feng.blogspot.com/2008/08/thread-mapping-11-vs-mn.html)

Also, to be very clear, Java's threads ("green threads") were _originally_ M:N but they switched back to 1:1.

<comment><USER5> I don't know if the programming model of threads and channels that's used by haskell and golang strictly depends on the existence of M:N threading, but it sure is nicer to use than the model in java/rust.

<comment><USER6> Go's channels/threading model already exists in Java:

[https://github.com/puniverse/quasar](https://github.com/puniverse/quasar)

<comment><USER7> It wasn't immediately obvious from scanning that link. Does it provide channel select? Because that's the hard part. Threadsafe queues are easy, select on them is hard.

<comment><USER8> Of course it does.

Java: [http://docs.paralleluniverse.co/quasar/javadoc/co/parallelun...](http://docs.paralleluniverse.co/quasar/javadoc/co/paralleluniverse/strands/channels/Selector.html)

Clojure: [http://docs.paralleluniverse.co/pulsar/api/co.paralleluniver...](http://docs.paralleluniverse.co/pulsar/api/co.paralleluniverse.pulsar.core.html#var- select)

We'll have a nice slect API for Kotlin, too, very soon.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> "Code size was reduced by almost half, from 175 lines down to 96."

Hm, I how can we take a 175 LOC project as something relevant in any way?

<comment><USER10> The relevance is that even a 175 LOC project in Java takes up enormous memory and disk footprint -- that the JVM is this super-heavyweight thing that's really just inherently inappropriate for a lot of applications.

<comment><USER11> > The relevance is that even a 175 LOC project in Java takes up enormous > memory and disk footprint

_This particular_ 175 LOC Java project takes up an enormous amount of memory. For all you know it was just coded poorly and the Go one is a bit more reasonable.

> the JVM is this super-heavyweight thing that's really just inherently > inappropriate for a lot of applications.

The JVM introduces overhead but not so much that you can make these sorts of extrapolations.

<comment><AUTHOR> The footprint of this particular service could have been optimized in Java but:

      1. the JVM itself imposes a high floor (hotspot, many shared libs loaded, ...)

      2. the Java language is full of overhead at every level (boxed types are a pet peeve of mine)

      3. the Java ecosystem has a tendency to regard memory as an inexhaustible resource, which lead a lot of waste in many 3rd party libraries

The core point is that optimizing this particular Java program (and the others that followed) would have been more time-consuming than a Golang rewrite and would have probably increased the complexity whereas a Golang rewrite reduced it.

Optimization was the original goal, increased maintainability was a pleasant result.

<comment><USER12> Point 2... yeah, that's one of my major problems with Java. Unnecessary boxing and the unreasonable amount of complexity if you work around it. In any type of Object collections, it consumes memory, stresses garbage collector unnecessarily and causes a lot of CPU cache misses.

Value types would help so much with this issue. I know they're coming one day. I hope Java/JVM can replicate memory efficiency and cache coherence of C++ std::vector for small objects.

</comment></comment></comment></comment></comment><comment><USER13> I guess nobody will be saying that Java is lightweight, but the actual results of porting from Java to Go will vary wildly from usecase to usecase.

Both examples mentioned in the article (the 175LoC program and the CA) sound like very simple programs. E.g. I once wrote a C program which watched some directories with inotify and compressed new files using zlib. The memory footprint was 350KB. Obviously an empty JVM alone would use 100x more RAM. This static ~30MB overhead might be important in some cases and not relevant at all in others. The incremental (per-object) overhead is probably more relevant to almost all real-world usecases which are a bit more complex then the ones mentioned above.

Also - care should be taken not to compare apples (no TM) to oranges: e.g. if you use a huge ORM in Java (which among other things also caches results of each query) and then do a simple SQL query in the new implementation, would be strange to expect those two to perform similar. This happens quite often with rewrites - they almost always aim for simplicity, do short cuts, get rid of "unused stuff". Basically a rewrite from Java to Java will also usually improve performance.

Must-read about rewrites: [http://www.joelonsoftware.com/articles/fog0000000069.html](http://www.joelonsoftware.com/articles/fog0000000069.html) . Though, I guess, everybody has already read it.

</comment><comment><USER14> At my organization we have several Java-based services (some of them can even qualify as a form of microservices, if you squint your eyes). We have found that when you have very good developers and you write almost to the letter of the spec, Java can easily provide a stable base (which is probably true of any language/runtime/library).

However, we've been eager to try Go in several places. Believe it or not, what has held us back is the lack of a solid LDAP library. We could/should scratch our own itch and be done with it, we lack the time... still so many things to do! In the mean time, for us, Java support for LDAP is nothing short of stellar; and has been for years.

</comment><comment><USER15> More and more I hear about Go, I feel more convinced that it would be worth giving it a shot.

Can you share what the microservices are doing? What are they for?

<comment><AUTHOR> At this point we have 6 microservices written in go in the appliance:

      - team-server probe: already mentioned in the blog post.
        Determines if any installed Team Server is down.

      - ca: as mentioned in the blog post, as simple Certificate Authority

      - charlie: a checkin service. Desktop clients periodically post to it
        to signify they are up. This data is used in each user's device list
        to show if the device is up and which ip it was last seen from.

      - auditor: takes audit event in an HTTP endpoint and forwards
        them to a raw TCP connection as expected by splunk and co

      - valkyrie: a relay server used for data transfers when desktop
        clients cannot establish direct TCP connection (more about that
        in a future blog post)

      - lipwig: a messaging/pubsub server used for peer discovery
        and notifications (more about that in a future blog post)

</comment></comment><comment><USER16> I've been writing Go for some time. Just finished writing a small CDN for the company I currently work for. It's It's a fast language that performs well in systems programming (what it was made for). But boy is it ugly. Not verbose like Java, but ugly to write and read. It does force a good coding convention because otherwise you end up with a pile of ugly code. People seem to be bent on writing it like 80s C. Full of single character variable names and odd function naming. Dunno if it's just my experience. I do like the fact that it resembles python in how it feels. Overall I'd say it's a nice language that is not for everybody. I am playing with Elixir these days. Go is good enougb, but I'm not happy with it being that.

</comment><comment><USER17> Something troubles me about this article. I hope I'm misunderstanding it.

It's stems from the following quotes; knowing this information, why do AeroFS still think Docker is a good fit for their use-case?

> However, after our move to Docker, we noticed a sharp increase of the > appliance's memory footprint.

> ...

> We identified several major factors behind these symptoms:

> 1\. an increase in the number of running JVMs, as each tomcat servlet was > placed into a separate container

> 2\. reduced opportunity for the many JVMs to share read-only memory: the JVM > itself, all the shared libraries it depends on, and of course the many JARs > used by multiple services

> 3\. memory isolation could in some cases confuse some sizing heuristics, > which lead to larger caches being allocated by some services

<comment><USER18> Presumably Docker offers some benefit. It's weird that you and several others have jumped to the conclusion that it's obvious they should get rid of Docker. I would say: knowing this information, why do you still think java is a good fit for their use-case?

<comment><USER17> Because:

a) Their service was already written in it b) Their service was already performing adequately before they brought docker into play

But those aren't answers to your question. Java may have been a __terrible __fit for them, but their decision to move away from it was not motivated by that -- it was motivated by their already-written, already-performing Java code no longer performing as well, __because of Docker __.

The only question is, does Docker bring them __enough __benefits to justify reimplementing large amounts code, in a new and unfamiliar language? Maybe it does, but somehow I doubt it.

</comment></comment></comment><comment><USER19> I find this article confusing, in the first part the writer talks about Tomcat and servlets, in the second part he talks about reducing the LOC from 175 lines to 96 by using Go.

To me it seems the Java solution was wildly over engineered and probably could have been refactored to not even need Tomcat.

</comment><comment><USER20> I am not sure I understand where the issue is Java pure and simple, and where the issue is that Java services were impaired by being wrapped by Docker?

"Everything was fine until we switched to Docker" makes me think the trouble may not be all Java. Anyone have educated thoughts on this?

</comment><comment><USER21> Wow that pun in the title is painful.

<comment><USER22> Theres a pun in the title?

<comment><USER23> It's from a saying... a little goes a long way.

<comment><USER24> Thank you; I didn't understand it either.

</comment></comment></comment></comment><comment><USER25> Can anyone shed some light on how/why running the same Java apps in a docker container significantly increased the memory footprint?

Is JVM overhead shared when multiple Java apps are being run on the same machine?

<comment><USER26> A lot of it is, yes. The JVM loads a large number of largeish class files when it starts; these contain implementations of the standard library and whatever else is on your classpath that you've imported. These have the nice property that they're read-only, though, so multiple JVM processes can safely share them. When you move to sandboxing each JVM off by itself, you lose the ability for them to share memory (which is, in a sense, a _feature_ of sandboxing), so now each of them has to take the 50-100MB hit of those formerly-shared memory regions.

(Note that the huge size of the classes is also the big reason why JVM startup time is so crap; another reason that multitenant JVM systems are great is that every process after the first starts much faster)

</comment></comment><comment><USER27> Anecdotes like this makes me wonder how much funding money and electricity could be saved if people migrated en masse from Ruby/Python/Something else to Go.

(Edit: not meant to be a political statement, more of a practical observation. I only recently started using Go.)

<comment><USER28> That may be one of the bigger chances for go: mobile. After all being more efficient on mobile translates into longer battery life and go potentially has a huge advantage over the current java (ok, not java) based environment on Android. For google this would be a triple win, get out of the Oracle mess entirely, give their mobile developers a super fast toolchain and give the end users better battery life.

<comment><USER29> I love Golang, but its ain't very expressive, so it cannot be a good match for writing UIs. And Swift is much closer to Rust than to Go, IIUC...

</comment></comment></comment><comment><USER30> I appreciate you publishing this experiment as it will show Java's problems for what they are. However, a real test of Go's safety and efficiency would be a comparison to a similar language such as an optimized Wirth language, a subset of Free Pascal (Delphi-style), typed LISP (eg Racket), Julia, or Ada. People keep forgetting about the last one in safe, efficient, systems programming despite it doing for a long time what Go and Rust hope to do eventually. Its long-time use in embedded systems indicates it can be quite efficient.

Regardless, Go certainly improves on the reliability of applications vs C++ while being much more efficient than .NET or Java.

</comment><comment><USER31> I've got a little Swift Language "search engine" that I built with Go on App Engine. I haven't crawled any sites (yet). I simply created a Go data structure to do in memory searches because I didn't feel like using Google's data store.

Here's the site: [http://www.h4labs.com/dev/ios/swift.html](http://www.h4labs.com/dev/ios/swift.html)

Here's the data: [https://github.com/melling/SwiftResources/blob/master/swift_...](https://github.com/melling/SwiftResources/blob/master/swift_urls.tsv)

I'm approaching 1400 URL's and it's still snappy. I was hoping Go's claimed "efficiency" would keep freely hosted a bit longer than Python.

<comment><USER32> >I'm approaching 1400 URL's and it's still snappy. I was hoping Go's claimed "efficiency" would keep freely hosted a bit longer than Python.

That is exactly why I picked my Go for my latest side project.

I just hope the framework I'm using isn't the bottleneck, because I really hate writing pure Go servers.

</comment></comment><comment><USER33> Java's main feature is compile once - run (almost) anywhere. From embedded to mainframe as long as a JVM is available.

How does Go stack up for cross-platform development? Does every application and library have to be (re)compiled for the target platform?

What about support for alternative architectures (ARM, PowerPC, etc)?

<comment><USER11> Go does require recompilation for every platform, but I'll give them this, it's very painless. Apparently in 1.5 you can just set an environment variable for your architecture and one for your OS and you're good to go.

</comment></comment><comment><USER34> > Resident memory usage dropped from 87MB down to a mere 3MB, a 29x reduction!

This isn't so much Java vs. Go as it is JIT/interpreted vs. AOT-compiled. The numbers are entirely typical across a wide range of such comparisons.

With an interpreter or JIT, you need to load all your code at startup and process it. Generally, _all_ of your dependencies need to be loaded and parsed upfront, either converted to some internal in-memory representation or JIT'd directly to machine code. This will allocate a bunch of heap structures during the processing, and the end result is a bunch of data that needs to stay resident and can't easily be shared with other processes.

With AOT, you mmap() in a file. The OS only pages in the code you execute, and can page it back out as needed. Pages are shared between all processes running the same executable.

At sandstorm.io our rule of thumb is that an app written in Node, Ruby, Python, PHP, etc. will take 100MB of RAM while an app written in C++, Rust, or Go will take 2MB. Since Sandstorm runs per-user (and even per-document) app instances, this is a pretty big deal.

The good news is that [https://github.com/google/snappy- start](https://github.com/google/snappy-start) _should_ fix this problem: by checkpointing the process after it finishes its parsing/JITing but before it starts handling requests, we can get an mmap-able starting state that is very much like an AOT-compiled binary. At least, in theory -- there's still a bunch of work to do for this to actually work in practice.

> The resulting docker image shrunk from 668MB to 4.3MB

While I would expect the Go image to be smaller (since Go builds static binaries, so literally all you need in the image is the binary), I suspect that the 668MB Java image was at least 90% unnecessary garbage that was not actually needed at runtime. Unfortunately the package managers we all use are not optimized for containers; instead they evolved targeting systems with dedicated disks that can easily absorb gigabytes of bloat.

In Debian, for example, every package implicitly depends on coreutils. That's perfectly reasonable when installing an OS on a machine: you almost certainly need a working shell to boot and administer your machine. But a _container_ can get by just fine without coreutils, and a typical web server probably (hopefully) doesn't need to call out to a shell. Even if a shell is needed, busybox/toybox is probably sufficient and will take a lot less space.

Packages also often contain things like documentation, unit tests, etc. which obviously aren't needed in a container.

For Sandstorm.io we deal with this problem by running the app in a mode where we trace all the files it actually uses, and then we build a package containing only those. It mostly works and manages to keep packages reasonably-sized, but it does lead to bugs of the form: "I forgot to test this feature while tracing, so the assets it requires didn't make it into the package." We're looking for better options.

<comment><AUTHOR> > This isn't so much Java vs. Go as it is JIT/interpreted vs. AOT-compiled. > The numbers are entirely typical across a wide range of such comparisons. > > [...] while an app written in C++, Rust, or Go will take 2MB. Agreed. As > mentioned in the blog post, I considered Rust but decided against it because > of I found it much less mature than Go. I did not consider C++ because, as > mentioned in the blog post, part of the point was to experiment with new > language/tools and even though I consider myself proficient with it, I > learned the hard way that the lack of memory safety is rarely worth it.

> I suspect that the 668MB Java image was at least 90% unnecessary garbage > that was not actually needed at runtime. Unfortunately the package managers > we all use are not optimized for containers Exactly. That was part of the > point of this blog post, which I may not have been successful at getting > across. Switching to go was, if not _the_ path of least resistance to solve > this issue, at least one of a few relatively easy routes. It also happened > to be a great deal of fun.

<comment><USER35> I assume you didn't use the normal Dockerfile-based build system to build your super-small Docker images for the Go-based services. So how did you do it?

<comment><AUTHOR> We're not doing anything too fancy. Basically, we spawn a container to build a statically linked binary and do a regular Dockerfile-based build inside that container. The result is an image which contains only a single binary (any maybe some static assets like config files or images).

We're planning to open source our build script shortly.

</comment></comment></comment></comment><comment><USER36> I'm all for replacing java bloat with a little bit of go, but it seems like the cause of the bloat becoming a real problem was hopping on the docker bandwagon, for a collection of services that always run together in an appliance and really benefited from being hosted in a shared JVM?

Isn't the JVM + servlet container thing supposed to be able to isolate the different services? They get their own bunch of threads, and their faults probably shouldn't crash other servlets?

<comment><USER37> You should read Sun's J2EE specs. There is little semantic distinction between a stateless session bean and a container hosted micro-service. The specs were never fully grasped (imo) by the Java community and those who got it (per gossip I heard) -- appserver vendors e.g. IBM, JBoss, etc. -- effectively crippled the spec by resisting the completion of the APIs that would commoditize their containers.

Sun was really ahead of the game in various fronts.

<comment><USER38> So true. I had to read the entirety of the JSP spec (and a few others) when I was an intern to help the company do some static analysis things. I also read a good chunk of Tomcat. Sun had this grand vision of App servers which you could just push code to and it would run completely isolated. The app servers where supposed to be spec compliant meaning your app could run on any implementation. But, and this is what bit the company I was working for, all of the implementations add lots of non-standard bits and broke standard bits. This meant that if you had written your app to go on WebSphere there was essentially no way it was going to run on TomCat without modification.

If Sun had more tightly controlled the marketplace for these things I think the whole ecosystem would have been more robust.

</comment></comment></comment><comment><USER39> How tied is Go into Google? What if Google drops Go?

<comment><USER40> You're probably being downvoted for off-topicness, FYI, since this comment is equally germane to any mention of Go. That said, I feel it is a comment in good faith and deserves an answer.

Question #1: How invested should you model Google as being in Go's future? Answer: _Extraordinarily invested._ They have a whole lot of code written in it, most of which the world will never hear about, and which powers services that they will continue running until the sun goes nova. Google will likely continue maintaining and extending Go programs (as well as C++, Java, and Python) for the foreseeable future.

Question #2: Can Go survive without Google's corporate backing? Answer: Go is an OSS project. Like many OSS projects, it receives a substantial amount of support from corporate interests. Go is not uniquely a Google priority -- many organizations like having a systems programming language which has its feature set. In the absence of meaningful support from Google, Go code existing as of August 2015 would continue to function. Further versions of the language/toolchain/etc would have substantial question marks about them, but the community feels large enough that this would be a Significant Event rather than a death knell.

Does that help?

<comment><USER39> I'm not sure if this will help me. I guess I'm in a programmer midlife crisis. Every new thing is potentially a waste of time because you can't predict if it is still around in 2 years. And with Google you know that they invest millions of dollars in projects and then abandon them.

Would I be better off maintaining decade old COBOL projects? Sometimes I think so. Other times I'm glad I can chose the technology I want to solve the problems at work.

August 2015. 31 years since my first computer.

<comment><USER41> You can never stop learning. Go is my current 'thing', at least for personal projects. But who knows what the landscape will be like in 5 years or 10.

For a while I though Haskell was the most awesome thing. Good Haskell code has a timeless quality to it (in a couple senses of the word). But I found adapting my thinking to it difficult, and it wasn't likely to be something I'd use at work then or now.

</comment></comment></comment></comment><comment><USER42> I have a question on Go's performance that I'd like someone here, who has experience writing programs in it, to help shed some light upon.

1) Go does not have a runtime. This means that there is no JIT to do any optimizations based on runtime profiling.

2) Go is also designed to compile fast. Since it compiles fast, the compiler's time budget to do compile-time optimizations is small and it probably can't do the best job possible.

Are these two points accurate? If so, how does Go perform as well as it is claimed to do? Where is the catch?

<comment><USER43> 1) Go has a runtime that's included in the binary that you get when you run `go build`. It takes care of garbage collection, goroutines etc. It does not do any JIT compilation afaik.

2) Go compiles fast because it gives up a lot of modern features (namely generics).

</comment></comment><comment><USER44> I always think Golang is a Java killer, but I think Java itself is more a Java killer than Golang.

</comment><comment><USER45> I hope that there is a compiled version of Scala.

</comment><comment><USER46> the only thing that's preventing me from jumping on the Go bandwagon is lack of a nice collections library (a la lodash).

<comment><USER47> That's due to a lack of generics. There are some workarounds like gonerics [1] -- a clever abuse of import declarations.

[1] [http://bouk.co/blog/idiomatic-generics-in- go/](http://bouk.co/blog/idiomatic-generics-in-go/)

</comment></comment><comment><USER48> I'll bite.

While it is absolutely true Go servers use less memory that classic servlet deployments, The question is what were you using at first place? where you using a big framework? with this or that big IoC container ? with a bloated ORM ? ... or where you using barebone jdbc and writing servlets without any framework? because essentially that's what you're doing with Go, Go has 0 big framework(and no Beego or Revel are not complex), 0 big ORM , 0 IoC container ... And while the Java culture is about heavy decoupling and reusability , the Go code culture is basically about writing correct code without thinking about re-usability at all, because often you just can't. So I'm curious. My point is didn't you reduce memory usage because Go forced you to write code a certain way ?

<comment><USER49> > the Go code culture is basically about writing correct code without thinking > about re-usability at all, because often you just can't. So I'm curious.

That's a very strong statement. Do you have evidence to support this? I don't code in Go right now, but have been keeping an eye on it as it continues to gather momentum.

<comment><USER50> Lack of generics can make it harder to write cleanly reusable modules in Go. I've noticed gophers are often less allergic to copy pasting code with tweaks (as long as it isn't too many lines) and don't mind rewriting similar code if it is obviously correct. It was a bit of a culture shock for me at least.

<comment><USER51> You confuse parametric polymorphism with reusability. The former is merely one of several ways to achieve the latter. The Go way for reusability usually consists of interfaces.

<comment><USER52> Interfaces and parametric polymorphism are not alternative approaches to solving the same problem, which is why many languages that feature parametric polymorphism also feature interfaces or similar constructs [0] (and why some languages that had interfaces for a long time later _added_ parametric polymorphism [1].)

[0] e.g., Haskell typeclasses

[1] e.g., Java

</comment></comment></comment></comment></comment><comment><USER53> You know, as fun as it sounds like this was, wouldn't the natural solution to the problem be to roll back the Docker rollout?

</comment><comment><USER54> And the cycle continues, from one crappy enterprise language to the next. I don't who said it, but whoever said "Go is a bold step backwards" is spot on.

<comment><USER55> There are times when a step back is the mandatory step to get a new perspective on things. Just sayin'.

<comment><USER54> But this is a step back to the cold, dead, static systems of UNIX. How about stepping back and taking a look at the dynamic, hackable environments of Lisp?

<comment><USER51> You should rather ask yourself why Lisp hasn't been able to attract the same large and active community in 5 decades that Go has been able to attract in 5 years.

<comment><USER54> Argument ad populum.

<comment><USER51> I'm not saying either of them is better because or the amount of people they attracted. I merely ask why Go managed to interest more people than Lisp in an order of magnitude of time less.</comment></comment></comment></comment></comment></comment>


Idiot's Guide to Understanding Today's Annoying Marketing Catch Phrases - <AUTHOR> http://www.flowtown.com/blog/idiots-guide-to-understanding-todays-marketing-catch-phrases <comment><USER2> Also, <http://unsuck-it.com/>.</comment>


JavaScript: Bad Practices - <AUTHOR> http://james.padolsey.com/javascript/javascript-bad-practices/ <comment><USER2> It's funny, Google search does almost all of these bad practices, and for good reason.

I think that as general principles, most of these are pretty good. What I don't like about the article is that most of these seem to be cribbed off Crockford's presentations, and I'm not sure the author understands _why_ they are good practices or when to break the rules. He also seems to lack an understanding of perspective: yes, counting downwards or manually CSE-ing expressions can save you a few cycles, but even with (pre-Chrome, FF3.5) JS being roughly 1000 times slower than C, the CPU consumption of your JS will still probably be dwarfed by its download time. Optimize for byte-size, not execution time, unless you're doing something like a JS game.

He also forgets the most important JS bad practice I know of: don't muck with the prototypes of built-in objects! Just say no: it makes it virtually impossible to build compatible libraries off of your work and version them in a sane way.</comment>


What Happens When You Try and Explain to Someone You Work in SEO - <AUTHOR> http://matthewlpowers.com/explain-you-work-in-seo/

<comment><USER2> Critical Friend: "Ah, so you spam Google so that I don't get the best results for my search?"</comment>


Charles Moore: From Forth to Stack Processors and Beyond (2013) - <AUTHOR> http://www.cpushack.com/2013/02/21/charles-moore-forth-stack-processors/ <comment><USER3> Part 2: [http://www.cpushack.com/2013/03/02/chuck-moore- part-2-from-s...](http://www.cpushack.com/2013/03/02/chuck-moore-part-2-from- space-to-greenarrays/)

</comment><comment><USER4> Anyone know how Chuck is doing these days? His site hasn't been updated since 2013, but I did see him in an interview 2 or 3 years ago where he seemed well.

<comment><USER5> He is retired, but he still mess with computers:

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

The sound is terrible at the beginning, it gets a little bit better later on. You can watch his demo if you want more details:

[https://www.youtube.com/watch?v=3ML- pJFa8lY](https://www.youtube.com/watch?v=3ML-pJFa8lY)

</comment></comment><comment><USER6> > In 1983 Chuck founded Novix, a company whose goal was to design a processor > that was optimal for use with FORTH, a true stack processor.

C started as a language that was designed to take advantage of an existing processor to produce fast code. That has worked spectacularly.

It seems, however, going the other way by first designing a language and then making a processor to make it fast does not work out. Other examples are the Lisp Machines and Java Processors.

<comment><USER7> I would guess that's for economic reasons rather than technical ones. I think that lispm were considered a great technical success by many people. The problem was that they were a lot more expensive, and much more limited in what you could do with them (not quite "You can program in any language as long as it's lisp, but you get the idea). That constrained them to a relatively tiny market, which in turn limited the amount of money that could go into R&D on the technology. So it was doomed to fall behind.

Java processors, I'm still not sure what the target market there was. It's easy to imagine at least an academic market for lisp machines, particularly during the 1980s and perhaps the early 1990s. But, particularly in a post-1995 software environment, it's hard to imagine a large-scale (as in, not embedded) computing project that can reasonably commit itself to Java, and it's also hard for me to imagine an embedded application where Java would be preferable to a low-level language. Which is also more of an economic problem - <USER2> might have worked really well from a technical perspective, but that doesn't mean they weren't a solution in search of a problem.

<comment><USER8> I joined the RTX team at Harris Semi after grad school. The only devt environment they could offer customers was (as I remember it) completely Forth-based - the barrier to entry was awfully steep, even for greenfield projects.

<comment><USER5> I learned Forth by myself with Pygmy Forth (no Internet, no book, just the docs of that system) when I was 15 or so. It was my third language after Basic and assembler.

I believe that the challenge of Forth is not to learn it, but to unlearn the rest. It is difficult to forget what you know. It's difficult to forget about dynamic memory allocation, classes, local variables, type checking... And frustrating too.

It's like video games. When I was a kid/teen, I could do over and over again a level until I succeeded. Not today. I would lose patience and bitch about the poor game/level design because I think I know better. I am more often wrong than right on this.

Adult programmers and engineers are like that. They think they know better, so when something is difficult for them, they blame it on the language. They don't have the _really_ open mind kids have. If there's a barrier to entry, it is not in Forth.

<comment><USER8> I think I agree with you. Forth was (fortunately IMO) the first language I really grokked after undergrad. Before that it was assembly, Apple Basic & (shudder) Fortran. I had zero exposure to CS 101. So Forth warped my brain in all the right ways.

</comment></comment></comment></comment></comment><comment><USER9> Has anybody done a study of dependencies of computations in real programs and compared the efficiency of a stack representation and a register representation?

<comment><USER10> A stack processor will always be less efficient than a two or three operand register-based processor. This is because all of the the registers can be used directly without any stack manipulations to access them, and the two or three operand operations usually include a move.

If you examine any stack language code, you should consider any stack manipulation to be a NOP type of inefficiency. And when a virtual stack machine is implemented on non-stack hardware, these inefficiencies are compounded.

<comment><USER11> I think Henry Baker argued otherwise saying that at the circuit level a stack processor can be designed to operate faster (like shorter path, less clock cycles) compared to register ones.

<comment><USER10> The problem with trivial ops like stack manipulations is that they don't really do anything useful, but they can take as long as multiply in the pipeline.

Stack machines made more sense when memory was limited (small opcodes) and there were no hardware multiplies, but these days they make no sense.

I don't understand all the vague nostalgia for something that never could have panned out outside of the creaky old Apollo flight computer or something.

<comment><USER11> Fair point. That said it's not nostalgia, Baker's article was about linear logic and that forth was naturally fit for this. Cue Rust borrowing and you see why it may be of interest (if baker was right of course).

</comment></comment></comment></comment></comment><comment><USER12> It's too bad you can't get a single chip conveniently soldered on a schmartboard ready to be used anymore [1].

That was a great deal for only 35$.

The only option now is to buy the evaluation board for close to 500$ or 10 chips for 200$ and do QFN soldering which can be a PITA.

[1] [https://schmartboard.com/schmartboard-ez- qfn-88-pins-0-4mm-p...](https://schmartboard.com/schmartboard-ez- qfn-88-pins-0-4mm-pitch-2-x-2-grid-bundled-with-a-greenarrays- ga144-ic-202-0048-02/)</comment>


Does a second monitor improve productivity? - <AUTHOR> http://www.romymisra.com/more-is-better/

<comment><USER2> I usually work with two monitors and a netbook.

Main monitor has my editor open for programming. Second monitor has a web browser (for references and such), terminal, PDF reader (for references and such) and music player. The netbook is used differently depending on what I'm doing, but I generally have a browser, a temrinal (usually more than one) and text editor open.

At the moment, my desktop is running windows and my netbook linux, so I often commit code to git, check it out on the netbook and do tasks that are easier on linux on the laptop (eg, anything where any sort of scripting would help). I use the desktop mainly for code editing and reading reference material because of the bigger monitors.

If I'm on IRC, its on the netbook. Chat is often open on both and I'll use whichever is most convenient at the time to reply to messages. I don't use social networks enough to say I predominantly use a second monitor for them. Youtube I use on all monitors equally (and not while working). Over all, social web is a very very small perentage of my second monitor usage.

</comment><comment><USER3> Just ask Al Gore

Here he is preserving the earth's precious resources :

[http://www.time.com/time/photogallery/0,29307,1622338_136300...](http://www.time.com/time/photogallery/0,29307,1622338_1363003,00.html)</comment>


Show HN: Liveform. Creating an Imgur Clone Using GitHub Pages and Liveform - <AUTHOR> http://blog.liveformhq.com/2016/11/27/creating-an-imgur-clone-using-github-pages-and-liveform/ <comment><AUTHOR> I am the founder of Liveform([https://liveformhq.com/](https://liveformhq.com/)) and would love your feedback. I also built ([https://getsimpleform.com/](https://getsimpleform.com/)) before that.

<comment><USER2> Didn't really take your own advice in keeping your API key safe :)

<comment><AUTHOR> Yeah :) In most apps this would probably be a page saved on your computer or behind basic auth or be a part of your static site generator.

</comment></comment></comment><comment><USER3> I thought the image was going to be sent to GitHub pages to be hosted there. Will Liveform support thousands of image uploads if it is hosting the images forever? S3 is not cheap.

<comment><AUTHOR> Storing images on GitHub is also a good idea :) At the moment Liveform hosts the images forever. However, you are right about the cumulative cost. I'll have to think about a proper archival mechanism. Thanks for your feedback :)</comment></comment>


Ask HN: What is your favorite book on web development? - <AUTHOR> <comment><USER2> Philip and Alex's Guide to Web Publishing: [https://philip.greenspun.com/panda/](https://philip.greenspun.com/panda/)

</comment><comment><USER3> Do you mean for the frontend- or backend-development?

<comment><AUTHOR> For both.</comment></comment>


Airplane is tripping on Google Maps - <AUTHOR> http://maps.google.com/maps/ms?ie=UTF8&msa=0&msid=100525912373773450724.000488df669787f20600d&ll=35.007009,-81.019181&spn=0.001619,0.003484&t=h&z=19 Weeeeeee <comment><USER2> interesting - i guess the rgb (and luminosity?) channels are captured in succession? was this captured by a satellite?

<comment><USER3> I think that is what happened here.

Google Maps uses, among others, images from the Ikonos satellite. Here are the specs: <http://www.satimagingcorp.com/satellite-sensors/ikonos.html>

It has a panchromatic sensor (greyscale) and red, green and blue sensors. Ikonos has a ground speed of 6.8 km per second, so even if the sensors are only a few centimeters apart, the images would need to be recombined at an offset. The offset would be tuned for static ground objects.

So I guess the ghosting is due to both the altitude and the speed of the airplane relative to the ground.

<comment><USER4> Because the direction of the offsets in the plane is at the plane's direction it is much more likely caused by the plane's speed than its altitude or the speed of Ikonos.

<comment><USER3> Or this plane happens to be travelling in the direction of the satellite?

EDIT: here's another plane with the same (grey, red, green, blue) sequence: [http://maps.google.com/maps?oe=utf-8&ie=UTF8&gl=us&#...
The sideways offset seems to be roughly half as much as the offset in the direction of movement of the plane, so at least that component would be due to the sensor platform moving...

<comment><USER5> That plane is headed straight for PHX, and isn't too far away, meaning it's probably traveling a lot slower than the other.

</comment></comment></comment></comment></comment><comment><USER6> Some similar cases:

<http://www.gearthhacks.com/dlcat24/Aircraft-in-flight.htm>

</comment><comment><USER7> "They've gone to plaid!" <http://www.youtube.com/watch?v=mk7VWcuVOf0>

</comment><comment><USER8> That's literally half a mile from where I grew up. If you zoom out a few times you'll see Lake Wylie. My mom still lives right there on Lake Wylie Drive right off of Mount Gallant.

What are the chances of that?

<comment><USER9> Given the US are approximately 10 M square km, the radius you define is .5 mile. Let's say that 1% of the US is populated like the area where looking at.

PI * 0.5 * (0.5 (square miles)) = 2.03417191 square km. let say 2. That's the size of the disc around the plane where your house could be.

10000000 * 0.01 * 2 = 200000 That's the total number of those discs fitting in densely populated US.

So 1 chance out of 200000, that's in the same ballpark of the size of HN community, so it was likely to happen to someone, but it had to be YOU ;)

<comment><USER10> see: <http://en.wikipedia.org/wiki/Birthday_problem>

<comment><USER11> Unrelated, because there are only O(N) possible location-hacker pairs, not O(N^2).

<comment><USER10> I have the suspicion that you have no idea what you are talking about and people are upvoting you for using landau-notation.

<comment><USER11> Actually, I used landau notation because it's the easiest way to explain why you're wrong.

I didn't use exact numbers because I have no idea what numbers you have to use to convince yourself that the number of hacker-location pairs would scale quadratically with the number of hackers, as in the birthday paradox. It makes absolutely no sense.

</comment></comment></comment></comment></comment></comment><comment><USER12> Holy cow, if you go into street view on Edna Dr. under the plane you can see contrails, probably not the same plane but still kinda neat.

</comment><comment><USER13> That's just plane gay...</comment>


A doctor and medical ethicist argues life after 75 is not worth living - <AUTHOR> https://www.technologyreview.com/s/614156/a-doctor-and-medical-ethicist-argues-life-after-75-is-not-worth-living/ <comment><USER2> It's the nature of all living things to extend their life as much as possible. It's in the nature of being human that we think what happens to most isn't going to happen to us - I am the outlier. I'm the one who's going to be vigorous and sharp as a tack until I'm 95. Thing is - _someone_ will be, and it might be me! So we keep going. Going and spending a lot of our country's financial resources.</comment>