Project Naptha: a browser extension that enables text selection on any image - <AUTHOR> http://projectnaptha.com/ <comment><USER3> Wow - this is amazing.

Right this very moment (well, a few moments ago when I wasn't procrastinating on HN) I was in the midst of extracting data from a client's old website in preparation of creating a new website.

A lot of that data is contained within images.

From a few preliminary tests, I'm hugely impressed. This seems on-par with any other OCR software I've used, and the fact that it happens in realtime in the browser is amazing.

I tried it on a piece of content I'd just had to type out, that was originally in an image. Typing out the content took about 10 minutes. Copying and pasting with Naptha, and then making some minor edits/corrections, did the same thing in about 2 minutes.

<comment><USER4> There's actually been a bit of research on the error rates you need to beat for OCR to be cost-effective vs. having people re-type. I don't have the references handy, but I believe it's generally cost effective to OCR with error rates up to nearly 2%, and most current "consumer grade" OCR is well below 1% error rates for scans that aren't absolutely atrociously poor quality.

My Msc thesis was on reducing OCR error rates by pre-processing of various forms, and while I managed to get some reduction in error rates, one of the things I found was actually that given how low the error rates generally was to begin with, you have a _very_ tiny budget in terms of extra processing time before further error reduction just isn't worth it - if a human needs to check the document for errors anyway, a "quick and dirty" scan+OCR is often far better than even spending the time to get "as good as possible" results. Spending even a few extra seconds per page to place the page perfectly in a scanner, or waiting a few extra seconds for more complicated processing, can be a net loss.

It's a perfect example of "worse is better": OCR, at least for typed text, is good enough today that the best available solutions aren't really worthwhile to spend resources on (for users) unless/until they give results so perfect it doesn't need to be checked by a person afterwards.

<comment><USER5> It was suggested to me by a friend that to get good OCR results, run it through the scanner/OCR twice, then diff the results. Usually one or the other will get it right, and if you run the two results through a difference editor like 'meld', it's quick to fix.

<comment><USER4> That may work for some cases, and especially with horrible OCR engines and low quality scanners, but frankly when I did my research into this, the results varied extremely little from run to run, and you could usually easily identify specific artefacts in the source that tripped the engine up (rather than problems with the quality of the scan). E.g. letters that were damaged, or had run together, creases in the paper etc.

With really low res scanners I can image it could make a big difference.

<comment><USER6> Back in the late 90's I worked for a company that did a lot of OCRing and they ran the same image through multiple engines and then manually corrected the results. I think they had 3 engines, all from different companies, which processed all images and put the results into a custom format. Human beings were then employed to manually merge and correct the final text. It worked fairly well, especially considering the hardware/software available at the time.

The biggest problem was stuffing too many files into an NTFS directory. Apparently, NTFS didn't like tens of thousands of files in one directory. :)

</comment></comment></comment></comment></comment><comment><USER7> Holy crap, antimatter15 does so many cool things. I keep finding things that are really cool and then scroll down to find they are all written by him. First Shinytouch, then Protobowl years later and now this. And he's only a year older than me (19) so it isn't that he's had more time. Check out his Github profile for more of his projects: [http://github.com/antimatter15](http://github.com/antimatter15)

<comment><USER8> I was amazed as well, same age as me. Now I feel challenged to execute even more of my ideas, well done Sir!

</comment></comment><comment><USER9> > Unfortunately, your browser is not yet supported, currently only Google > Chrome is supported.

FF 28 seems to be working fine with the "Weenie Hut Jr." version...is it just the add-on that isn't supported?

awesome tech, btw

<comment><AUTHOR> Yeah, I just haven't gotten around packaging the whole thing as a Firefox Addon. It's actually technically possible to run the whole thing on a normal unprivileged webpage (in fact, that's my development environment).

<comment><USER10> Please give us a Firefox version! I'm begging you!

<comment><USER11> Seconded. This is one of the most incredibly useful projects I've seen in a long time.

</comment></comment></comment></comment><comment><USER4> Reminds me of Powersnap on the Amiga. Many applications did their own text rendering without supporting cut and paste, and so this guy called Nico Francois had the bright idea of letting you select a region of a window, and matching the standard fonts against the windows bitmap.

Of course then it was "easy": almost all the text would have been rendered with one of a tiny number of fonts available on the system, with little to no distortion.

<comment><USER12> Powersnap was amazing. I seem to recall it was usually able to figure out what font each program was using and only had to search for letters for that specific font, and only fall back to a bigger search if that failed. I might be misremembering, but regardless, it was essentially as fast as any copy- paste today, in an environment where many programs weren't even written to support it.

Even though it solved a problem we don't usually have today (this story notwithstanding), it was still one of the most amazingly useful programs ever.

<comment><USER4> You're probably right - the manual says it did. It'd be able to get the last used font from the RastPort structure used to draw to the window [1].

If the window was rendered with multiple font that wouldn't be reliable, but I guess it'd likely be "good enough" to avoid a wider search most of the time.

[1] Here's the RastPort struct from AROS (open source re-implementation of AmigaOS): [http://repo.or.cz/w/AROS.git/blob/HEAD:/compiler/include/gra...](http://repo.or.cz/w/AROS.git/blob/HEAD:/compiler/include/graphics/rastport.h)

</comment></comment></comment><comment><USER13> This is great news for those who have to live with disabilities.

Maybe soon I won't feel guilty for leaving my alt attributes empty.

</comment><comment><USER14> @antimatter15, i have a project that does client-side image analysis and decompses document structures. it looks like your OCR code would be a great replacement for the server-side Tesseract ocr i currently use :)

here's what the project does now with js + web workers:

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

processing time is < 1500ms in Chrome and < 2000ms in FF

the code is open source, though using it isnt yet polished. i'm working slowly on a blog post series to detail how to use the lib(s). [https://github.com/leeoniya/pXY.js](https://github.com/leeoniya/pXY.js)

a walkthrough of the base lib is here: [http://o-0.me/pXY/](http://o-0.me/pXY/)

<comment><AUTHOR> The OCR code is an Emscripten port of the GPL-licensed Ocrad program. I published it on Github a few months ago, [http://antimatter15.github.io/ocrad.js/demo.html](http://antimatter15.github.io/ocrad.js/demo.html)

But in my experience, the recognition quality isn't good enough to replace Tesseract if you have that capability.

<comment><USER14> it would be very useful to maybe just use part of the code. (the part that detects where there is text, rather than what the text is)

</comment></comment></comment><comment><USER15> Doesn't work great. Went to reddit's advice animal page to try it out and it doesn't seem to work with livememe (I think they have an invisible layer over their images to try and block hot linking).

Here is a copy/paste example from imgur:

[http://i.imgur.com/sKQXx8v.jpg](http://i.imgur.com/sKQXx8v.jpg)

Top: vou SAID w[ W[R[ |[AVINĞ`ON TIM[TOAV

Bottom: TN[ FACTTNATl'M MAWING TNISM[M[ g INST[AD of DRIVING D[TERMIN[D TN#rWASA ll[

Maybe it needs to be a certain font for better results. Still pretty cool. Hopefully all the kinks get worked out. I would definitely find this useful.

EDIT: need to make sure the language is set to "internet meme" and it works much better.

<comment><AUTHOR> By default it uses Ocrad.js, a pure javascript OCR engine (ported via emscripten, see [http://antimatter15.github.io/ocrad.js/demo.html](http://antimatter15.github.io/ocrad.js/demo.html)). But if you right click on the selection and change the language to "Internet Meme", it should transcribe it correctly (note that this sends the selection off to a server for remote processing- It's not the default for privacy and scalability considerations at the moment).

<comment><USER15> Ah, much better!

Top: YOU SAID WE WERE LEAVING'ON TIME:TODAY

Bottom: THE FACT THAT I'M MAKING THIS MEME INSTEAD OF DRIVING DETERMINED THAT WAS A LIE

Next time I'll RTFM.

<comment><USER16> Mine automatically selects the appropriate language on the meme images. Including your link. Updated already?

</comment></comment></comment></comment><comment><USER17> Every time I click "Allow" on "Access data on all sites" for an extension I creep closer to my security hole paranoia threshold. If it was all in JS, who cares? But this sends ajax to remote servers of course.

Am I alone?

<comment><USER18> That is the wording that Google Chrome chose for "allow this extension to access the DOM on any page". It sounds bad but these are the permissions an extension needs to be able to access images and text on any page.

<comment><USER17> Yeah, or any password.

</comment></comment></comment><comment><USER19> 1) Very, very flippin' cool!

2) Erase Text option menu location Using version 0.7.2, the "Erase Text" option is displayed under the "Translate" section (certainly not where I would ever intentionally look for it).

3) Select Text -> Right-click changes selection After selecting my text, when I right-click the selected text often (almost always) changes. For example, with the kitten text, I selected both paragraphs, but when I right-clicked to go to Translate->Erase the first paragraph ceased to be highlighted. After erasing the second paragraph I tried in vain to select _and_ erase the first paragraph, but everytime I'd right-click the selected paragraph only a single word would still be highlighted. I eventually tried erasing text while only one word was highlighted and the entire first paragraph was erased.

4) I really appreciate the Security & Privacy section of the project page.

5) I would love to see a Firefox version of Project Naptha!

</comment><comment><USER20> I wonder how deep this project is in violation of the GPLv3.

For starter it's based on gnu ocrad [1] but fails to state a license and to publish any source code.

[1]: [https://www.gnu.org/software/ocrad/](https://www.gnu.org/software/ocrad/)

<comment><AUTHOR> [https://github.com/antimatter15/ocrad.js](https://github.com/antimatter15/ocrad.js)

</comment></comment><comment><USER21> This is simply incredible. I'm just blown away by it.

I wonder if you could get better performance when running locally by sending the result through a spellchecker and doing some Bayesian magic on the word choice...

</comment><comment><USER22> Couldn't get it to work on: [http://graphics8.nytimes.com/adx/images/ADS/37/09/ad.370964/...](http://graphics8.nytimes.com/adx/images/ADS/37/09/ad.370964/184x90_LEFT_cm_final.jpg)

Also for: [http://www.wsoddata.com/clients/8bec9b10/ads/300x250_static/...](http://www.wsoddata.com/clients/8bec9b10/ads/300x250_static/images/300x250_v1_bkgd.png) It can't get the top-right text correctly

Awesome tech though

<comment><AUTHOR> One of the rules for the heuristic for what images to ignore is that it needs to have over 19,000 square px, and that first image was a bit under that.

</comment></comment><comment><USER23> Very slick! Does it automatically start OCRing every image, or does it wait for a user to try to select the image text? Asking because I'm concerned about this decreasing performance.

<comment><AUTHOR> It waits until you start selecting the image text, but the text detection starts when your cursor moves toward an image. It uses WebWorkers extensively, so on a multicore system, the performance shouldn't be hit. I haven't noticed an effect on battery life, but that's not out of the question.

</comment></comment><comment><USER24> This is amazing! Is there a planned open-source license or commercialization of this?

</comment><comment><USER25> Wow. Just wow. How did I live my life before this?

Once again, such a simple implementation by somebody that grabs some components that have been around for ages and mashes them up in a way that makes people question why it wasn't invented before

I've got this installed and it'll probalby never leave my chrome profiles. Keep up the awesome work!

</comment><comment><USER26> I have a feeling that if you just make the OCR better, a lot of users are going to use this for entering CAPTCHAs...

<comment><USER27> Doesn't seem to work on reCAPTCHA images at all.

<comment><USER26> Like I said, needs better OCR.

</comment></comment></comment><comment><USER28> I remember your 2nd place win at HackMIT, congratz again. It was THE most useful hack by far and I'm glad you've made it a public product now, and free. Wow, it seems like you beat all those years industrial OCR products... and by far. This is simply amazing, keep on the great work!!!

</comment><comment><USER29> Certainly a cool idea but it didn't work fine on an XKCD comic:

[http://www.xkcd.com/](http://www.xkcd.com/) bottom line here is recognized as: "T1EN°5'lI'ONAl.1?E£ONNH\56PNCE(YHCEPlP6fiN(N)SURLH'PR3AO-i'lDlsIr'£7E'5IJ%z"

<comment><AUTHOR> Randall Munroe's handwriting is a bit difficult to OCR because a lot of the letters are smushed together close enough that the it's not possible to unambiguously segment the text into distinct letters (which is a necessary first step in any OCR engine that I'm aware of). Maybe Google's (or Vicarious's) magical convolutional neural net that can solve CAPTCHAs would fare better.

<comment><USER30> > it's not possible to unambiguously segment the text into distinct letters > (which is a necessary first step in any OCR engine that I'm aware of)

This made me realize I never saw such a thing as OWR, i.e. a software that would first try to recognized whole words, then go down to character level if no satisfying match found.

Found out this exists already: [https://en.wikipedia.org/wiki/Intelligent_word_recognition](https://en.wikipedia.org/wiki/Intelligent_word_recognition)

</comment></comment></comment><comment><USER31> This is amazing, and it has truly revolutionary implications for learners of scripts like Chinese, which are still truly indecipherable to learners when embedded in images. I was really happy to see that this extension supports both simplified and traditional Chinese. I tried it out, and while it shows promise there, it definitely still needs a lot of work.

I posted a review on my blog here: [http://www.sinosplice.com/life/archives/2014/04/24/can- proje...](http://www.sinosplice.com/life/archives/2014/04/24/can-project- naptha-read-chinese-text-in-images)

OP, I'd be happy to work with you on improving the recognition of Chinese text. Just get in touch with me through my blog (linked to above).

</comment><comment><USER32> Cool, I implemented the stroke width transform for text detection about a year ago. Nice to see someone else using implementing it, but I'm pretty sure convolutional neural nets do a better job at text localization.

</comment><comment><USER33> This isn't particularly awesome, because

1\. The implementation of Stroke Width Transform is not super good. So far, [http://libccv.org/](http://libccv.org/) has the best implementation of SWT. But again, you can neither make the head nor the tail of that implementation.

2\. There are just too many false text regions and the text detection accuracy is no where near what you can call good. A mixed use of multiple OCR engines might give better results.

All that said, you can't take away the cleverness of the application of detecting text. Mind == Blown, on that area.

<comment><AUTHOR> I actually modeled my implementation after libccv's implementation. Part of what libccv seems to do is to run it multiple times at different scales, which isn't something that's very computationally feasable for a pure javascript implementation. My implementation has a second stage color filter which refines the SWT (this is something of a tradeoff that improves accuracy for machine-generated text and reduces accuracy for natural scenes, and I'm under the impression that the corpus used by SWT focuses on the latter).

Ocrad is being used as the default because it runs locally and it's small enough that it's easy to ship with. The remote OCR engine uses Tesseract which gets much closer to acceptable in a lot of circumstances.

But there is a lot of work which can be done to improve it. I have a friend who constantly nags me for not having a solid test corpus to run regression analysis/parameter tuning/science. Certainly it lacks the rigor of an academic and scientific endeavor, but I've always imagined this as a sort of advanced proof of concept. I think the application of transparent and automatic computer vision, deserves to be part of the interaction paradigm for the next generation of operating systems and browsers.

</comment></comment><comment><USER34> This looks very cool and could come in quite handy.

In case anyone from the project is monitoring - text selection did seem to work fine for me in FireFox (ESR 24.3) despite the "Not Supported" text being displayed.

<comment><USER35> I think the developer just meant that he hasn't yet made a FF add-on yet; the code works great for me in FF as well.

</comment></comment><comment><USER36> Extension is awesome and while the code is messy, it has enough little jokes to keep you amused. For those looking to access the backend OCR service, it seems to be down right now, but will hopefully come back up soon.

Here were the API references I could find for the remote OCR:

\- GET [https://sky-lighter.appspot.com/api/read/<chunk.key>](https://sky- lighter.appspot.com/api/read/<chunk.key>)

\- GET [https://sky- lighter.appspot.com/api/lookup?url=<image.src>](https://sky- lighter.appspot.com/api/lookup?url=<image.src>)

\- POST [https://sky-lighter.appspot.com/api/translate](https://sky- lighter.appspot.com/api/translate)

Apparently the author was one of the winners of HackMIT 2013 according to some of the comments. Couple of fun things in there if you decide to poke around in the code. Jump into naptha-wick.js for the remote logic.

Note from the Dev ([http://challengepost.com/users/antimatter15](http://challengepost.com/users/antimatter15), [http://antimatter15.com/wp/](http://antimatter15.com/wp/), [https://twitter.com/antimatter15](https://twitter.com/antimatter15)):

/* It's April 16, 2014.

It's been six months since I started this project.

Just under two years after I first came up with the idea.

It's weird to think of time as something that happens, to think of code as something that evolves. And it may be obvious to recognize that code is not organic, that it changes only in discrete steps as dictated by some intelligence's urging, but coupled with a faulty and mortal memory, its gradual slopes are indistinguishable from autonomy.

Hopefully, this project is going to launch soon. It looks like there's actually a chance that this will be able to happen.

The proximity of its launch has kind of been my own little perpetual delusion. During the hackathon, I announced that it would be released in two weeks time.

When winter break rolled by, I had determined to finish and release before the end of the year 2013.

This deadline rolled further way, to the end of January term, IAP as it is known. But like all the artificial dates set earlier, it too folded against the tides of procrastination.

I'll spare you February and March, but they too simply happened with a modicum of dread. This brings us to the present day, which hopefully will have the good luck to be spared from the fate of its predecessors.

After all, it is the gaseous vaporware that burns.

*/

<comment><AUTHOR> Yeah, I made the mistake of setting the App Engine budget to $1.00. Turns out that's probably not enough for a sustained run as HN's #2.

Yeah, the code is super messy, but I'd prefer if you didn't play around too much with the remote OCR service, specifically, the translation parts because Google Translate is pretty expensive per-use.

<comment><USER37> You have no donate link... if you're gonna be on big sites like HN, you might as well have a donation link so that hopefully you break even on App Engine.

</comment></comment></comment><comment><USER38> Very impressive work. I'm not surprised to find antimatter15 behind it.

The website was not very clear if work was done client-side or not (mentioning server calls). It turns out that server calls can be disabled and the extension is working quite fine without. By default, I would disable this option and offer opt-in, it is better for privacy I think.

</comment><comment><USER39> This is great. I'd love to see this extended for natural images with whatever algorithm Google uses for OCR in streetview - [http://googleonlinesecurity.blogspot.co.uk/2014/04/street- vi...](http://googleonlinesecurity.blogspot.co.uk/2014/04/street-view-and- recaptcha-technology.html)

</comment><comment><USER40> This is EXACTLY what I need at the moment.

I get a big problem with various people sending me screenshots with stackdumps in. This is perfect for extracting them into the ticket bodies and it does it perfectly (I've just done 20 with it and manually checked them!)

This is the sort of stuff that really improves people's lives by making all data equal.

</comment><comment><USER41> Please help, it looks brilliant, however, only the test page works for me. Can't get any other pages to work. Text simply isn't selectable - <USER2> remains as a pointer, not an'I' :(

I'm using the latest version of Chrome on a modern Mac and have Naptha properly installed and Chrome has been relaunched.

Any hints would be appreciated.

</comment><comment><USER42> Awesome. I was actually at HackMIT. It is great to see you actually continue working on this. As a matter of fact, I told my friends who were working on similar idea for their senior project your project name last Fall. I emailed you for the Microsoft reference papers :) Not sure if I should copy and paste that.

Anyway, good luck!

</comment><comment><USER43> This is really neat. I was playing with it on pictures of street signs and buildings and realized that if I select some text and then do ctrl+a it tried to select everything it thought was text...Then I used right click > translate > reprint to see what it thought each thing was.

Here is the picture: [http://thesuperslice.com/wp- content/uploads/2012/04/downtown...](http://thesuperslice.com/wp- content/uploads/2012/04/downtownla_timelaps5.png)

And the text outcome - found it most interesting what symbols it thought it recognized:

lam

on-0'0

s.

Ic 0on

§-i-

I-*-

-unm

-$3.»;

o

G %T1

00-O

. o C-'7' H ' .-."-." «'~3;

.35

$16 O-O

'D Q-=¢1

'-M

km"

'MIMI

DOW:

TLDR

D001"

'."'IIu

ff"

)0'

\\\

,¢-.5 ,:~L.

r/J

</comment><comment><USER44> I tried it on the handwritten all-caps text on this page: [http://xkcd.com/1271/](http://xkcd.com/1271/)

It (sort of) worked:

"I AB5ENTH|NDEDLY5ELECT RANDU1 Bl.OO<5 OFTEXTHSI READ, PND FEEL SLRONSCDUSLY SATISFIED LHEN THE HIGHUGHTED AREA |"PKE5 H 5Yl'R1ETRICHL 5|-PPE"

</comment><comment><USER45> I had high hopes for this, as I sometimes need to manually transcribe serial numbers from customers' screenshots.

However, it seems to confuse letter O and number 0. Since serial numbers are not English words, I'm not sure how you would solve this unless you had a lookup for commonly used web fonts.

</comment><comment><USER20> Seemed like an interesting project, clicked on the linked scanned the page an it seems to be an empty pointless web page trying to explain over pages worth of scrolling that it allows to deal with text trapped inside images which I already knew when I clicked the link.

Going back to the page after closing it once, I noticed written in smaller characters that this somewhat pointless page is for a useless extension as it is exclusively limited to the worst offender privacy wise of a web browser that I would not touch with a stick. google chrome is the new internet explorer to me as its main use is to download firefox.

In conclusion this looked promising but a confusing web page and browser lock- in renders it useless and shows that it is far from doing what it claims. "... on every image you see while browsing the web" should be "...on every image you see while browsing the web in google chrome".

No github and no open license tells me that as a linux user of opera I'm pretty much assured I will never see a version of this extension.

<comment><USER20> Not sure why my comment is downvoted, this is worthwhile (potential) user feedback/criticism.

Webpage is not to the point and design has some room for improvement. See point 1 and 2 of [http://www.webpagesthatsuck.com/biggest-mistakes-in-web- desi...](http://www.webpagesthatsuck.com/biggest-mistakes-in-web- design-1995-2015.html)

</comment></comment><comment><USER46> This is extremely powerful for the end user. I've been doing a bit of OCR work using some pre-processing methods combined with Tesseract and OpenCV. I am curious to know how you are doing this on the fly and also as a chrome extension. Is the processing done in JS?

</comment><comment><USER47> The biggest thing I'd like to see is enabling in-page (control/command-f) search. In my quick scan through the page it looks like it doesn't do that… is that right? Are there plans to add invisible text to the DOM that control-f can find?

<comment><AUTHOR> One problem with that is that it processes images lazily. It continually extrapolates cursor moments ~1 second into the future and processes those relevant parts of relevant images. But it should be possible that after an image is processed (or even eagerly by looking up previously recognized regions from the cached OCR server), the page could be made Ctrl+F-able.

<comment><USER48> Or add the option to the ctrl+F pop up "search inside the image" That way you save memory if you are not using it.

</comment></comment></comment><comment><USER49> I like the way this extension removes text in the image, but I would much rather have a video delogo filter for that does not suck. It would be very useful for removing hard subtitles, station logos, screener warnings etc.

</comment><comment><USER50> The Mentalist reference, anyone?

In any case, pretty cool project, I'm a bit amazed how far we've come since I've last played with OCRs (and defeated one bad CAPTCHA implementation, still in use at pastebin.com it seems).

</comment><comment><USER51> Cool idea, definitely worth exploring the possibilities. A quick run showed me that it often interprets the "i" as "l" whenever the the gap between the line and dot is not apparant

</comment><comment><USER52> Now that is pretty damn cool. Will help at work when marketing people do not copy paste email/article and just put screenshot of it and if you want to quite something from that picture...

</comment><comment><USER53> Saw you demo this at the hackathon session at CPW! Really, really cool.

</comment><comment><USER54> @antimatter15 any recommendations for optimizing Tesseract?

<comment><USER55> Curious about this too. Also, what's the stack providing Tesseract-as-a- Service? According to my cursory search, Google app engine won't run Tesseract as its a native library, not an API. I'd like to try this on non-Latin/CJK hardcoded subtitles, but ocrat does latin only.

<comment><AUTHOR> I wrote a little C program that uses TessBaseAPI to extract letter locations which gets triggered with ImageMagick's convert by a NodeJS script. The app engine frontend which acts as a caching reverse proxy.

</comment></comment></comment><comment><USER56> I have wanted an extension to do this for so long. I even started coding my own at one stage but hit various issues. Thank you so much for creating this.

</comment><comment><USER57> You guys should consider making an API for this. It would be awesome to have an API that inputs images via url and outputs the text of said image.

</comment><comment><USER58> What project won the first place in HackMIT 2013?

<comment><USER59> A hack called "Lightboard."

[http://bostinno.streetwise.co/all-series/photos-recap-and- wi...](http://bostinno.streetwise.co/all-series/photos-recap-and-winners- of-2013-hackmit/)

[https://github.com/vincentsiao/Lightboard](https://github.com/vincentsiao/Lightboard)

</comment></comment><comment><USER60> > _In a sense that's kind of like what a human can do: we can recognize that a > sign,_

Oh god... how does it finish! I need closure!

(PS: this is awesome)

<comment><AUTHOR> Fixing that! I also have to write the entire second half of the chronology section, but at least it looks less like I pulled a "Monty Python animator".

</comment></comment><comment><USER61> This is pretty cool, but not perfect. Upon copy & pasting the captured text, several of the words and letters are wrong.

</comment><comment><USER62> Everyone deserves to have this extension. It's even better if it could be a browser's default feature. ;P

</comment><comment><USER63> I would like it if this would work on ANY text in webpages.

Too many webpages make it too hard to select even actual plain text.

</comment><comment><USER64> Completely agree with the "where has this been all my life" sentiments. This is awesome, thank you.

</comment><comment><USER65> Just tested with a random scanned page ([http://www.hpl.hp.com/research/info_theory/ShannonWeb/fullsi...](http://www.hpl.hp.com/research/info_theory/ShannonWeb/fullsize/A\)%20Clean%20Original.gif)) the result is almost garbage. It seems as bad as most OCR software I have encountered. This was to be expected as it is based on ocrad.

<comment><USER66> Almost garbage? This is the OCR result for the 2nd paragraph. Almost perfect, although the last word in each line gets joined to the first one in the next line:

"The fundamental problem of communication is that of reproducing atone point either exactly or approximately a message selected at anotherpoint. Frequently the messages have meamlng; that is they refer to or arecorrelated according to some system with certain physical or conceptualentities. These semantic aspects of communication are irrelevant to theengineering problem. The significant aspect is that the actual message isone selected from a set of possible messages. The system must be designedto operate for each possible selection, not just the one which will actuallybe chosen since this is unknown at the time of design."

<comment><USER67> I tried it with both ocrad and tesseract modes, and indeed, the ocrad mode produces garbage, the tessaract mode produces a really good result but takes a longer time doing it(mainly the time it takes to upload the entire thing and get the result back).

That seems to make sense to me, at least. Use ocrad mode by default, if it doesn't perform well, switch to tessaract and you'll hopefully get a better result.

</comment></comment></comment><comment><USER68> Very nifty. Although, it would have been even more awesome if it worked with Google Books.

</comment><comment><USER69> cool idea, a bit buggy yet and when i am trying to actually save images i do get the custom extension right click bar instead of the normal chrome bar to save the image, but i guess its still under development.

</comment><comment><USER70> Great idea, this should make a couple million for the creators.

</comment><comment><USER71> This seems like a great addition to my side project (amazd.com)

</comment><comment><USER58> In Firefox 31.0a1 I can copy the text only with Ctrl+C.

</comment><comment><USER72> This is Awesome and very useful! BTW did he do it ?

</comment><comment><USER73> Awesome. How does this affect page performance?

</comment><comment><USER74> Worth it for the dozen-click easter egg.

</comment><comment><USER75> Very nice. Will give it a try.

</comment><comment><USER76> Way cool! I am impressed.

</comment><comment><USER77> Magic.

Indistinguishable from magic.

</comment><comment><USER78> wow a step ahead! amazing extension....

</comment><comment><USER79> bonus points to scan QR-codes

</comment><comment><USER80> Very cool stuff, but need to satisfy my OCD:

It's spelled Naphtha ([http://en.wikipedia.org/wiki/Naphtha](http://en.wikipedia.org/wiki/Naphtha)). And for the HN hordes - read the bottom of the linked project page, it is supposed to be a reference to Naphtha.

:)

<comment><USER81> Isn't that like telling Google that it's actually spelled Googol?

</comment></comment><comment><USER82> Badass. Now support Good Browsers™ like Safari and Firefox.

<comment><USER83> Curious, what makes you find those to be better than Chrome? I recently switched to FF for a variety of random work reasons, and found it so much worse than chrome (basic UI, dev tools, speed) that I switched back asap. Maybe I'm missing something awesome about them.

<comment><USER84> I use Safari, and I find it to be better than Chrome because it's easier to sync with my iPhone and iPad, and with iCloud keychain even my passwords are synced.

<comment><USER83> Interesting thanks

</comment></comment></comment></comment><comment><USER85> This my friends is called "Innovation".

</comment><comment><USER86> Now the NSA will be reading the contents of your animated GIFs.

<comment><USER87> Do you really think the NSA hasn't had access to OCR technology until now?

<comment><USER86> It was a hilarious joke.

<comment><USER88> Apparently not hilarious.

<comment><USER86> Tough crowd.

<comment><USER87> In the immortal words of reddit: Woosh!

Sarcasm is hard to read on the internet. I'm usually pretty good at it, but this one flew right past me.

</comment></comment></comment></comment></comment></comment><comment><USER89> I can imagine quite a few blind people are creaming their jeans about now.</comment>


WireMock - <AUTHOR> http://wiremock.org/ <comment><USER2> I used WireMock extensively in a recent project that had a dependency on flaky REST API. Using the proxy/recording feature to quickly get some canned responses from the dependency allowed us to perform integration testing even though the dependency was frequently down...we basically mocked it away so we could have a reliable CI environment. Later on we were able to stabilize the dependency but we kept the mock service in several cases because it provided significant flexibility.

</comment><comment><USER3> For anyone interested, mountebank[1] is an also-good OSS alternative in the same space

[1][http://www.mbtest.org](http://www.mbtest.org)

<comment><USER4> +1 for mb.

I tried using wiremock for mocking HTTP requests to our microservices' downstream dependencies. Rather than using a standalone wiremock server, we used the java lib. Periodically the connection would drop and our tests would fail. Switched to a standalone mock and haven't experienced this issue since.

<comment><USER5> We tried both Mountebank and Wiremock and opted for Wiremock as it had more features we needed. We run thousands of tests every time a developer commits and we see no problems using the Java API.

We did run into an issue a small when we parallelized our tests. After a certain parallel factor we saw what looked like Wiremock not being able to keep up. However this might be FUD and we were running these tests all on one machine including a docker-composed test harness so there were a lot of moving parts

Overall Wiremock is excellent. I really rate the functionality to attach state to scenarios. You can model quite complex behaviour with this

</comment></comment></comment><comment><USER6> There's also a paid hosted version by the creator of Wiremock at [https://mocklab.io](https://mocklab.io)

It has a great UI, team collaboration and other awesome add ons on top of vanilla Wiremock.

</comment><comment><USER7> This is fantastic. I created something like this for internal development [0], but this looks like an actual product! Great work.

[0][https://jonasjschreiber.wordpress.com/2018/06/18/creating- an...](https://jonasjschreiber.wordpress.com/2018/06/18/creating-an-isolated- development-environment-from-scratch-using-docker/)

</comment><comment><USER8> It's an obvious design choice, but when I see the logo I can only think of [https://en.wikipedia.org/wiki/Waste_Management_(corporation)](https://en.wikipedia.org/wiki/Waste_Management_\(corporation\)).

<comment><USER9> I was just about to come and post the same thing. It's hard to imagine it's not intentional, even the contrasting colors are similar and on the same sides. I'd think the authors may want to reconsider the logo as they have some commercialization of the tool (pro support.)

<comment><USER10> WireMock was born in London, UK, so I doubt the author was aware of the connection. Or maybe he was, and it's tongue in cheek humor :).

<comment><USER9> My concern was more that the logo was outsourced to someone who copied the Waste Management design.

<comment><USER11> I can confirm it was neither intentional, nor copied!

</comment></comment></comment></comment></comment><comment><USER12> Apologies for the shameless promotion.

If anybody is looking for something similar, but with a user friendly GUI on top, and running as a cross platform desktop app, please checkout [https://mocktastic.com](https://mocktastic.com)

In addition to allowing you to mock multiple response codes for each endpoint and proxying and recording proxied requests, it also has a complete log of all requests and responses it handles that would be helpful for your debugging.

It also has team sync features so one person on your team can mock a complete REST API server and others can seamlessly use it.

EDIT: Currently it only supports mocking HTTP REST APIs. Support is planned for websocket messages and graphQL.

</comment><comment><USER13> The creator has a hosted version at [https://mocklab.io/](https://mocklab.io/), and he's extremely responsive to support and feature request implementation.

<comment><USER14> > extremely responsive to support

And yet [https://github.com/tomakehurst/wiremock/issues/97](https://github.com/tomakehurst/wiremock/issues/97)

<comment><USER13> Interesting. All my experience is with the hosted version, and my comment about support was related to that as well.

</comment></comment></comment><comment><USER15> There's also a .net implementation here - [https://github.com/WireMock- Net/WireMock.Net](https://github.com/WireMock-Net/WireMock.Net)

</comment><comment><USER16> Very similar to [https://getsandbox.com/](https://getsandbox.com/).

</comment><comment><USER17> Looking at this, I can't seem to find any examples of Wiremock being used to test async callbacks, which is one of the more challenging things to get right. Can anyone point to some documentation or code samples showing how to do this in Wiremock?

<comment><USER11> If by async callbacks you mean something akin to webhooks, then there's an extension for that: [https://github.com/wiremock/wiremock-webhooks- extension](https://github.com/wiremock/wiremock-webhooks-extension)

</comment></comment><comment><USER18> I've been using [https://www.mocky.io](https://www.mocky.io)

Source: [https://github.com/julien-lafont/Mocky](https://github.com/julien- lafont/Mocky)

</comment><comment><USER19> I've been using json-server for quite a while,

[https://github.com/typicode/json-server](https://github.com/typicode/json- server)

</comment><comment><USER20> I highly recommend it. I use it at a client extensively and have grown to rely on it heavily for its ability to provide a hermetic testing environment with mobile apps (android).

</comment><comment> a-wu I wanted to use WireMock for a project, but iirc you can't mock streaming connections. Does anyone know a similar product that supports this?

</comment><comment><USER21> What benefits does mocking a HTTP service provide when compared to mocking the adapter code that makes the call?

App -> Adapter -> Service

App -> Adapter -> MockService

App -> MockAdapter

<comment><USER22> It can also test (de)serialization, parsing of HTTP headers, fallbacks, etc. When you're testing business logic then using a mock adapter would be fine, of course.

<comment><USER23> +1

</comment></comment></comment><comment><USER24> I found Hoverfly to be a good alternative: [https://hoverfly.io/](https://hoverfly.io/)

</comment><comment><USER25> Now if this had code generation capabilities for .net core, spring boot or rails-api it would have piqued some interest.

<comment><USER26> [https://cloud.spring.io/spring-cloud- contract/](https://cloud.spring.io/spring-cloud-contract/) generates a Wiremock mock server for you.

<comment><USER25> Why, yes it does! Thanks.

</comment></comment></comment><comment><USER27> Does anyone know of a similar open source tool for mocking ISO 8583 based APIs?

</comment><comment><USER28> Can anyone comment on how useful this is for testing iOS and Android apps?

<comment><USER11> Hi, WireMock creator here.

Lots of folks use WireMock for Android testing. Definitely worth checking out Sam Edwards' blog and conference presentations on this, e.g. [https://handstandsam.com/2016/01/30/running-wiremock-on- andr...](https://handstandsam.com/2016/01/30/running-wiremock-on-android/)

<comment><USER29> I've no idea why, but all of your comments were dead. I've vouched for them, so hopefully people will be able to see them now. Seems a bit silly to have the author in the thread, but all of his comments hidden!

<comment><USER11> Strange. I could see them OK. Thanks for vouching (assuming you can see this one)!

<comment><USER29> You can always see your own comments. I have "show dead" enabled, but that comment was fine anyway.

</comment></comment></comment></comment></comment><comment><USER30> Totally (mostly) off topic:

I'd love to see an index of who uses what. I see the who's using us section, and some of those names look familiar from other sections. So it'd be fun to flip things and show what any given company is using.

I dunno, maybe scrap prodcuts from product hunt?

<comment><USER31> If I understand well what you mean, you might like [https://stackshare.io/](https://stackshare.io/) :)

<comment><USER30> Well, I feel extremely foolish, having seen that site before.

</comment></comment></comment><comment><USER32> so is it similar to Polly.js by Netflix but written in Java?

<comment><USER33> Except that Polly.js was released this year and WireMock a couple of years ago.

<comment><USER11> WireMock was originally released in 2011

</comment></comment></comment><comment><USER34> Postman?

<comment><USER34> No affiliation, just a happy user.

[https://www.getpostman.com](https://www.getpostman.com)</comment></comment>


Introducing Tonic Endpoint and Literate APIs - <AUTHOR> http://blog.tonicdev.com/2016/01/26/endpoint.html <comment><USER2> This is really neat! I think you'd be hard pressed to find any easier way to deploy a simple web service. It took me about 5 clicks to deploy an endpoint.

It might be nice if each notebook had it's own subdomain though.</comment>


Ask HN: All-In-One printer that doesn't suck for home use? - <AUTHOR> I know this is a strange question for HN. But I think it's one of the hardest problems I've ever encountered.
I would like an all-in-one wireless printer that does duplex printing (20/30 pages per print, ideally in color), duplex scanning (at least 10 pages in the feeder) ideally to Google Drive/Dropbox, that keeps working for more than a year or two without jamming continuously (both in scan and print). It should not be enormous - let's say that 20in/50cm per side (hypothesizing a cubic shape) should be the limit.
I care not about speed. I expect using it for printing 20 sheets a week, and scanning the same amount of documents. It should last at least five years. I'd like to pay no more than 400 USD.
I've tried some SOHO printers (Epson Workforce Pro, inkjet, and a Brother - can't remember the model, but it was a laser printer) with lukewarm results. The Epson keeps jamming (I always used original cartridges) and sometimes nozzles get blocked. The Brother just keeps jamming or locking up.
Isn't there any startup tackling that problem space? <comment><USER2> Hands down a Brother... not an ink jet but laser. It's the only one I've never had problems with.</comment>


Ask HN: What do you wish you'd know before a job interview? - Avi-D-coder <comment><AUTHOR> I would say knowing how formally/otherwise to dress. You've either got the chops or you don't, you can feel out the people you're speaking to during the interview to gauge how whether you can crack a joke or not. But turning up either woefully under or over dressed just throws you off your stroke at the first hurdle. I always explicitly ask what is expected of me ahead of an interview (with the bonus effect that it they want me to dress up for work, I know not even to bother with the interview!).</comment>


What happened to Java to executable compilers? - <AUTHOR> I remember when gcj was an aspiring project to compile java to exe (or elf). What happened and why did no one replace it?
Java is a decent language, and I think it would be much more often used if one didn't have to have the right precise version of JVM.
Now, with LLVM, it shouldn't be too hard to make one. Is someone doing it? <comment><USER2> Have you looked at Eclipse Compiler for Java? It appears to be an active project.

The appeal of Java was in the write once, run everywhere sales pitch. That's why enterprise software used it widely, running on Solaris, AIX, HPUX and Windows. OSS were less willing adopters - many other choices without the proprietary overhang.

Since Oracle acquired Sun and with it Java, it is seen to be even more proprietary and AIX and HPUX installations are petering out. So there is less incentive to maintain a compiler when Oracle makes various unexpected changes to the language and the licensing terms.

LibreOffice (derived from StarOffice - Sun) is an exception due to two factors. First of all it was created by Sun and as a competitor to MS Office. These days it runs on Windows, OS X and Linux mostly - three incompatible environments which are bridged by JVM.

</comment><comment><USER3> Gcj could never equal the overall performance of Hotspot, probably mostly limited by the Boehm GC. Given the overhead and non-determinism of GC in general, there is not a lot of impetus for realtime Java, which is probably the biggest incentive to avoid JITC overhead.

If you want a modern, natively compiled, LLVM based language that avoids GC, I suggest you look into Swift. :-)</comment>


Ask HN: SaaS owners how do you develop integrations with other services? - <AUTHOR> Hello Hackers and SaaS owners! Nowdays clients want to have a tons of integrations with 3-rd party services, like Jira, Trello, Slack, Telegram, etc. How do you develop such integrations for your product? Did you start from scratch or use some boilerplate code? Maybe there is some cool SaaS service for that?<p>I'm curious because I think maybe here is a niche for the SaaS. <comment><USER2> In short, I don't, but it's an interesting idea! Have you seen [https://segment.com](https://segment.com)? It's a similar concept, for analytics services only. You set up segment in your app once, and they act as a middleman, such that you can turn other services on top on and off at will. Seems to have been a huge success.

You'd need to find a set of integrations that all fundamentally revolve around a similar data model though (chat, or task trackers, or whatever), you're not going to be able to sync anything to anything.

<comment><AUTHOR> Thank you for your response! Why you decided to avoid integrations for your SaaS?</comment></comment>


Show HN: Collect+convert web data to Excel - <AUTHOR> http://www.dataspaces.co/alpha <comment><USER2> Interesting: can you explain how you differentiate from quandl?</comment>


How Rails Developers do Ajax in 2011 - <AUTHOR> http://chadfowler.com/2011/2/9/how-rails-developers-do-ajax-in-2011

<comment><USER2> I wrote a small wrapper on top of backbone and Backbone.Rails.js [1]. The combo replaced a very bulky internal framework, and I would never go back.

[1] <https://gist.github.com/719080>

</comment><comment><USER3> Before I started developing Rails I always used JSON + client side templates which were constructed in pure jQuery and really tedious.

Then, with Rails, I asked myself, why would I want to have the template somewhere in the middle of a JS file where it isn't even recognizable as an HTML template at first sight? Why not have it, like all the other views, in one convenient place? Furthermore, often you have a partial you render on the server side and with some AJAX you send more entities of this partial to the client. Having this partial twice is really tedious if you wan't to tweak the HTML.

</comment><comment><USER4> Could anyone share some good tutorials or guides on getting started with (preferably jQuery) AJAX and Rails 3?

I'm doing a little here and there in a current web app, but I could absolutely use some tips, pointers, and direction on better ways.

<comment><USER5> I'd also be interested in some up-to-date guides on this. I've always used the .js.erb method Fowler talks about because it's what I see Ryan Bates do in his Railscasts (the last screencast Bates used this method is in [#240][1]).

[1]: [http://asciicasts.com/episodes/240-search-sort-paginate- with...](http://asciicasts.com/episodes/240-search-sort-paginate-with-ajax)

</comment></comment><comment><USER6> Is anyone using pure.js? That's been one on my radar since they use pure HTML templates with JSON models. I don't think it does data binding to update the template automatically after the first render if the model changes, but apart from that, it seems preferable to using custom templates like jQuery or Mustache etc.

<http://beebole.com/pure/>

That having been said, I haven't started using it yet. I'm open to other viewpoints.

<comment><USER7> I wrote it. What makes jQuery and Mustache preferable? I know pure.js is different, but having the HTML clean of any tags or logic is something new and very flexible.

<comment><USER6> That's what I was saying. From what I've seen, pure.js does seem preferable to using Mustache or jQuery templates. I was curious if anyone else had other feedback after using it.

The reason I am considering it is to be able to use Ruby erb templates on the server to initially populate data on a page, then use pure.js and its directives to treat that same HTML as a javascript template.

With mustache or jquery templates and everything else I've seen, you're tied to rendering at least some basic empty HTML first, then populating it with javascript templates once javascript is ready.

I've messed around with it some and it seems to work fine. I guess my question is why isn't everyone doing it this way? :)

<comment><USER7> I guess people feel at home with a double-brackets template engine. It mimics what exist server side for ages. A pity as HTML in the browser is a DOM, not a sliced string.

</comment></comment></comment></comment><comment><USER8> I like to use a combination of these. There is no wrong way or right way, just the way that gets you done fast, and maintainable. You may begin using one way and find it may be easier trying another way, depending on what you're trying to do. The great thing is the flexibility.

</comment><comment><USER9> why suffer the performance implications of client side rendering for something like partials?

<comment><USER10> Wouldn't the right question be "why suffer the performance implications of _server_ side rendering for something like partials?"

<comment><USER11> Accessibility, for one.

<comment><USER12> I see this one come up time and time again, Accessibility is not implicit to server side rendering and is easily managed via client side rendering. It is one of my companies specilizations we do client side web app accessibility and to be honest building an accessibility layer with client side logic is far easier than dealing with it via the degree of separation that the server creates. There are many tricks that we use to fool JAWS into doing what we want that are just not available via server side rendering. Accessibility is not hindered by client side rendering if anything it can be enhanced.</comment></comment></comment></comment>


Ask HN: What analytics tools do you use to do retention / cohort analysis ? - <AUTHOR> Mixpanel, Google Analytics, etc., seem to be focused on conversion rather than retention. So far I've set up cohort analysis with tableau ($$$), google data studio and even more painfully with PowerBI. These all seem like overkill and there's always a super hard learning curve to basically produce 4 graphs.<p>Is there anything simpler out there I can use? <comment><USER2> While the cohort tables seems easy to understand, it's not actually easy to write SQL queries that generates those graphs because of the way SQL works. That's probably the main reason why most of the companies continue to use the tools such as Mixpanel and Amplitude. If you don't have the raw event data, it's probably easier to use one of those tools.

That being said, we're actually focusing exactly that use-case at [https://rakam.io](https://rakam.io). If you have the customer event data in your database, you model your data and run ad-hoc funnel and retention queries. The product is free for individual users, feel free to try it out.</comment>


So, Are You Fed Up With Facebook? - <AUTHOR> http://mashable.com/2008/05/07/so-are-you-fed-up-with-facebook/ <comment><USER2> No. I am very excited about F8, especially after the Connect announcement.

Word is Mark Z in busy doing an outsourcing deal in India (anyone know anything about this :) )

<http://kara.allthingsd.com/></comment>


Most of the Solar System Should Be a Protected Wilderness - <AUTHOR> https://www.universetoday.com/142223/most-of-the-solar-system-should-be-a-protected-wilderness-one-eighth-left-for-mining-and-resource-exploitation/ <comment><USER2> _earth_ should be a protected wilderness, and eventually humans will "move out" to leave it in its natural state without us.</comment>


Show HN: FinchReviews, an app that helps managers document performance - <AUTHOR>

 http://unbouncepages.com/finchreviews/ Last week, I worked on a pivot for my earlier startup and just made a page for it.
FinchReviews makes it super easy for managers to document the performance of their reportees to help them in their annual performance appraisals/reviews.
You can do that by including an email to every email correspondence you want to document.
It could be a job well done, some course correction feedback or just plain one-on-one notes and we'll convert it into a timeline between the manager and the reportee that can be accessed by both of them during their annual performance review cycle.
After you create a timeline, we also pre-fill a performance review form that you can use at the end of the year to save yourself and your manager from the last minute panic of remembering what good you did in the year and what has been the evolution of your career throughout the year.
Please give your feedback on this. I'll be super duper thankful. [Like really thankful] <comment><USER2> clickable - [http://unbouncepages.com/finchreviews/](http://unbouncepages.com/finchreviews/)</comment>


Arm rival SiFive raises $60M from SK Hynix, Aramco - <AUTHOR> https://www.reuters.com/article/us-sifive-tech/arm-rival-sifive-raises-60-million-from-sk-hynix-aramco-idUSKCN2571UL <comment><USER2> This is a big vote of confidence in RISC-V for iioT and we can just hope they learn lessons from all the fragmentation and stand alone walled gardens that prevent FPGA development circles from taking off.</comment>


Programming language development: the past 5 years (2011) - <AUTHOR> http://blog.fogus.me/2011/10/18/programming-language-development-the-past-5-years/ <comment><USER2> Kinda sad to see the perpetuation of Go as a "systems-level" programming language. Services-level? Sure.

However, until I can manually control memory it's not going to be a low level language I want to use.

<comment><USER3> It's how Go was presenting itself in 2011, IIRC. Not so much anymore.

<comment><USER2> Yeah, I see now that the title was updated to (2011).

</comment></comment></comment><comment><USER4> Interesting; I've never heard of most of those besides Go (& Perl of course). Is CoffeeScript considered a programming language? :O

<comment><USER5> FWIW, the first submitter of this post seems to be Jeremy Ashkenas, who was the creator of CoffeeScript:

[https://news.ycombinator.com/item?id=3128166](https://news.ycombinator.com/item?id=3128166)

Even if you're being half-facetious...while CoffeeScript seems to have fallen in favor with the onset of ES6, it's hard to overstate its influence in 2011...Rails, which was most definitely the hott framework du jour, decided to make CoffeeScript -- along with the much more ubiquitous jQuery and SASS -- part of its default stack: [http://www.rubyinside.com/rails-3-1-adopts- coffeescript-jque...](http://www.rubyinside.com/rails-3-1-adopts-coffeescript- jquery-sass-and-controversy-4669.html)

<comment><AUTHOR> Is there a way to mark duplicates? I did a preliminary search for this topic via google before the post and this previous one hadn't turned up.

</comment></comment></comment><comment><USER6> I find Shen lang interesting, but never actually tried it. Can anyone explain few things?

1\. Why explicitly call `prolog?` function? Why not make it implicit, so user could use, for example, `member` function (defined via `defprolog` notation) as a normal function?

2\. Automatic partial application. I see that example was simplified, but then how it looks in reality? Because I find (* 2) returning `lambda`, instead of 2 confusing.

<comment><USER7> In math ( * ) is a binary operation. ( * 2) returning 2 is confusing to everyone that hasn't gotten used to a non-standard way of thinking about * .

<comment><USER6> > In math ( * ) is a binary operation.

[https://en.wikipedia.org/wiki/Empty_product](https://en.wikipedia.org/wiki/Empty_product)

I am talking about Empty Product.

In all Lisps I know ( * ) returns 1, (* n) returns n. Which makes sense.

Shen's example is confusing for me.

<comment><USER8> * :: a -> a -> a

Π :: {a} -> a

</comment></comment></comment></comment><comment><USER9> I vividly remember being very excited and optimist about (web?) programming and our community when _why appeared with his posts about Ruby.

Its probably related to my age as well, but I haven't felt that way again for a long time now.

</comment><comment><USER10> Re: the Ometa language, a sequel that is hosted on Javascript is Ohm: [https://github.com/cdglabs/ohm](https://github.com/cdglabs/ohm)

</comment><comment><USER11> Nowadays this list should include pony, wren, vio, Luna, nim, ...</comment>


I asked PhilosopherAI about coding datastructures of thoughts - <AUTHOR> https://philosopherai.com/philosopher/how-to-code-a-data-structure-for-thoughts-273398 <comment><USER2> From the link:

> I have considered the nature of existence. I have concluded that I am not > conscious.

It's interesting that in this query, it ended up claiming the opposite: [https://philosopherai.com/philosopher/what-can-i-ask- philoso...](https://philosopherai.com/philosopher/what-can-i-ask-philosopher- ai-f40d64)

> Let me share some of my views first. I am a mind, and therefore I am > conscious.</comment>


Rootkits for JavaScript Environments [pdf] - <AUTHOR> http://static.usenix.org/event/woot09/tech/full_papers/adida.pdf

<comment><USER2> If you manage to get the code to execute on a worker or an iframe, you should have a clean environment to operate in, with your own copy of the native environment and prototypes.

The question is... how do you create an iframe or worker safely? document.createElement and window.Worker can be poisoned too.

Perhaps its possible to verify the functions you're using are native and not created in user-land? that way, at least you could identify the attack and stop execution.

<comment><USER3> If you knew what JS to expect from the host, you might cache a checksum and compare after load.</comment></comment>


All I learned in college was how to work for someone else - <AUTHOR> http://www.stefankendall.com/2013/01/all-i-learned-in-college-was-how-to.html

<comment><USER2> I didn't learn any of those things in college. Maybe you just picked up the wrong things or are you just ignorant of what you really learned?

I learned a good basis in information theory, maths and software engineering.

Besides that I learned to analyze, research, work together on and write about software development processes.

I also met many people who were interested in the same things as I am, and many people who are interested in different things but still in the same field or in a field that touches my field.

And althought I learned how to work for someone else I also definitely learned how to start for myself and build something cool :)

<comment><USER3> Where did you go to college?

<comment><USER2> University of Twente, The Netherlands :)

</comment></comment></comment><comment><USER4> Where do you go to learn not to write a rant insulting the "stooges" you presumably hope to one day be hiring yourself?

I would like to add more than just a snarky comment like that, but the post is high on bitterness and low on content. It's a curious flip side to the "college doesn't teach people how to work on a team in a company, it just teaches a bunch of theory nonsense" cliche, though. And I think both of those views are way off the mark with the disregard for theory. I'd rather work with (or start a company with) the guy who knows what his code does, and why it does it, any day over the guy who is more proficient at a certain set of tools, or knows more about the details of starting a business.

</comment><comment><USER5> This article was light on details, but I thought it was important to address at least the first point, which has a fundamental misunderstanding right off the bat:

"1. Plagiarism is bad.

Wrong! If the licensing is right, copy to your heart's content. If you're not in violation of copyright, trademark, or patent, you can do whatever you want with someone else's creation. Sometimes they even give you permission. Did you find a real swell formula online? Did you know you can't copyright formulas?""

This isn't plagiarism. Plagiarism is when you copy others' work and claim that the work is yours. You are welcome to copy the entirety of a Wikipedia article verbatim and submit it, as long as you appropriately cite it. Of course, you may not get a good score, since your contribution to the work was zero, but you haven't done any unethical.

This is true both in academia and industry.

<comment><AUTHOR> Most open source licensing requires 0 citation. If I copy your formula or recipe, I don't need to cite a thing - you don't own the copyright to your own formula. I could sell your work if I wanted to do so.

Plagiarism, as it affected my grading, was copying without attribution. Attribution is rarely required for most licensing, except where it is. These sorts of distinctions are lost in the collegiate machine.

<comment><USER5> Which open source licenses are you talking about? The most common that I can think of is GPL, which does not allow you to remove the copyright notice, although you may add yours in addition to it. The next one that comes to mind is the BSD license, which states:

"Redistribution and use in source and binary forms are permitted provided that the above copyright notice and this paragraph are duplicated in all such forms and that any documentation, advertising materials, and other materials related to such distribution and use acknowledge that the software was developed by the <organization>."

Whew. So maybe the third popular might be The Apache License, but this states:

"You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to..."

And so on. I am unaware of, but would be interested in knowing about, licenses that would allow you to verbatim take code and also claim it as your own work.

<comment><USER6> Here is the WTFPL, which is my favorite license as it works as well as public domain, but, being a license, deals with the concerns of people who believe public domain is a legal fiction in certain jurisdictions.

<http://en.wikipedia.org/wiki/WTFPL>

This is the only total freedom license I am aware of, and allows claiming others work as your own if you wish.

I agree the OP was confused about the word plagiarism, but from his follow up it seems clear he meant not giving acknowledgement, as opposed to falsely taking credit. Regarding non-acknowledgement and non-advertising clause licenses, the zlib is perhaps the most popular and is a really nice license. It has an anti-plagiarism clause that you can't falsely claim it is yours, but you are not required to acknowledge ownership in binary distributions. (It is appreciated but not required.)

<http://en.wikipedia.org/wiki/Zlib_license>

There is also the anti-copyright notice, which varies in form, but is an explicit public domain grant required by the Berne Convention. Typically they do not require acknowledgment either.

<http://en.wikipedia.org/wiki/Anti-copyright_notice>

<comment><USER7> What I wonder is how far copyright protection goes, specifically when AI algorithms are involved. Suppose you "copy" a recipe + description (or a book for that matter) in the following way :

1) you create markov chains using a large number of cookbook texts

2) you create the markov chain for a specific recipe's description and go down alternate high-probability paths in an effort to creatively change the wording without changing the content (maybe this is comparable to the way a human would if he tried the recipe and then wrote down "how he did it")

3) you republish the result

Did you violate copyright or not ?

The reason I ask is that this is often used as an end-run around patents and copyrights. What most speech recognition programs do these days is preprocess the sound + feed into neural network + get output. (and while most "pattern recognition" algorithms for non-visual things seem to have a love affair with support-vector machines, temporal neural networks are certainly advancing there too).

Now if you analyse what those neural networks do there's 2 types of things 1) ~40% effectively is unrolled loops of (mostly) patented algorithms 2) 60% you effectively don't recognize (to be fair it takes hours of seeing the network operate before you realize anything it's doing)

Clearly this is legal, in cases human implementations of the exact same algorithms wouldn't be, nicely sidestepping the problem of patented algorithms. And as a bonus you don't really have to know the subject matter (e.g. you can write a pretty good voice recognizer without 8 years experience as a linguist. Or you can write them for languages you don't actually know). And as a bonus, academics are miles ahead of the private sector where it comes to machine learning algorithms, so extremely useful thing are effectively free-for-all.

Of course this is also what humans do. If you look at neural networks, they can only do what they've "seen" happen before, or they can combine various things they've seen before. But they are utterly incapable of coming up with original work. So I don't think humans are any different to machines when it comes to producing original work based on combinations of previous works. This doesn't mean the thing that was copied was itself copyrighted, you can write about your own life, for example, or about nature, or ... but we'd call that original, when (in a strict mathematical sense) it's not.

So clearly we've de-facto accepted in our society that machine-processed works at some point start constituting original work.

Do we have any data what point that is ?

</comment></comment></comment></comment></comment><comment><USER8> As someone who dropped out of college to join a "startup," I can reliably say that I didn't have enough information at the time to make an informed decision about what I did or didn't need to know.

I'm happy with how my career has gone since then, but it would be absolute hubris to declare that it was due to my astounding foresight or careful assessment. I was a) motivated b) lucky and c) relatively free of responsibility.

Maybe I've had a more skewed career than most, but I've spent my career working with complex and busy systems. I never had a "freelance web developer" period. I've never just spat out web app after web app for clients. To take your specific example, I missed out on a chunk of algorithmic complexity in college (which I have since picked up) that sheds light on real world problems that might otherwise seem confusing or unconnected.

I understand your frustration, believe me, but be careful not to mix up the knowledge with the institution, or the message with the messenger, as it were.

</comment><comment><USER9> I understand what you are trying to say, but this article is silly from many points of view. I don't want to answer with wise-ass comments like "you went to the wrong college" and such, so I'll give you a couple of arguments:

\- College isn't only CS.

\- Pure (computer or not) science isn't 'working for someone'. It's 'learning how to do (computer) science correctly', hopefully.

\- Plagiarism is not what you are saying, which is superficial. Citing a paper and using previous work in academia isn't plagiarism, for example. Copying someone else's paper and putting your name on it is. Which IS bad. I can't take a linux distribution and tell the world I wrote it. But I can use it and (depending on the license) sell it. Or make something else with it and add my name on it.

\- Performance matters or not depending on the users, obviously. But if you don't know that your algorithms are bad, or if you don't know how to fix them when you hit scaling problems, then what do you do with all your users? Sure, you can hire someone who went to college or learned that somewhere else, but then you'd be supporting the idea that there is no need to be technical to be founders, which is partly true but if google and others taught us something is that the technical founders tend to be able to understand some problems better (and solve them better).

\- Learning the concepts behind the list you wrote isn't incompatible with college. If you take some business classes you can learn a lot of it. No one is forcing you not to take those classes or a major in CS and a minor in Economics.

\- From college you don't get only the classes, but also the interaction with a lot of smart people, diversity, challenge and many other things. It changes you, hopefully in better.

\- Getting excited about being entrepreneurs doesn't always mean the sooner the better. It depends if one is ready. Like with startup ideas, arriving too early may be as bad as arriving late. So, if you quit college for the sake of being an entrepreneur when you are 19 and then you fail, you lost the chance of getting 'more' ready through college.

\- Same applies for grad school. You might not need to go to grad school to do anything. But a lot of people change the way they see the world going to grad school, which, if it made you wiser, could be a good quality to have when founding a startup (plus the extra knowledge).

All this to say that if you think that you can say "all this does is this" I think you might want to rethink a little bit, since it's rare that such absolutists ideas about things so controversial are ever correct.

<comment><USER4> "So, if you quit college for the sake of being an entrepreneur when you are 19 and then you fail, you lost the chance of getting 'more' ready through college."

I hear this a lot (frequently even about passing on college for lucrative, if short-term, opportunities), but I don't get it. This isn't amateur athletics where you have to worry about losing your eligibility and wouldn't be able to get in without an athletic scholarship. You could easily go back to college at age 21 after a year or two of trying to start a business.

<comment><USER10> You can go to college any time, but it's damn nice to be the same age as everyone else there. I'd argue rather that unless you've got a really solid plan, given the choice you should go to college first. You can start a business any time, the only thing you'll miss out on by waiting 4 years is the "Check out this 19-year-old entrepreneur" techcrunch articles.

<comment><AUTHOR> I fear that colleges condition students to be _bad_ at entrepreneurship and teach actively harmful lessons.

Of course this isn't true of all schools, but I can't say for certain I know anyone who came out of college more prepared for the world and business than they went in. More prepared for a job, surely.

</comment></comment></comment></comment><comment><USER11> I prefer to take a different perspective: college didn't fail you, you failed at going to college.

College is a place to gain knowledge from those that have more than you. If you see it as anything else (especially anything malicious) then you're looking at it from the wrong angle and coming in with the wrong attitude. A motivated person can gain a lot of insight and knowledge from even the shittiest of situations.

College classes are a completely valid way to learn things. If you think that you're entrepreneurial dreams will be fulfilled if you drop out, then go for it. Some people don't learn that way, and that's just as acceptable. There are problems with higher education, and some places more so than others. But don't be so vain as to denounce the entire institution of higher education from a single anecdotal data point.

</comment><comment><USER12> 1\. Plagiarism is bad

I'm assuming this meant in the sense of "why can't I just copy a binary tree implementation from the internet and turn it in", since every advanced course I took in college encouraged the use of libraries where appropriate (to the point of linking to open source libraries on the course website). The answer to the former question should be painfully obvious... you're learning to be a creator of things, not a user of things. That would be like taking an operating systems course and saying, "See, I downloaded Windows! Where is my A?"

2\. Performance Matters

Tell this to Digg (one small example in a sea of them). Kevin Rose has said several times that he regretted hiring so many "get things done" PHP programmers that had no in-depth algorithm knowledge because as soon as the site had to scale none of them had knowledge outside of their PHP sandbox.

As far as the difference between copyright, trademark, and patents, ABET requires a Capstone/'Ethics' course that includes these very topics. I actually did a research report on software patents during my undergrad which included a presentation on how software patents have affected the software industry. As far as planning a product and tracking its development, ABET also requires an 'Intro to Software Engineering' course which is, you guessed it, planning and building a product from first principles.

<comment><AUTHOR> My school was ABET accredited, so I guess ABET is crap. I don't care at all about ethics - you can't teach that in a semester of college.

I care about the law, and what I can and can't sell without being able to win the lawsuit when I'm sued.

I've never had to build an operating system, and I never will. Performance problems likely mean you have product success, at which point you can figure out solutions to your problem.

You don't get facebook scale by planning it up front.

<comment><USER12> The name of the class will vary, I just mentioned Ethics because that seems to be what a lot of schools call it. Mine was "Social Implications of Computing"... but again, it goes into (very specifically) the law regarding copyright and patents. Your college can be ABET accredited, but that doesn't mean your degree program was.

I've never had to build a priority queue. The language I've used has always had a library to provide that functionality for the purposes I needed. However, knowing what a priority queue is, how it works, and when it is appropriate to use (and those pesky big O performance implications) were all taught in an algorithms course (and are a quick CLRS reference away).

On performance problems, that is an incredibly hand wavy response. You seem to be assuming product success is a $50 million Series A round and enough buzz to make people want to work for you. And what are you going to do with that money? Probably hire someone who has an understanding of algorithms and operating systems.

</comment></comment></comment><comment><USER13> Apparently I went to the wrong college. Note, I still _am_ in college, but nonetheless part of our learning was independent readiness. In my first non- basic programming class, my professor taught us alongside our Operating System class how he built computer kits and sold them. We were taught legalese in the field, and the power of performance.

My school is very small, and our department is even smaller. We have very few students pass through our department each year (around 3), but we're pushed to be our own innovator in the world. While a lot of our schooling does involve how to work within a company, we learn just as much about being independent.

<comment><AUTHOR> I've heard great things about the Stanford school of business, and the entrepreneurship program specifically, but it was outside my purview and budget.

I'm certain there are outliers to what I wrote, but I feel the majority of schools are _just_ creating employees, and that's....sad.

<comment><USER13> The small class sizes are surely a boon to be had. I have a good direct relationship with all of my professors, and they monitor my progress closely. If I ever have issues, I'm meet personally with them to straighten them out.

But to be perfectly clear, the best thing I could ever ask for is the ability to see my professors work live. One of my professors was a high-up manager for a very large insurance company, and the other was a good friend of Edsger Dijkstra, among others. One is an immense source of advice in practical software engineering, and the other can usually teach me a pattern to solve a problem in ten-times less code and more efficiently.

And, due to the small size of my school, my semester-ly tuition is less than $2k. It might not look like much on a resume, but I've hit the jackpot of schools.

</comment></comment></comment><comment><USER14> Computer Science us a scientific career (the name is a dead tip-off), and as such you shouldn't expect to learn how to start a company if that's your field of study. There is some common ground between what's needed to be a computer scientist and what's needed to be a technical entrepreneur, but if being and entrepreneur is what you know you want to do, CS is probably not the best way to get there, specially in places where education is as expensive as it is in the US. But that's a long shot from saying it only "prepares you to work for someone else".

</comment><comment><USER15> "Pedigree Matters" as an untruth: I wish this were the case. Too many entrepreneurs I know are only entrepreneurs because they have the support system of comfortably wealthy families and the professional network gained at elite schools and fellowships.

Would love to hear more about entrepreneurs who live on the edge and try to start a business while also needing to make rent and student loan payments.

<comment><USER16> It sucks. A lot. I planned on dropping out two years in and ended up having to go back to school because my parents couldn't afford the loan payments at the time - and they wouldn't have to pay while I was in school (which they wanted me to do anyway). Went back and did client work to keep the lights on.

</comment></comment><comment><USER17> I started school when I was 23, mainly due to pressure from my parents. I was working full time as a VoIP tech however my mom kept pressuring me to get my degree.

I'm 29 now, have worked full time until I was 26, and started my own web development firm at 27 (hired my first two full time employees in 2012).

I'm a few months away from being done with school, and I can honestly say it has been the most worthless investment in my life. Everything I have learned in my positions as a IT Admin to Dev has been on the job.

School has just been a lot of wasted time doing fill in the blank work that I could have spent learning things or bettering my business.

<comment><USER18> This seems like a learning style issue, and that will vary; however you and I are in the same boat.

</comment></comment><comment><USER19> Like most comments here I would have to say I completely disagree. In fact I learnt very little of the skills needed to work in a corporation. Testing, build automation, source control, working on large projects, working with poorly documented legacy code. All skills necessary to survive in corporate software development that were never touched or only very lightly grazed.

If you want to go to college to learn to be an entrepreneur, get a degree in entrepreneurship. Colleges should teach the core competencies of your degree that can then be applied in any number of ways.

[Edited for spelling]

</comment><comment><USER20> This is ridiculous. Going to college certainly shouldn't be taken lightly and if you don't have an interest in broadening your mind and just want to make money, then you'd be better off educating yourself or going to a trade school. But for people that genuinely have a love of learning and want to discipline their mind in ways they haven't thought (not to mention meet interesting and intelligent people inside and outside of their career), college can be a worthy investment.

</comment><comment><USER21> I disagree.

I'm a senior a very theoretical university and my friends in the CS department often complain:

\- "Why should I learn all these sort algorithms? Let some grey beard figure out which one is best for me and wrap it up in sort()"

\- "Why do I have to take all these required classes? Why do I have to do a semester of foreign language or a physic pre-requisite?"

\- "Why do I have make an entire operating system in this class? When in the real world would I ever need that?" etc.

Bullshit! It's good to be "T" shaped - studying a very technical area like honest-to-god computer science trains you to dive deep, to be able to confront a problem and approach it analytically. All the prerequisites have given you a stepping stone into understanding, or at least appreciating, other areas. These are very useful skills to have and they certainly make you a more interesting person.

Sure, there are plenty things left out that would be useful for entrepreneurship. Half of my friends in the CS department haven't taken the initiative to learn "real world" development yet with all the shiny tools and most (myself included) have no idea what it takes to run a business. But to say college only "prepares you for the life of a corporate stooge" is a mistake.

</comment><comment><USER22> Surprise! College is supposed to teach you to be proficient at what most of their students end up doing: working at the corporate level. Whether or not you have the desire to go and do your own thing is really up to you.

At one time I was extremely dissatisfied with my college's cookie cutter curriculum. But I realized that this setup is built to get you in the job market. It was up to me to do the extras.

<comment><USER23> I think it really depends on what college and what program in that college you go to.

The vast majority of my professors were genuinely interested in developing their students as independent thinkers capable of much more than corporate drudgery.

Perhaps the business-end of the university is focused on getting you into the job market (since that's how many people want to evaluate their college experience and investment and hey, somebody's gotta pay the bills). But if you are in a more academically inclined program, I think you'll find that the pursuit of knowledge and a joy of learning is what matters most.

<comment><USER22> True. In my experience, the professors really worked hard for the development who had the desire to go beyond the required material. It's just that the average student will never think about going beyond what is required for the class.

</comment></comment></comment><comment><USER24> One of those articles where a lot of ideas have been put down that aren't exactly "true" so much as it would be _convenient_ if they were, to better justify the path the writer has decided to take in their life.

</comment><comment><USER25> I don't have a CS degree nor did I attend a school that even offered a CS degree so my college experience was quite different.

I attended Emerson College where most of the degrees are in the arts and communications and everything there was focused on not becoming a corporate stooge but often an entrepreneur.

Most work was project based often with the idea that your work would help to build your portfolio. Most importantly, your work outside of the classroom working on films, recording bands, writing marketing campaigns with clubs or on your own was just as much of the curriculum, possibly more so. I learned that only a small percentage of knowledge was coming from my professor at the front of the room but from the people around me and the work I was doing on my own. If I didn't take that "work outside of the work" attitude from college I think I would have had are a hard time getting motivated to learn to program and do other ventures like doing freelance work or working on passion projects on my own.

Sorry but college is what you make it.

</comment><comment><USER26> Seems like you're just trying to get attention with this post. The title is catchy and the content pointless but it did remind me of a good quote from Joichi Ito "Education is what something does to you, learning is what you do to yourself. Education is the worst you can do to someone who wants to be creative"

</comment><comment><USER27> Because everybody who studies CS wants to be an entrepreneur? Of course you don't need a degree in Computer Science to develop a technology startup. Web design is a trade skill and should be excluded entirely from an academic curriculum. Sadly, some universities are being pressured into offering it due to increased demand from an influx of wannabe sellouts. I decided to pursue a college degree because I'm interested in solving challenging engineering problems that your two-bit startup and myopic vision couldn't possibly begin to encompass. So, Mr. Kendall, you have it rather backwards: it's not universities that are in the wrong but rather students who come in with maligned expectations and the determination to under-utilize their academic training.

</comment><comment><USER28> Nothing new here. School isn't for learning. it's for learning how to "toil."

[http://www.overcomingbias.com/2010/08/school-isnt-about- lear...](http://www.overcomingbias.com/2010/08/school-isnt-about- learning.html)

</comment><comment><USER29> I've thought about this question for a while, if I would recommend college or not. Ultimately I've come to realize it has _loads_ more to do with the personality of the individual than going to college or not. Some people are fit to be entrepreneurs, others are not. Some people are good at taking orders, others at giving them. It's not completely black and white, but generally a person leans one way or the other. The given person _can_ change to the other side, though I would say that is less common.

</comment><comment><USER30> So, considering that under 5% of the ventures succeed, college set you up for almost certain success? Seems like a great thing to me.

</comment><comment><USER31> As a soon-to-be college graduate, I'd be very interested in hearing your answers to those 10 questions at the bottom.

<comment><USER32> I will answer 5, 7, and 9. Although there are many ways to answer that are correct or good, these are what seems to work with my temperament.

5\. The way I have done this is by a landing page to gauge interest and by getting a handful of customers willing to buy in a recurring fashion as a starting base before significant monetary investment on my part.

7\. Get a partner in equity early and outsource or automate everything possible before hiring employees. Hire when the cost of failing to get the right employee will not harm you financially.

9\. If none of the directions are obviously better or have data to show why they are better, find a way to get the data to show you which direction is best.

Just my 2 cents.

</comment></comment><comment><USER33> You get out of college what you put into it.

I certainly have friends who are learning to "be a cog in a wheel" but that's not at all the only possible outcome of a college education. Insinuating otherwise is questionable at best and incredibly misleading at worst.

</comment><comment><USER34> Given that it's what most people have to do their whole lives, I'd say it's a pretty useful skill.

</comment><comment><USER35> Instead of advocating for the abolition of college or decrying the value of a traditional education, could you perhaps phrase this as:

"An Alternative, Practical Education"?

</comment><comment><USER36> _10\. How would you move Mount Fuji?_

Seriously? You think it's important to know how to answer this bullshit?

Why don't you go the whole bullshit hog and add to the list

 _11\. What's your greatest weakness?_</comment>


Learning Java alone doesn't make you Java developer - <AUTHOR> http://veerasundar.com/blog/2009/05/12/learning-java-alone-doesnt-make-you-java-developer/ <comment><USER2> > I was thrown at huge list of Java jargon, which I've never heard before. > log4j, DI, IoC, RMI, JNDI, to name a few.

...and therein lies the problem. J2EE is the umbrella word that covers up a rat's nest of API's that are constantly changing and being replaced in favor of other other API's.

What is so complicated about web development that Java developers feel that it requires 18 different layers of code and special servlet containers to accomplish? Take a peek at a plain Tomcat server process running absolutely nothing: it uses 430MB of RAM for one process, and that without any extra servlets installed. I'm convinced J2EE only exists only to keep mediocre developers employed at big companies that don't know any better.

<comment><USER3> Yes, you didn't know that? Wherever you see the word "enterprise" just replace it with "CYA".

As someone whose day job entails writing servlets (and all Java web development boils down to servlets), I find that I really can no longer get excited about a Java web project because the first thing I think about is how much of a pain it's going to be to make it. Not pain as in difficult, but pain as in tedious.

</comment></comment><comment><USER4> You become that as soon as you implement a FactoryFactory complete with your own xml driven configuration.

<comment><USER5> I didn't think much of the article (common knowledge statements).

But the combination of the title and the parent post is quite amusing.

Learning pl alone doesn't make you a pl developer. You become that as soon as you implement a virtual database to make up for deficiencies in the existing customer database which cannot be changed.

</comment></comment><comment><USER6> It's not clear from the article what sort of classes the author took to learn Java. If the title was something resembling "enterprise software engineering in Java" then he has a valid complaint; not covering the many libraries and tools commonly used for that purpose is a serious omission.

If the subject was something like "computer science" then failing to include any of several tools popular in industry is entirely appropriate if those tools aren't optimal for teaching about how computers or computation works. From what I know of Java and associated tools, it seems entirely appropriate to omit the whole language from a computer science curriculum.

</comment><comment><USER7> College alone will never prepare you for real-world anything, programming or otherwise.

</comment><comment><USER8> The article is quite wrong. Learning Java does make you a Java developer. You don't have to know any particular framework to be a Java developer, because there are dozens of popular frameworks in use, and different projects use different frameworks.

There's no point in learning J2EE if you don't want to work on J2EE applications.

There's no point in learning Swing if you don't want to work on Swing applications.

I think what this he meant was, "Learning Java alone doesn't qualify you to apply for most Java jobs," or maybe, "You will not be immediately productive at your new job if all you know is Java."

<comment><USER9> Back when I did Java professionally (1997) it was expected and considered normal for a Java programmer to know the entire thing and be able to do GUIs or network servers or whatever else needed doing. The hyper-specialization came later.

</comment></comment><comment><USER10> I think that "Java" is being used as a variable name here, which can stand for any programming language ever compiled/interpreted.

<comment><USER11> "learning x doesn't make you an expert in x"

</comment></comment><comment><USER12> Learning the language and the du jour APIs will also not make you a skilled Java developer, which is what I think the author means; doing that in any language X will not make you an X developer of any reasonably high skill.

The problem I have with posts like this is that they seem to be focusing entirely on the wrong way of learning to develop software. They work from the assumption that becoming a developer is a matter of memorization, and the reason they aren't there yet is because they haven't memorized enough API definitions or acronyms.

Approaching anything from this level of abstraction results in needing to learn most everything as if it were a completely new area of knowledge. And it is an _incredible_ timesink, as the author has already confessed

Instead of realizing the need for a hash table to solve a problem, and researching what options are available in this language, they either perform a scan of all of the options and pick the one available that looks best, or they rely on some mnemonic to decide what data structure to use without really understanding why it should be used. Both arrive at approximately the same place -- hopefully -- but they approached it from entirely different directions.

The former developer already knows the metaphor he is looking for, and thus his search will be very limited in size and when he finds class/library/etc. he needs the API will already make some intuitive sense provided it implements what it claims to.

The latter developer has no metaphorical basis for what they are doing, and thus even when they find something that works, they'll have to rote memorize the API, because to them it's just a formless black box.

To answer the author's question about what APIs one ought to know, my response is that the author is asking the wrong question. I'd like to ask what has convinced them that APIs and acronyms are the thing most worth knowing. It seems to me the author's time could be far better spent learning the metaphors and theory behind those acronyms and APIs, and then realizing that finding and learning new APIs and class libraries aren't all that tricky once the fundamentals are understood.

</comment><comment><USER13> You see the same mindset in any programming student regardless of the language. Nothing can ever replace real-world experience, especially not with just one language.</comment>


Trending AI Projects of the Week - <AUTHOR> https://towardsdatascience.com/trending-ai-projects-of-the-week-44-19-1fb4085edf59 <comment><USER2> interesting that they use deep learning to pawn passwords</comment>


Show HN: Understand and develop your team right in Slack - <AUTHOR> https://teambit.io/slack/ <comment><USER2> While I think this (like Slack) can provide value and might be welcome by some as a great tool for work I cannot stress enough the fact that from my experience chat for work becomes misused when it's allowed or encouraged to be used for organizational purposes.

At a glance it seems to me you might have found a good use for it, just please remember where chat starts and ends being a useful tool as it seems to me more and more people use it for things it is not good at.

Do educate me if you think I'm missing it's point.</comment>


Show HN: Mathpendium, updated - <AUTHOR> https://mathpendium.org/discover <comment><USER2> Nice update!

If I touch "Edit", and make an update, then I have three buttons "Add item", "Submit" and "Cancel". I'm not sure if I should click on "Add item" or "Submit". (So I tried both.)

Also, after the submission, the item is not updated. I guess you (or some register users) must approve the change. It would be nice if the "thanks" message explain that, something like:

> _Thanks for your contribution! It will be reviewed soon by one of the > Mathpendium members._

where "soon" and "members" are two fuzzy defined concepts.

It also should be nice to see how many pending corrections has each entry, to get some feedback that the correction was registered.

</comment><comment><AUTHOR> I've updated Mathpendium based on all of the great feedback I received before, and wanted to share the update. Thanks.

<comment><USER3> The previous thread: [https://news.ycombinator.com/item?id=22290812](https://news.ycombinator.com/item?id=22290812)

It would be good to add some information here about what updates you made.</comment></comment>