The JED Programmer's Editor (2017) - <AUTHOR> http://www.jedsoft.org/jed/ <comment><USER2> Somewhere around 1994, I used to dial into the university's terminal server using a Wyse 370 and a 9600 baud modem. (Note, this was not PPP or SLIP providing TCP/IP. You had to type the atdt modem commands directly...) This particular terminal had 64 colors as an extension to the VT100 command sequences. I sent an email to John E Davis asking if he'd be willing to add support for my one off color capability, and he did! Super nice guy, and JED was one of the first things I compiled on every new Unix account I got for several years after that. I was very happy with very colorful source code.

<comment><USER3> That's the job of termcap or terminfo depending on the OS.

</comment></comment><comment><USER4> I remember JED! When I started out on Linux in 1997 (coming from DOS/Windows) I was forced to choose an editor. There was Pico which was specific to the `pine` e-mailer (this was before nano), and of course vi and emacs.

I didn't want to invest the time to learn vi or emacs so I used JED for a while, and it served me well. But coming from DOS, JED still had a bit of a learning curve. I figured if I was going to pick up a totally foreign editor, I should probably just bite the bullet and learn vi or emacs.

I settled on vi(m) eventually and never looked back. JED helped me make the transition though.

There was also an editor JOE which had Turbo C keybindings. That would have been a great fit for DOS heads like me but I learned about it too late. The ship had sailed. (it's just as well -- I now have vim muscle memory, which is far more useful)

<comment><USER5> Joe is still around, and actually quite usable/performant. If it's invoked as "jstar", it gets even closer to WordStar/TurboPascal keybindings. It can also do "jmacs" which has Emacs keybindings, the default "joe" configuration being something in between.

Does syntax highlighting, incremental search, regexes, and all that pretty fast.

If we're talking old DOS editors, JED actually has a quite decent BRIEF emulation.

<comment><USER6> > old DOS editors.

PC-Write key bindings are out there too..

</comment></comment></comment><comment><USER7> Jed is amazing, I use it daily.

I still have on by backburner to learn how to actually customize it, but I make do with the standard configuration most of the time.

What I like about it.

\- Wordstar-like interface (file menu, etc)

\- fast

\- 100% sane user experience, with program options that I can wrap my head around. Minimum of arcane stuff.

\- Emacs-lisp compatible (somehow, I don't know, I just see that it's there)

\- Multi platform!

Anybody here have any .config files published to Git/lab/hub where I can look for some ideas for customizing Jed?

EDIT: I guess the website contains all the resources I need to learn more about customizing the program.

</comment><comment><USER8> Looks like a borland IDE!

[https://www.jedsoft.org/images/jed1.png](https://www.jedsoft.org/images/jed1.png)

I don't use JED but I do use `most` from time to time, as a replacement for the `less` pager. I like the keybindings better. Apparently, it is implemented with S-Lang too.

[https://www.jedsoft.org/most/docs.html](https://www.jedsoft.org/most/docs.html)

<comment><USER5> SLRN used to be be a pretty popular newsreader implemented with S-Lang, never mind that S-Lang, sans the language part, was a quite common alternative to ncurses as a terminal interface.

The language itself is... interesting. C-like, but with some array-based constructs and quite a large amount of backwards compatibility -- there's a "_for" statement and default arguments are _weird_ , as they're not mentioned in the prototype, but just done in the main body. It's a bit like Perl, but without the logic.

<comment><USER9> Oh, I do miss slrn. Even now I still get spam to ` _slrn_ ` email addresses from usenet spammers.

</comment></comment></comment><comment><USER10> I used to work at a very small network engineering shop where JED was the primary terminal editor used (mainly because it was the CTO's flavor of choice). It's lightweight and easy to learn with Emacs keybindings, but I'd never use it for doing anything more than quick edits and scripting.

These days, though, an editor not providing Vim emulation pretty much counts it out for me

</comment><comment><USER11> Wikipedia entry:

JED is a text editor that makes extensive use of the S-Lang library. It is highly cross-platform compatible; JED runs on Windows and all flavors on Linux and Unix. Older versions are available for DOS. It is also very lightweight (meaning very parsimonious in its use of system resources), which makes it an ideal editor for older systems, embedded systems, etc. JED's Emacs mode is one of the most faithful emulations available.

[https://en.wikipedia.org/wiki/JED_(text_editor)](https://en.wikipedia.org/wiki/JED_\(text_editor\))

<comment><USER12> I used to use lightweight editors on small systems like vi (not vim, the smaller vi).

But when I discovered emacs tramp mode, I sort of got away from that.

emacs comes with tramp mode built-in and allows you to edit a file on even very small embedded devices using only ssh.

I think it might work on telnet or other protocols, but I've never tried them.

for example

      emacs /ssh:foo:/etc/bar.cfg

where _ssh_ is the protocol, _foo_ is the machine name and _/ etc/bar.cfg_ is the file on foo to edit.

or

      emacs /ssh:user@host:.profile

<comment><USER11> The syntax for tramp-mode is on the arcane side.

<comment><USER12> I mostly use emacs /ssh:ab:.bashrc which I think compares favorably with

      ssh ab
      emacs .bashrc

(or anything with a URL)

my .ssh/config contains a "Host ab" section for particulars about logging into the machine.

Although you have a point. For instance there is a weird bug or two in tramp mode, like (absolute-file-p "/ssh:ab:.bashrc") erroneously returns t

</comment></comment></comment></comment><comment><USER13> I've been using Jed as my primary editor for the past 20 years.

Originally because it was faster than Emacs while providing the same experience.

Then because I loved how its automatic indentation works ("tab" properly indents the current line), and I still can hardly use an editor that doesn't behave in a similar way.

Finally, the language extensions are written in ("slang") is great. It feels familiar, is readable and is easy to pickup, unlike Emacs Lisp.

Jed and Piknik are the two first things I install on any new computer.

Today, in order to write Rust code, I use VSCode, but for everything else, Jed remains my go to editor.

</comment><comment><USER14> > Extensible in the C-like S-Lang language making the editor completely > customizable.

I wonder if this is like Emacs level customizable or just regular editor customizable.

</comment><comment><USER9> Interesting* fact: the "Lynx Style Sheets" highlighting was originally done using S-Lang. Dunno if it's been extended to ncurses since.

</comment><comment><USER15> Used JED in the 90s to 00s until nano became a default lightweight editor. Was a lot faster to start for small edits than Emacs. Really liked the editor.

<comment><USER16> The thing with emacs is that you normally wouldn't "start for small edits." Rather, you'd start it early in the morning and close it late at night (if ever).

</comment></comment><comment><USER16> (Not to be confused with jEdit.)

</comment><comment><USER17> That's a blast from the past; I remember using this in the 90s as a programming editor for the HP100lx pocket computer (a 186 running MS-DOS5). Quite zippy even on that limited hardware.

<comment><USER18> It was my go to for a long time for editing over ssh. I eventually broke down and learned enough vi to get by, but jed has zero learning curve and syntax highlighted everything without installing packages

</comment></comment><comment><USER19> Jed was the first editor I really like back on slacklinux something or other. I learned vim and never... No wait, I love evil emacs :)

</comment><comment><USER20> I used jed as my lightweight alternative to Emacs for a very long time. I stopped doing so a year or two ago and now just emacs.</comment>


Google's AdSense Revenue Share - <AUTHOR> http://adsense.blogspot.com/2010/05/adsense-revenue-share.html

<comment><USER3> _The remaining portion that we keep reflects Google's costs for our continued investment in AdSense_

Where did Google's honesty go? Google is wildly profitable. This post tries to convince you that they charge you for their _costs_ only. That's just plain misleading.

<comment><USER4> That's cost for future R&D -- they don't pay a dividend. All that money goes in the bank.

They did say "costs for our continued investment in AdSense". Profit is the continued investment part.

<comment><USER5> jeddy jed jed (are you cool with being called that?) - it looks like you are technically right, but Google perfectly worded the sentence to make it sound like they are not making a huge profit, but instead are simply covering costs. I also strongly believe this is and was their intent.

<comment><USER6> Wow, are you saying that a writer working for Google is trying to portray Google in a positive light? Talk about a conspiracy!!!

<comment><USER5> Thanks for you comment, but I don't see the need for the straw manning you pulled.

I'd at least be able to understand the apparent contempt in your comment if it looked like there were a decent amount of comments in this thread that weren't doing exactly what I did by writing the obvious.

On a side note - cheer up man, life is too short for negativity on a personal level.

</comment></comment></comment></comment></comment><comment><USER7> I may be missing the point here, but I don't think that this announcement actually says much about what we as individual publishers can expect as rev share.

What I understand from the article is that 68% of the _aggregated_ revenue generated by _all_ the publishers is payed back by Google to the publishers, probably not evenly.

If the figures given are simple averages (TOTAL_AD_REVENUE / TOTAL_NUMBER_OF_PUBLISHERS) then it is not an useful figure for individual publishers. For example, it may mean that a handful of huge publishers are getting a revenue share of 90% but the vast majority of medium and small publishers are getting 20%. You would still not know how much is the typical publisher getting.

Until I see more information about how the 68% and the 51% figures were calculated and about whether all publishers get the same or similar rates, then I will still have no idea what the effective rev share for a typical small publisher (less than 1,000,000 pageviews/month) is.

<comment><USER8> Pardo - the 68% is exactly the same for each publisher that has a ca-pub- XXXXXXXXXXXX publisher ID.

</comment></comment><comment><USER9> John Battelle claims that the share is really 57.8% due to a 15% fee being taken out: [http://battellemedia.com/archives/2010/05/68_of_85_is_really...](http://battellemedia.com/archives/2010/05/68_of_85_is_really_578)

<comment><USER10> It's good to remember that Battelle runs an AdSense competitor. Especially considering that Google disputes this claim of his.

<comment><USER5> Thanks. I'm a bit anti-Google in that I don't like any big companies controlling large portions of markets (Google -> Search). But it's important to remember to wait for proof of claims and to see people's true intentions and not taking things for granted. For instance, I immediately muttered "frickin Google" upon reading Battelle's post without even thinking that he was a competitor blogging without proof.

</comment></comment></comment><comment><USER10> I wonder if this disclosure was a condition of the AdMob Department of Justice approval.

</comment><comment><USER11> What other options are there for small websites? Has anyone heard of anything that could be a credible replacement for adsense?

<comment><USER12> At levels above "webmaster welfare" (as my SEO friends call it), you can do direct ad sales or affiliate ads.

A smart guy once suggested to me that when trying to sell ads on a semi- successful site he would "give" one of the six ad slots to an affiliate-using merchant by using their standard affiliate creative in the slot, and watch what revenue was from that. That would both give social proof to the site ("Look! It already sold one ad!"), and give him a floor to establish prices on the remaining inventory. If you can make e.g. $60 a month with on affiliate ad, then charge everybody else $100 a month for the same slot.

Apparently, in many niches, "Your ad in this space. Click here." works well enough to sell out inventory for small sites. There are many, many options for you if you want to make it a self-service thing rather than a "Email me, hammer out an agreement, and after you Paypal me the money I'll add your link directly in myself."

[Edit: At higher levels of deviousness it occurs to me that why have one filled slot and five empty ones when you can have five filled slots and one empty ones. This space is going, going, gone -- get it before it becomes booked!

Don't like affiliate ads? Advertise your favorite OSS project. You can always rejigger things once your "last" spot sells, dropping one of the donated "ads" from the rotation and freeing up another "last" spot.]

<comment><USER13> What you're calling devious is what most of us would call effective use of marketing psychology. Cialdini has written a bunch about it, and I think it's gotten into the collective marketing consciousness as the "scarcity principal". It's used everywhere else ("Act now! Supplies are limited!"), why not on the web?

<comment><USER5> I'm going to assume the OP is calling all marketing psychology devious. Would you not agree? I know devious has a harsh connotation to it, but strictly looking at its definition, it seems to fit with your last two sentences.

</comment></comment></comment></comment><comment><USER14> I'm actually surprised that the rev share is so high. Most of the ad networks that I have used/looked into are around a 50/50 split.

</comment><comment><USER15> I think this is a very interesting bit:

"Over the next few months we'll begin showing the revenue shares for AdSense for content and AdSense for search right in the AdSense interface."

I'm looking forward to that. What bugs me is that I can't seem to buy clicks for even twice of what google pays for clicks.

</comment><comment><USER16> Several people asked below what viable alternatives there are for small sites.

I know that project wonderful (<http://www.projectwonderful.com/>) is one that has a reasonably large following.

</comment><comment><USER17> That's "Revenue Share", not "Review Share".

<comment><AUTHOR> Indeed it is - <USER2>

</comment></comment><comment><USER18> apple iAd pressuring google</comment>


A Gutted I.R.S. Makes the Rich Richer - <AUTHOR> https://www.nytimes.com/2018/12/25/opinion/editorials/irs-audits-rich.html <comment><USER2> Now, if it could only make the Federal government spend less...

<comment><USER3> You mean by spending less on tax breaks? Or on mandatory prison sentences for minor offenses? Or on overpriced police and military equipment?

Or do you mean cut funding to services like education, medical care, maintenance to create the appearance of "savings" in the short term, but costing vastly more in the long term?

<comment><USER2> Tax breaks !== government spending

As to mandatory prison sentences, I'd be happy to see most of that changed, and for that matter most drugs decriminalized. I'm also not a fan of police militarization or the size of the military industrial complex in general.

So, it might be a good idea to not make assumptions about who you're talking to. I've worked in government adjacent roles and have friends who have as well. There is absolutely no way you can convince me that the government couldn't operate on less than half of what it does and be more effective doing it.</comment></comment></comment>


Secret passages on Microsoft main campus - <AUTHOR> https://blogs.msdn.microsoft.com/oldnewthing/20101005-00/?p=12623 <comment><USER2> This reminds me of a book I bought in the early '90s, when I moved to Seattle. It was called "Seattle Survival Guide" and covered the things you needed to know to live well here, as opposed to the touristy things that typical city guide books covered.

One of the things it had were downtown pedestrian shortcuts. For example, starting at the ferry terminal, you could walk up the Marion street overpass to 1st Avenue, enter the lobby of the Federal Building, take the elevator to the 4th floor, and exit to 2nd Avenue. Cross the street and take the escalator to First Interstate Plaza and walk through that to 3rd Avenue. Across the street was the Seafirst Building. You could take the 3rd Avenue entrance to that, ride its escalators up, and take its 4th Avenue exit. Cross the street to the Seattle Public Library, enter on 4th, take elevator or escalator up, and exit on 5th. Cross 5th and enter the U.S. Courthouse, take another elevator, and exit the Courthouse's 6th Avenue exit. All those elevators and escalators cut about 200 feet of climbing out of your walk up to 6th Avenue.

(Note: that route worked in the '90s. Some of those buildings have changed since then, so I don't know if there is an equivalent route now).

</comment><comment><USER3> Most of those aren't secret but are not widely known. Reminds me of the level -4 walk way at Heathrow Terminal 5. Avoid the crowds waiting for the train and take a nice walk underground. You'll typically be all alone.

</comment><comment><USER4> Have you found building 7 yet?</comment>


Spirit Guide – Reinventing a great distillery - <AUTHOR> http://www.newyorker.com/magazine/2013/02/11/spirit-guide <comment><USER2> This is a great article.

I visited Islay in 2012 and toured several distilleries, including Bruichladdich. I was already somewhat of a fan based on their unconventional marketing and experimentation, not to mention the incredible Port Charlotte releases, and knew some of this story, but this article filled in the details.

The only misleading part I'd point out is that the article implies that malting barley on Islay is impractical in general, but several distilleries do malt their barley on the island, notably Bowmore, which malts it on their own floors. Many of the others get their malt from Port Ellen Maltings, also on Islay.

I'm really looking forward to cracking open the Octomore in my cabinet...

</comment><comment><USER3> I love Islay scotches, and so it was remarkable to learn that "out of Islay's thirty-five hundred residents, about fifty of them work for Bruichladdich." 3,500 people making a world wide impact by their lifestyle and craft.</comment>


Faster Ruby JSON Serialization from Netflix - <AUTHOR> https://medium.com/netflix-techblog/fast-json-api-serialization-with-ruby-on-rails-7c06578ad17f <comment><USER2> I think they are solving a real pain point with Ruby APIs</comment>


Python Tutorials, more than 300,  carefully sorted by topic and category - <AUTHOR> http://www.awaretek.com/tutorials.html <comment><USER2> python? nah, it's one of the worst programming languages ever

<comment><USER3> Wow. The ignorance...

<comment><AUTHOR> haha..well said :D ....is he a noob?</comment></comment></comment>


Goop's Netflix trailer: Paltrow sinks into a vagina, spews pseudoscience - <AUTHOR> https://arstechnica.com/gaming/2020/01/goops-netflix-trailer-paltrow-sinks-into-a-vagina-spews-pseudoscience/ <comment><USER2> Scientific American did a pro Goop piece.

They then deleted it from the record (Rather than standard practice of retracting it)

Why should we expect anything of Netflix given SA does the same?

Doctors Are Not Gods [https://digestinternational.com/2019/11/26/doctors-are- not-g...](https://digestinternational.com/2019/11/26/doctors-are-not-gods- scientific-american-blog-network/)</comment>


John Resig Talk: Performance Improvements in Browsers - <AUTHOR> http://ejohn.org/blog/talk-performance-improvements-in-browsers/

<comment><USER3> Regarding testing JavaScript parse speed, why is it difficult to test in the browser? Couldn't you, for example, wrap a string containing JavaScript code in "function(){}" and pass it to eval, or do "new Function()", and not execute the result?

As a corollary to that, doing

        eval("function(){"+code+"}")

is _much_ slower (~5x) than

        new Function(code)

at least in Firefox using 280slides.com as my test subject (which is part of the reason we do use "new Function").

<comment><USER4> new Function() /may/ work - but that's only if a browser actually parses the code when you pass it in to the function. Maybe a browser is lazy and only parses it when it's executed for the first time? (I know that's what I'd probably do.) Of course then we're back to our original problem again - <USER2> unable to find the difference between them.

To your second point: Of course eval("function(){"+code+"}" is going to be a lot slower than new Function(code) - you're constructing a closure to any external variables that are used (not to mention that using eval will have to parse the full expression and return the result - rather than with new Function which has a singular purpose).

<comment><USER3> I suppose you could wrap the code in "if(false){ }" (or make the first statement a "return" in the case of "new Function()") and actually execute it to ensure it's being parsed, but we're entering hacky territory...

</comment></comment></comment><comment><USER5> Interesting - particularly the difference between the type of benchmarks. I shouldn't be too surprised I guess.

It's also interesting how little what we used to call "layout" is a performance target any more.

<comment><USER4> I've actually written about JavaScript benchmark quality before: <http://ejohn.org/blog/javascript-benchmark-quality/>

(I've since re-written Dromaeo - and the current version that's live is taking in to account all the problems that I outlined in this post.)

I think layout would be more of a performance target if there was a reliable way to test it across platforms - or even on a single platform (especially so from JavaScript). That's definitely something that I'd like to shoot for, though - it would be hugely helpful to developers.

<comment><USER5> Thanks for the link.

I guess my thinking was -- I hear a lot of anecdotal discussion about the FireFox codebase and how it needs to be re-engineered, etc, etc (ie. WebKit is tidier and so forth).

If the performance war is elsewhere, does that remain a factor? i.e. Assuming the above is actually true, does the codebase have legs as the performance war is elsewhere?

<comment><USER4> I think that the Firefox codebase is a lot of things. It's been around for a while, for sure. There's cruft - definitely. It's also being actively stripped of its cruft and being actively improved. I think a lot of people are coming to discover just how much 'oompf' the Firefox codebase has. For example, all of these huge JavaScript performance improvements (TraceMonkey) are a layer of additions on top of the existing JavaScript engine (SpiderMonkey). So yeah, there's some really smart people at Mozilla who are making the code base quite fast - just as there are at Apple, Opera, and Google. It's a great time to be a web developers - this performance battle is just awesome on so many levels.

</comment></comment></comment></comment><comment><USER6> Hey John, while I've possibly got your attention, I've got a question regarding performance on IE. This one, to this day, I cannot explain.

The gist of it is: I do "document.attachEvent("onmousemove", fn)" where fn resizes a div based on where the cursor is. I then test it out, and it's slow as hell, especially when the div gets pretty big. In fact, the event only seems to fire when I move the mouse slowly.

Now here's the catch. I bind the event _again_ so that the function is bound _twice_ to onmousemove, and performance is vastly improved!

How could it be that binding a function twice to an event speeds it up? Three times has no further effect... beyond that I haven't tested.

EDIT: Go to my profile to see the bug in action. While resizing a div (which contains 2 iframes), it's much much smoother with the "mousemove" event attached twice.

<comment><USER4> Hmm, I'm really not sure what the issue is, off-hand. It doesn't seem like you're hugely interested - but this is definitely what libraries are for (making annoyingly complex interactions like this possible). The jQuery UI Draggables are quite good (for example): <http://ui.jquery.com/demos/draggable/>

<comment><USER6> I use jQuery all the time, I purposefully left it out of this example to reduce the number of variables causing the IE performance quirk.

I've found that jQuery UI plugins are bloated and slow, to be honest. There focus is on providing a dead simple interface to the developer, who might not even know how to code. I believe this leads to bloating the code and degrading performance, since the code now has to check for and include tons of these little edge cases, which can even compound themselves when they're used at the same time. In the "draggable" demos, anything being dragged is quite laggy and choppy, at least in FF, when it definitely shouldn't be.

jQuery already makes it easy enough to build whatever functionality I want, including drag and drop... and since it's not generalized (as in the case of jUI) it's fast. For drag and drop, 50 lines was all it took to pretty much copy the entire functionality of jQuery draggables... assuming the developer can code a _tiny bit_ of functionality himself. Rather than cram all sorts of microfeatures, like "vertical-only" and "hortizontal-only", I abstract the problem out so that it puts more control in the developer's hands, but still is dead simple.

In my case, the developer defines the "init" function (triggered after it's dragged for a given length or time), the "move" function (which is passed deltaX and deltaY) and the "end" function, all of which are passed events as well. If he can't use this information to make something resize (which is just adding deltaX to originalWidth), for example, then that's too bad, he will have to use 42kb of jUI code to do it.

Another example of bloat and poor performance... if you wanted to create a Dialog, it requires Draggable, and Sortable, and comes to a total of 84kb (uncompressed). It's so laggy then when you're moving it around the shadow appears to be chasing the dialog... and resizing it lags half upwards of half a second. With jQuery, I've made draggable, resizable, shadowed dialogs in like 200 lines.

</comment></comment></comment><comment><USER3> Looks like this talk just missed Opera's announcement of their own new JS engine:

<http://my.opera.com/core/blog/2009/02/04/carakan>

<comment><USER4> Yep - but at the same time, it's not like I could've provided better data or more information - they have yet to release any code (and it's not even going to be in Opera 10 - so who knows if it'll even be out in 2009). I don't like working on speculation, I love having code in my hands, though :-)

</comment></comment><comment><USER7> I have been looking through javascript performance videos quite a lot recently, not entirely applicable to this video, but one problem I see is that firebug are great at profiling "userland" javascript, but there doesnt seem to be much information about how to measure the time spent in reflow and repaint, its basically guesswork of removing nodes from the dom / absolutely positioning thing etc.

</comment><comment><USER6> John has such an awesome job. I'd love to work with Javascript all day long... which is in fact what I do... except get paid for it and have a sweet title.

I love Javascript so much. The fact that it has "function.call(object, other, params)" pretty much sums it up... a function can work with any object, and vice versa.

<comment><USER8> _function.call(object, other, params)_

Can you explain what this does? It sounds interesting, but I don't know Javascript.

<comment><USER9> Basically,

      foo.barMethod("Hello", "World")

is identical to:

      someFunction.call(foo, "Hello", "World");

(assuming that foo.barMethod === someFunction)

This is a little weirder than it seems, because of a variable called `this'. You see, `this' is set inside of a function whenever you call it, based on how you've called it. It can be set a couple of ways:

      foo(arg1, arg2, ...); // sets `this' to the global object (in a browser, that's `window')
      foo.call(o, arg1, arg2, ...); // sets `this' to `o'
      foo.apply(o, [arg1, arg2, ...]); // sets `this' to `o' (same as `call')

None of these are the way you usually set `this' on function invocation, however. Usually, `this' is set automatically when you invoke a function which happens to be a property of an object. So, for example:

      bar = { foo: function (x,y) { var thatThing = this; ... } };
      bar.foo(1,2) - sets `this' (and `thatThing') to 'bar'.

However (!!!), if you say:

      foo2 = bar.foo;
      foo2();

The `this' inside of your function, as well as `thatThing', will both be set to `window'.

details here: [https://developer.mozilla.org/en/Core_JavaScript_1.5_Referen...](https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/call)

<comment><USER10> Is it really _window_? I thought it was just the value of _this_ in the caller of _foo2()_ — which might happen to be _window_ or something else.

<comment><USER11> _blows dust off JavaScript skills..._

'this' is always 'window', unless the function is invoked as a method, i.e., as a property of an object:

        window.bar = 'bar'
        var obj = {
            foo: function () { return this.bar },
            bar: 'foo'
        };

        obj.foo() === 'foo';         // invoked as a method

        foo = obj.foo;
        foo() === 'bar';             // invoked as a function

        // this reveals some oddness imho:
        (obj.foo)() === 'foo';       // invoked as a method
        (foo = obj.foo)() === 'bar'; // invoked as a function

Note that 'this' defaults to 'window' _not_ because 'foo()' is equivalent to 'window.foo()'; 'foo' could be a local variable referring to a function and 'this' would refer to 'window' all the same. There's no rationale for this that I know of, it's just the way it works (in ES3 at least: ES4 does what you expected).

When you use the Function::call and Function::apply methods, you get to specify what 'this' should refer to:

        obj.foo.call(window) === 'bar';
        foo.apply(obj, [])   === 'foo';

'call' and 'apply' are the same, except that apply takes an array of function arguments, whereas call takes arguments directly.

Note that the terms 'method' and 'function' are my own here, I'm not sure what to call the two forms of invocation.

<comment><USER12> >> "'this' is always 'window', unless the function is invoked as a method, i.e., as a property of an object:"

More generally, 'this' is usually 'the global object'... would be more correct. And in a browser context, the global object is 'window'.

</comment></comment></comment></comment></comment></comment><comment><USER13> The x-domain stuff is very cool and will be extremely useful. I'm scared what black hats will do with it, though.</comment>


How 17 Famous Website Looked In The Past: In The '90s. - <AUTHOR> http://immaturebusiness.com/2011/06/how-17-famous-website-looked-in-the-past-in-the-90s-youll-be-amazed/

<comment><USER2> I am all about pointing out a small typo or mistake to the author--privately even.

But I couldn't find so much as a byline to figure who to write to about the fact that they showed Flixster's early screenshot twice.

Even <http://immaturebusiness.com/aboutus> 404's.

</comment><comment><USER3> No desire to revisit the era of Flash site intros.

</comment><comment><USER4> lol, reddit looks almost the same</comment>


Obsoleting SpaServices and NodeServices (AspNetCore) - <AUTHOR> https://github.com/aspnet/AspNetCore/issues/12890 <comment><AUTHOR> Really surprised by MS. One of the bigger benefits of chosing the MS ecosystem was their sensibility when it comes to decisions like this (and long term support - in one way or another). I can understand the decision to scrap a lot of the pieces here, but especially scrapping NodeServices is a huge surprise - it's so useful (e.g. best PDF-rendering way in AspNetCore AFAIK) and facilitates all the other use cases. Perhaps the strangest decisions of them all is to continue supporting the React CLI and Angular CLI ways (without SSR). Drop that and spend that effort on maintaining NodeServices so that the foundation has good/trusted (previusly trusted) MS support - and then the community can create the different pieces on top of it (which will also make it clear which pieces are the valuable ones). In particular, I believe a generic webpack-plugin and a generic SSR (prerender) + some online tutorials/guides for how to do it with the most popular frameworks (React, Angular, Vue) would solve something like 98% of all scenarios.

I also have to say I'm surprised by their comments. Basically they're just saying: It's open source, the community should take over. To ask the community to take on a project as significant and important as this is a huge ask. To even have to consider the likelihood of it not turning up/being managed with continuous high quality (thus continuously updated and actively steered) doesn't feel good at all.

It feels like the big selling point of web devs moving to AspNetCore - a MS that really supports modern web development - is now lost (at least the trust part of it). Is it to push people towards their Blazor future? If so, that's ignorant of the status of things and how client side Blazor fundamentally has some issues (passing along a significant runtime to get started). Was it just a trick to get people to move to AspNetCore along the lines of the famous Extend-Embrace-Extinguish strategy? I thought MS got rid of that.

I used to be a big proponent of the new MS and MS as a stable ecosystem partner. Now, I lost a lot of faith in them over there.</comment>


I wrote BozoCrack to show why plain MD5 is a horrible way to hash passwords. - <AUTHOR> https://github.com/juuso/BozoCrack <comment><USER2> I don't think it's demonstrating anything other than:

       1) many developers don't use salts / HMAC
       2) MD5 is popular
       3) hashed passwords end up on Google

From these 3 points I don't think it follows that MD5 is horrible.

Any hashing function would have the same issues, simply because a hashing function is a mathematical function, so for any X from the domain of definition, H(X) will always have the same value, on every call. Therefore, if a hashing method is popular enough and developers don't salt their hashes, then hashes for common passwords will inevitably end up on Google. However, if you salt your hash calls with your own key, the hashes produced will be different from everybody else's.

<comment><AUTHOR> Perhaps I should have written it as "unsalted MD5" instead of "plain MD5" to avoid confusion. Unsalted MD5, in my opinion, is horrible. MD5 plays it's part in the mess: it's quick to calculate, which means that anybody can churn out huge lookup databases. Missing salts make those databases universally usable.

<comment><USER3> > huge lookup databases

"Huge" being the key word here.

Try searching for the md5sums of arbitrary 8-character alphanumeric passwords. You won't find many results. 62^8 is a big number.

<comment><USER4> I believe that with GPUs it's now faster to calculate possible MD5s on-the-fly than use rainbow tables.

Hence the current advice is to use "alongpassphraseasyourpassword" rather than "L33$Pa55wd"

<comment><USER5> This is where password management gets ridiculous, because you'll find a lot of registration forms limit the length of your password input to, say, 12 or 16 characters.

Why? Is it not being hashed? I have a (possibly very wrong) inkling that a longer phrase might increase the chance of collision but even so, so many places enforce a strong password but force you to keep it short.

<comment><USER4> The worst offender is NVidia. They have half-a-dozen different developer logins for different bits of their site - and they all have different rules = your CUDA one must have a symbol but the parralel Nsight one must not etc

</comment></comment></comment></comment></comment></comment><comment><USER6> Obligatory <http://codahale.com/how-to-safely-store-a-password/> link which taught me a ton.

<comment><USER7> I see that link referenced a lot and don't think that's a good thing. He's right, but he doesn't explain why we should use bcrypt (or any other adaptive password hashing function). Picking bcrypt without knowing why is just as bad as picking MD5 without knowing why.

<comment><USER8> No, it's really not, as long as you follow current guidance on counts for iteration. There are people smarter than <x> random person and sometimes (often with crypto) it's better to follow their advice. Anyone can make a system that they themselves cannot break. Don't be that person.

<comment><USER7> I strongly disagree. If you are the person tasked with implementing password verification, then you really should learn enough about the field to give a rough explanation of why you've used bcrypt (or whatever you use). If you know what MD5 (and other simple hashes)'s deficiency is (and Hale explains it), then you should know how bcrypt, etc. solve that problem. One should follow expert advice but not blindly.

</comment></comment></comment></comment><comment><AUTHOR> For those who don't want to read the source code, BozoCrack has a simple algorithm. It googles the MD5 hash and hopes the first result page contains the plaintext password. It usually does.

<comment><USER9> "It usually does" isn't quite accurate here. Common or weak plaintexts might work, but for the vast majority of input you're SOL. Sure "nicetry" comes back, but "nicetry99" produces 0 results and for every "nicetry" there are an infinite number of "nicetry"+i hashes.

<comment><USER10> Ah, you are technically incorrect in saying there are an infinite number of "nicetry"+i hashes. There are an infinite number of "nicetry"+i passwords, but eventually there will be collisions as the hash set stays a constant size and the password set grows without bound. "Infinite" isn't a term to throw around too lightly.

<comment><USER11> There are 2^128 possible MD5 hashes. When it becomes impossible to increment a counter to a number, that's as good as infinite.

<comment><USER12> The point is that it's unnecessary to find _the_ plaintext; all you need is _some_ plaintext that produces the same hash value. It doesn't matter if your actual password is "zipobibrok5x10^8" when "fordprefect" also gets you into the system. (That, of course, only applies to a single system -- or to a cluster of systems all using something like an unsalted MD5. It _would_ matter if you're trying to leverage a password found on a cat fanciers' site to empty someone's bank account.)

<comment><USER13> I actually think you're missing the point here. While it is true that an infinite number of strings correspond with each md5 hash, the question was about trying to _actually find_ a match. With a suitably large hash, say 256 bits, it becomes physically impossible to even _count_ that high, let alone compute that many test hashes. A problem that is too large to evaluate is effectively infinite.

(Yes, md5 is 128 bits and might be possible if an entire country dedicated itself to the effort. Or an attack on its flaws could be used. But both these points are tangential to themouth's use of infinite.)

<comment><USER12> With the technique under discussion (using Google to search for the MD5 hash), it doesn't really matter what the computational cost of finding a plaintext for the every possible hash value is -- you're not brute forcing a collision, you're doing a search using someone else's enormous resources. That's always going to be O(1) from your point of view (with a lot of overhead, of course).

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> Tried it with a bunch of passwords that I know my friends use (yes, they treat me like tech support) and it failed miserably with all of them.

It did however get a password that I use regularly (though not anymore) which I though was pretty complex.

So, friends with "idiot" passwords 1. Their so called computer-expert mate (me) 0.

I'm not so smug anymore.

<comment><USER15> I've used Google before at work.

We inherited a system, without inheriting the administrator passwords, that we had to work on. It was a spaghetti mess, so creating a new account didn't seem obvious, and I wasn't sure how the passwords were hashed, but they did seem md5-like to me, so I googled one.

Turns out, 90% of them, including most of the admin passwords, were just four numeric characters, like 9678.

</comment></comment><comment><USER16> Whenever one of these posts comes up it seems like there's a lot of comments rushing to defend salted MD5 or SHA1.

What's actually wrong with bcrypt that prevents people from using it? Is it not available on all platforms? Too computationally expensive?

<comment><USER17> Integrate your email systems with Google mail or MS mail. You'll quickly find that they do not accept bcrypt. Plain md5 or plain sha1 is all they support (at least that was the case two years ago). When you are forced to inter- operate with the big guys, you'll find not many actual use bcrypt.

<comment><USER16> If you need to authenticate from another party's hashes, why not run bcrypt on those?

</comment></comment></comment><comment><USER18> I dub this "shameware" and declare it awesome.

</comment><comment><USER19>
        wordlist = response.split(/\s+/)

Thank God I use spaces liberally in my passwords.

<comment><USER20> Unfortunately, the same sites that are naive enough to use MD5 for cryptographic hashing are also likely the same sites naive enough to use oversimplified regexes that fail to validate all possible inputs.

(If I had a dollar for every time the 'email@example.com' failed to validate....)

</comment></comment><comment><USER21> Seriously? Who is still using md5? There are strong hashing libraries for like every language. Anyone reading this uses md5?

Can we find these people and just let them know?

<comment><USER22> > Anyone reading this uses md5?

I use MD5 all the time, just not for security.

<comment><USER23> Ultimately, data integrity is the same thing as data security. If you cannot trust your data not be detectably corrupt in the face of a malicious collision attack, you do not have data integrity. Collided data can be used to cause a DoS, to overrun buffers, any number of nasty things that arbitrary user data can cause when trusted implicitly.

<comment><USER22> You are making assumptions that are unwarranted. There are other uses for MD5 besides data integrity and data security. For instance, I generate an MD5 hash of a user's email address and use that hash for Gravatar. While someone who knows quite a bit about MD5 and the other person's email address, can force a collision ... all that would get him would be the other person's avatar image ... which is public anyway. In other words, using MD5 is perfectly fine in situations where collisions don't pose a serious problem.

</comment></comment></comment></comment><comment><USER24> A simple salt would fix the issue with it finding on google (unless your salt is incredibly common).

<comment><AUTHOR> Yep. I find it fascinating why plain unsalted md5 hashes are as common as they are. Developers go through the trouble of hashing, but don't go the single necessary step further.

<comment><USER25> Salted md5 is still surely laughably weak in an age of GPU cracking?

<comment><AUTHOR> Sure. I guess there's not a whole lot of excuses to avoid bcrypt these days.

Bozo's idea was to show that unsalted MD5 is, for most passwords, as bad as no encryption at all. An attack doesn't get much easier than a lookup table.

</comment></comment></comment></comment><comment><USER26> To the other posts saying how MD5 is not bad and/or it's stupid to use MD5 without salt (or whatever):

See this script more as a fun little hack rather than a "Formal proof". Thanks aparadja for sharing. That being said, using MD5 without salt is asking for trouble. I mean, I know security is usually just a time vs $ vs quality problem, but it costs almost nothing more to add a salt in front of the password. Why not do it?

<comment><USER27> Using MD5 _with_ a salt is asking for trouble.

Using SHA256 _with_ a salt is asking for trouble.

Use bcrypt, scrypt, or PBKDF2. Do not DIY your password hash.

<comment><USER28> A question on the practicality of expensive compute time for password hashes:

If somebody got read-level access to your password hashes, it follows (based purely on the assumption that any app with the rights to read the hash will probably have the right to change it when applicable) that one could simply overwrite the password hash with a new one that is already known, gain unauthorized access, and change the hash back to prevent the user from finding out. Unless you really need that password to crack multiple accounts that might be reusing it, it seems unnecessary. (And honestly I wouldn't care to implement these special password hashes just to protect extraneous accounts of my customers which I don't control)

 _edit_ I should clarify that while I agree that expensive compute time for password hashes helps prevent the ultimate compromise of a user's password, I find it a much more worrisome prospect that somebody got access to the database in the first place. To me, a person's password strength is almost irrelevant compared to the importance of preventing brute-force attacks on a login API or ensuring the integrity of the password database and db apps.

That being said, for those wishing to implement a bcrypt-type hash:

      perl -le'print crypt("something", "\$2a\$random")'

should give you blowfish-encrypted password hashes on systems with it patched into glibc. ("6" instead of "2a" for SHA-512)

<comment><USER23> security is about defense in depth, and doing as much as is feasible to mitigate damage. Proper password hashing wont protect you from a break in on a primary system, but it could very easily prevent a break in on secondary ones.

Also, a note to anyone reading the above post, that _is not how bcrypt works_ and is incredibly insecure.

<comment><USER28> What is not how bcrypt works? The example that I gave? That comes from the 'crypt' man page explaining how to use blowfish encryption patched into libcrypt?

</comment></comment></comment></comment></comment><comment><USER29> Great. I think `bcrypt` is another way of hashing passwords. Read this: How to safely store a password <http://codahale.com/how-to-safely-store-a-password/>

</comment><comment><USER30> Note to self: poison search results for md5 hashes of my passwords.

<comment><USER31> Because that way, anyone sniffing or monitoring your traffic doesn't even need to crack the systems to steal the hash, and so you'll be saving everyone some time?

Edit: I'm trying to illustrate the general principle, that you shouldn't take any action thats visible outside your secure perimeter, that depends on knowledge of your password.

What you define as 'outside the perimeter' depends. In the case of your corporate systems, its probably everything outside the corporate network. In the case of your gmail password, its everything outside of [your computer, the SSL connection to google's auth servers, and those servers].

You shouldn't ever leak any information outside that perimeter, that reveals knowledge of your password.

Its generally pretty hard to steal the password hash; if you start revealing what your password hash is to someone doing passive analysis, you compromise a lot.

If its worth thinking about poisoning hashes to protect, then don't try and poison the hashes!

<comment><USER32> If someone is sniffing his traffic he has much bigger things to worry about...

</comment></comment></comment><comment><USER33> I don't understand. This is pretty much the definition of a dictionary attack. The dictionary is just stored and accessed through Google rather than packaged with the program.

</comment><comment><USER34> #1 rule - don't use unsalted md5. I think md5(md5($pass) + $seperator + $pass) works great.

</comment><comment><USER35> You need an app for this?

<comment><USER36> An app proves automated cracking is possible. Doing it manually is often unfeasible, therefore many don't worry about such security issues.

</comment></comment><comment><USER37> There's a bunch of MD5 search engines with rainbow tables etc. plugged in, it could tap into that easily as well.

<comment><USER38> I think this is exactly why this method is so effective. Google's index all of those sites.

The first result when I searched the hash for superman (84d961568a65073a3bcf0eb216b2a576) was a link to a page titled literally "Google Hash: md5(superman) = 84d961568a65073a3bcf0eb216b2a576", the page is hosted at(<http://www.nth-dimension.org.uk/utils/ghash.php>), basically someone's gone through the trouble of making a rainbow table that's easily crawlable that makes this method of lookup via Google even easier.

The page has a description:

      > Google Hash is a PoC implementation of an hash search engine using Google.
      > Unlike other implementations, the aim here is to get Google to store the
      > word and associated hash. We do this by putting them into the title where it
      > will always be stored by Google's spider....

The next top hit is md5rainbow.com etc. etc. I would guess that most of the positive results from BozoCrack.rb are thanks these sites.

</comment></comment><comment><USER39> The exact same thing could occur if another (unsalted) hash becomes as popular?

<comment><USER40> Yes, as long as it's designed for speed, it's not a good fit for storing passwords. That's why people should use bcrypt or an equivalent. It has both built-in support for salting & a work factor.

(Source: <http://codahale.com/how-to-safely-store-a-password/>)</comment></comment>


Kill Your Airbnb's Hidden WiFi Cameras with This Script - <AUTHOR> http://motherboard.vice.com/read/kill-your-airbnbs-hidden-wifi-cameras-with-this-script <comment><USER2> Link to the script: [https://julianoliver.com/output/log_2015-12-18_14-39](https://julianoliver.com/output/log_2015-12-18_14-39)</comment>


Apple's research secrecy hurts industry and academic research - <AUTHOR> http://www.networkworld.com/article/3083278/ios/why-apple-s-photos-announcement-should-offend-you.html <comment><USER2> I am offended by this kind of headlines.

In the field of software, Apple uses open source and provides a lot of open source of their doing to the community. So, if there is an imbalance in the field of science, it should be discussed for sure. But if I am offended by Apple's Photos, it is for other reasons.

Edit: my comment refers to the top headline of the article, also used in the link from Hacker News when I wrote it "Why Apple's Photos announcement should offend you"

<comment><USER3> It'd be nice if HackerNews put a star or something by headlines that have changed. I was really confused about what you were saying until I read your edit.

<comment><USER4> And doubly so for when they change the underlying link!

It is frustrating to make a comment then get a response, "ugh, didn't you even _read_ the article?" Uh, yes, I did, but it was a different article!

</comment></comment></comment><comment><USER5> Firstly, the research is paid for and is public domain - that's the whole point - so that people can use it without paying.

Secondly, the author betrays himself by dismissing Apple's open source efforts. Their contribution to WebKit is the only reason there is competition in the browser space, and saying Swift and LLVM are 'proprietary' and dismissing their impact is either ignorant or dishonest. As far as I can see LLVM is the backbone of a huge amount of academic programming language research.

Thirdly, Apple's photos 'AI' seems like a pretty modest application. Hardly groundbreaking stuff that they are keeping 'secret'. If they owe taxes for this, then all corporations owe taxes for ideas they've incorporated.

<comment><USER6> > Their contribution to WebKit is the only reason there is competition in the > browser space

There have been competing closed-source browsers, plus Mozilla, that weren't dependent on WebKit. Without Apple's open-source work on WebKit, maybe Google wouldn't have done Chrome (or maybe Google would have forked Firefox as its starting point, instead), but there'd still be browser competition.

</comment></comment><comment><USER7> Apple does things that are good for themselves and their users. The scope is narrow, they are not biased by existing ways of thinking and most of the time they deliver. Thats a very lean mindset. They are doing something right. I cant complain that they are not doing enough of something.

</comment><comment><USER8> "Why Apple's Photos announcement should offend you"

What a click-baity article.

</comment><comment><USER9> Consider the fact that Google open-sourced pioneering RAPPOR when it started using it for collecting information about malicious websites visited by the users on Chrome. Apple on the other hand is collecting far more invasive data about keystrokes while hiding the details of implementation. Why should we trust whoever apple trots out at its keynote? How is this different from people who trusted Theranos since its board was filled with former secretary of state and such.

Apples approach towards research and privacy is designed to make press headlines and fool reporters similar to Theranos. Its time to hold Apple to standards of Peer Review as practiced by Google, Facebook and others.

[https://research.googleblog.com/2014/10/learning- statistics-...](https://research.googleblog.com/2014/10/learning-statistics- with-privacy-aided.html?m=1)

<comment><USER10> _Apple on the other hand is collecting far more invasive data about keystrokes_

Wait what?! Do you have any evidence of this or you just pulling this out of your butt?

<comment><USER9> "Improving quicktype predictions" => "sending keystrokes with randomized response"

[https://www.engadget.com/2016/06/14/apple-differential- priva...](https://www.engadget.com/2016/06/14/apple-differential-privacy/)

<comment><USER11> So you're citing crap bloggers that don't have a clue about what they are talking about, and don't present any evidence for what they write?

Good!

<comment><USER9> Just look at official Apple keynote video at 1 Hour 40 Minute mark. They clearly show Differential Privacy next to contextual typing suggestions.</comment></comment></comment></comment></comment>


AlphaSmart - <AUTHOR> https://en.wikipedia.org/wiki/AlphaSmart <comment><USER2> Hello all, this is Ketan Kothari (one of the co-founders of AlphaSmart). First I am honored to see such fans to a product that is over 25 years old. But every now and then I think, it would be awesome to create a modern version of AlphaSmart.

<comment><USER3> Hey Ketan! I am one of the creators of Freewrite which many consider to be a modern incarnation of the venerable AlphaSmart. We took a different approach but my cofounder and I have all the respect in the world for what you all did with the AlphaSmart. Many people in the writing community still covet their AlphaSmart which is no small feat for an electronic decades old! All the best to you and if you ever want to try out a Freewrite, let me know.

<comment><USER4> No disrespect but the half grand price tag makes your creation very far from being a spiritual successor to the AlphaSmart.

<comment><USER3> It's definitely not the spiritual successor since the Freewrite is built differently and for a different market. Even so, the Alphasmart was about $250ish when new.

</comment></comment></comment></comment><comment><USER5> Does anyone know of a similar tool but for programming/connecting to a remote terminal? Electronic ink display with week or even month long battery life? CPU doesn't need to be super fast, just enough to do some fun coding would be sufficient :]

<comment><USER6> I would LOVE something like that.

</comment></comment><comment><USER7> I have a Neo 2 that I use for writing, as I find laptops/tablets are way too easy to get distracted with. It's light, rugged - as you'd expect for something designed to be used by schoolkids - and lasts a ridiculously long time on 3 AAA batteries. I just did an entire Nanowrimo on it, on a not-fresh set of batteries, and it's still going strong now.

There've been attempts in recent years to create something similar but more modern - with an E Ink display and cloud sync - but they cost a fortune compared to the pittance I paid for my Neo second-hand.

<comment><USER8> Yeah, every time I see one of the modern ones with syncing and mechanical keyboards and whatnot I'm super interested, then I see the price tag and forget about it. I think I'll just go with a Dana or Neo or Neo 2. (Still not sure if there's any reason to go for the Neo 2 over the Neo.)

<comment><USER7> I think the Neo 2 has a bit more storage capacity than the Neo. The main thing for me was that, as it's a more recent model, I figured it might have a longer life, especially considering things like the internal backup battery (which is replaceable, but involves opening everything up).

<comment><USER9> I believe they are the same apart from some extra academic programs and the look.

</comment></comment></comment></comment><comment><USER10> I bought one of these on eBay about a year ago. I use it for writing down ideas and notes when I'm off the grid and battery power is at a premium (I live in an RV and travel a lot). I thought I'd also use it for distraction- free writing even when power is not at a premium, but the display is too small and dark and interaction with the keyboard is a little too limited for that.

I would love for there to be a modern variant of this, however. I tried figuring out how much it would cost to produce and the screen is definitely a big limiting factor. Ideally, one would use an e-ink or similar display, so you get very high resolution and readability but also very good battery life. While computing and storage have gotten massively better and cheaper since this thing was new, displays that use nearly no power are still pretty pricey.

I used to have a netbook with an SSD and a tiny Linux OS installation that I used for similar things, but the battery stopped holding charge and replacing it seemed too expensive. And, it never had battery life comparable to the AlphaSmart, which seems to run forever (literally, like weeks or months) on three AA batteries.

</comment><comment> david-cako There's an author I remember reading about that religiously uses one of these to write at cafes and whatnot. I can't remember who.

</comment><comment><USER11> We had a few sets of these in my high school in the late 90s. English instructors would hand them out for essay writing, and you could plug them into the PS/2 or ADB ports on the full size computers in the lab to dump your early drafts into a full-time featured word processor for markup and formatting. Probably cut down on the number of computers they needed per student as most didn't yet know how to touch-type yet. Anyone who had fine motor function difficulties was given one for daily writing tasks as well.

</comment><comment><USER12> I had an Amstrad NC100 Notepad, a similar beast but dating from 1992: [https://en.m.wikipedia.org/wiki/Amstrad_NC100](https://en.m.wikipedia.org/wiki/Amstrad_NC100)

In turn this was a near clone of the 1988 Cambridge Computer (Clive Sinclair) Z88: [https://en.m.wikipedia.org/wiki/Cambridge_Z88](https://en.m.wikipedia.org/wiki/Cambridge_Z88)

An ultraportable word-processor, much like the AlphaSmart. The hassle in copying documents across from the NC100 (via a shonky RS232-to-AppleTalk cable) is what killed it for me. But a lovely piece of kit nonetheless.

Today, for a portable, affordable writing machine, I use an HP 11in Chromebook running GalliumOS and FocusWriter - as light as a MacBook but costs just £200.

</comment><comment><USER13> I went to a school which had a department helping visually impaired kids. I couldn't see enough to use one but partially sighted students would bring one to every lesson before we moved onto laptops. Presumably it was the AlphaSmart 2000, as I do remember them having a PS/2 port.

</comment><comment><USER14> Ah! I have one of these in my basement!

(The kind of "battle scar" you have from being involved with educational software long enough.)

Palm, for me, illustrated the possibilities of mobile computing the first and best for the time. In the educational space, the alphasmart was an incredible promise.

Through the educational software company I worked for at the time I did some work on software for the Alphasmart, Newton, and emate. Unfortunately, this stuff didn't really take off, though in hindsight it was clearly just a matter of an idea being ahead of itself.

BTW, there are still some things modern devices can learn from the alphasmart. E.g., it's not indestructible but generally you can drop/throw one around pretty casually without breaking it. likewise, the OS and user environment wasn't "delicate".

</comment><comment><USER15> This reminds me of the Apple eMate I used at [high] school. A large screen Apple Newton in an indestructable polycarbonate clamshell with a nearly-full- size keyboard. It was perfect. A great word processor (also drawing, spreadsheet), designed for instant on and concentrating on one thing at once, with enough Apple tech (not sure how much was borrowed from the Mac OS stack) to get online and to print full b/w graphics to Mac compatible printers.

Steve jobs killed Newton.

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

</comment><comment><USER16> I just bought one, used, on eBay last month. I'm pleased with it, although the keyboard action is very stiff -- and I speak as an IBM Model M fan.

As a modern version, some kind of enclosure for a Raspberry Pi would seem the obvious answer. Then all it needs is a text-only Linux distro -- easy enough -- and a decent editor with a modern standard UI, such as TextGrinder or Tilde.

ErgoEmacs with a facelift and modernisation might do, but not without it. Ditto Vi. Seen the joke?

"I've been using Vi for a couple of years now. Mostly because I can't work out how to exit."

</comment><comment><USER17> These devices were used a fair bit when I was in secondary school here in the UK during the mid-to-late '00s. They were primarily available for pupils with special needs, however they were also used by those who had injured their arms and found it difficult to write.

I hadn't realised they had since been discontinued, though I suspect the increasing affordability of laptops may have played a part.

<comment><USER18> Yup: I used to use one of the older models for drafting rough text on the train on the way to various College annexes. Light, lasted months on a set of batteries, and mimicked a USB keyboard - cost me twenty quid off ebay. I left mine in a drawer when I left sometime in 2007. We had class sets of the newer Neo version shown here for SLDD students.

I'm imagining tablets with onscreen keyboards and cheaper laptops have seen them off.

</comment></comment><comment><USER19> We had those at my elementary school. I think they liked that you could only use them to write, not to play games.

<comment><USER20> I might be inventing this but I swear they came with a hangman game.

<comment><USER21> I have a memory of that as well. But I guess, depending on how old the kids are, playing hangman might be a quite useful game to play. To increase vocabulary etc.

</comment></comment></comment><comment><USER22> I remember using something similar called the Fusion back in elementary school. It had a built-in typing "instructor" and we were supposed to use it to learn touch typing.

</comment><comment><USER23> We still use these now in the UK secondary school where I teach. Generally they are given to students who have a short term inability to write (broken arm etc).

</comment><comment><USER24> I was taught to type on them in 7th/8th grade. 2009/2010ish. At a parochial school.

</comment><comment><USER25> I think I had one of these for a while at school in Canada! Much nostalgia.

</comment><comment><USER26> Not to turn HN into ebay, but if anyone wants to buy my Freewrite (modern version of AlphaSmart, as the developers point out below), hit me up: iqdupont.com

</comment><comment><USER27> Neo released "August 2004" \- from that to iPhone in 4 years ...

<comment><USER28> Three, even. And only two and a half to the announcement! Consumer tech seemed to move blisteringly fast then. That being said, I feel like the AlphaSmart Neo would've looked somewhat out of date even when it was released. But I love these cool old pieces of tech, and I'd love to see LGR or Ashens or similar review it.

<comment><USER29> >Consumer tech seemed to move blisteringly fast then.

If I recall correctly one of the "major" features of Windows Vista that Microsoft was advertising back in 2006 was a little screen OEMs might add to their laptop that would let you see the time, check your mail and I think check your appointments without having to fully open your laptop up. Was supposed to be a convenience and battery saving feature.

I don't think it was a particularly hyped feature, but it is one of those little things that shows where Microsoft was at in 2006. Of course back then there was a decent chance that any organization interested in that feature probably already had standard issue Blackberries, Treo 650s and whatever WinCE device and operating system name was in vogue at the time so there probably was never too much point to it.

Then Steve Jobs gets on stage in January 2007 and announces the iPhone, and in 2008 or 2009, native ActiveSync support in iPhone OS (remember when it was called that?).

Apologies for my off-topic ramble, but when I saw your comment, it occurred to me that yes indeed, tech did seem to move blistering fast back then. Really nobody knew or was completely sure what direction we were heading and all sorts of interesting approaches were attempted in a short span of time. Looking at pictures of the AlphaSmart Neo though, it looks pretty standard for tech at the time. Not that many tech companies had really figured out how to make hardware even remotely stylish yet.

</comment></comment></comment><comment><USER30> What is the relevance of this post? Just a link to a Wikipedia article with no description?

<comment><USER31> I'm going to assume that it had a worthwhile title that provided context, and the HN moderators reverted the actual useful part of the post to comply with the silly "original titles only" rule.

<comment><AUTHOR> OP here. Your assumption is wrong, I posted it exactly like this.

<comment><USER31> oh. why?</comment></comment></comment></comment>


Ask YN: Any chance to get a work permit in the US and work for a web startup? - <AUTHOR>

I'm a 28y old sw-developer and native German citizen. After 10 years in the German IT biz I've one big dream left:
To join an innovative start-up in the US like e.g. squareup.com
Unfortunately I've no university degree because I quit junior high school when I was 17 to join a startup (1999) and later moved on as an employee at Amazon.de where I was involved in the european Marketplace (and Payments) launch. Since 2005 I'm a freelancer/contractor building mid/large scale web-applications for companies like Yahoo.de (FIFA Worldcup 2006 offical Website core-team), Allianz SE (insurance) and two leading publishing companies in Germany using Ruby, (Rails, Sinatra, ...), Perl and PHP.
I've neither an university degree nor "exeptional skills" (like in terms of getting an US work permit): Is my dream really impossible? I'm really depressed with the work here which is kind of 18th century (crap technolgy pared with managers that have no clue of webapps/social media things) — and copycats.
Ideas? Thanks. <comment><USER2> You probably mean "extraordinary abilities". [http://www.messersmithlaw.com/green- card/eb1-extraordinary-a...](http://www.messersmithlaw.com/green- card/eb1-extraordinary-ability.html) It does look like you have to be a world class athlete, artist or scientist to use this visa.

Good luck with this! It shouldn't be this hard for motivated people like you to be able to work in the US.

<comment><USER3> "In order to qualify for the EB1-EA, the applicant must have won a Nobel Prize [...]"

I remember when, during my years in the US, I looked up my options to apply for some merit-based residence permit. When I found this I literally laughed out loud. I thought, "OK guys, if I were a Nobel Prize laureate _you_ would be looking me up, not the other way around."

</comment></comment><comment><USER4> Does Amazon.de or Yahoo.de allow international transfers of their employees? I would be surprised if they didn't - I used to work in the financial industry (GS), where international employee transfers (US, Tokyo, London) were the norm.

<comment><AUTHOR> At Amazon this was not an option. They closed the branch in 2004.

At Yahoo i was only a contractor and, to be honest, I was glad not to be an employee there... they closed development in early 2009.

I must really confess, that I don't want to work in old-economy blown enterprises ever again. Also the european dev-branches of US IT companies are usually doing localization only, nothing really innovative or game changing.

This might not be the case at Google but I surely do not qualify to work at Google anyway.

</comment></comment><comment><USER5> Why the US in specific ? - why not find an innovative startup in Europe to join ?

<comment><AUTHOR> There are so few innovative web-startups in Europe. Most business are copycats:

At the moment we have round about 10 clones of groupon.com in Germany. They usually hire cheap offshore php guys to clone it 1:1. Cloning does neither need skilled on-site developers and architects nor better technolgy and processes (think of agile/bdd, ruby, python, younameit instead of php4-ish php).

Also in Germany bootstrapping is not really accepted in the public opinion. Neither is entrepreneurship. Nearly everyone thinks you do this because you're not qualified or hard enough working to get a 'real' job. This tends to change however small business are still avoided. This is one reason SaaS does not work here yet: most US SaaS apps are focussing small businesses or freelancers and don't care about the enterprise (right way imho).

On the other side everybody wants web-related things as cheap as possible. Usually it's okay to redo it in a couple of years. There's no visible premium segment except some banking corps or offical corps but they're still doing either cobol or JEE with the most available amount of abstraction and bloat (sorry, been there, done that).

<comment><USER5> There are plenty of innovative startups in Europe especially in the mobile space.

Try having a look at techcrunch's european job board.

Where are you in Germany ? - from what I've seen bootstrapping is considered far more acceptable in Berlin than other parts of Germany.</comment></comment></comment>


Top organizations in CS research - <AUTHOR> http://academic.research.microsoft.com/CSDirectory/org_category_24.htm

<comment><USER2> > # For example, Paper A is written by Author B and Author C, when this paper > was published in year 2000, Author B is affiliated with Organization 1, and > Author B was affiliated with Organization 2, provided such information was > presented in the paper full text or meta data. Now Author A is affiliated > with Organization 3, and Author B is with Organization 4. Our algorithm > constructs the following relationship:

> # Paper A is related to Organization 1, 2, 3, and 4.

> # Therefore, all citations to Paper A will be contributed to all 4 > organizations.

This seems rather ridiculous to me. So if I have 100 publications with at least 5 citations each at some unknown school, then I go to Stanford, all of a sudden Stanford gets 500 extra citations?

Also, I saw no mention about citation filtering. It's not uncommon for small communities to (intentionally or unintentionally) game these kinds of systems by publishing lots of low-quality papers and citing each other a lot. In fact, I didn't even see any mention about filtering out self-citations, which is absolutely necessary.

<comment><USER3> it's easy to remove self-citation, but it's hard (and unfair) to detect and remove citations in the case you mentioned "a small community ... publishing lots of low-quality papers and citing each other a lot. "

</comment></comment><comment><USER4> It seems like among the top 4, Berkeley has the highest citation/publication ratio, which indicates they publish less (due to size or just pub frequency), but with more meaningful stuff on average. I wonder if this is related to the laid-back culture of Berkeley that students don't have pressure to "publish".

Disclaimer: I am becoming a graduate student at Berkeley soon.

</comment><comment><USER5> This would be far more indicative if it were scaled to organizational size. Some of the top places are great places, but they're also huge places.

<comment><USER6> Or at least if they included a column with # citations / publication.

<comment><USER7> I'll post this on my blog soon.

Here is a list sorted by the ratio, with a cutoff of at least 1000 publications. 4 universities lead by a wide margin: 1. Berkeley 2. Stanford 3. Princeton 4. MIT

       1          Wellcome Trust Sanger Institute       1239      45181   36.4
       2                              Google Inc.       2126      60583   28.4
       3                Palo Alto Research Center       1560      42443   27.2
       4                       AT&T Labs Research       5699     131287   23.0
       5     Bell Labs (Lucent Technologies Inc.)       4656      95602   20.5
       6        University of California Berkeley      25809     529791   20.5
       7            Weizmann Institute of Science       4116      84446   20.5
       8                      Yahoo Research Labs       2235      45322   20.2
       9                      Stanford University      30528     599120   19.6
      10                     Princeton University       8393     163755   19.5
      11    Massachusetts Institute of Technology      30211     578190   19.1
      12              Argonne National Laboratory       2723      51228   18.8
      13                                Microsoft      20303     379561   18.6
      14            National Institutes of Health       8817     161731   18.3
      15                        SRI International       3193      58445   18.3
      16                         BBN Technologies       1633      27262   16.6
      17                         Brown University       5075      83557   16.4
      18                       Harvard University      16931     277193   16.3
      19                       Cornell University      11989     195178   16.2
      20                     University of Oregon       2057      32635   15.8
      21                          Rice University       5238      82713   15.7
      22                 University of Washington      14667     228336   15.5
      23                        Intel Corporation       4036      62412   15.4
      24               Carnegie Mellon University      31227     481334   15.4
      25                          Yale University       7140     109336   15.3
      26                                      IBM      23142     352198   15.2
      27       California Institute of Technology       7969     121192   15.2
      28    Lawrence Berkeley National Laboratory       3646      55239   15.1
      29                     Hewlett Packard Labs       5180      76499   14.7
      30      University of California Santa Cruz       4309      62968   14.6
      31                      New York University       7844     114416   14.5
      32           Hebrew University of Jerusalem       4777      69261   14.4
      33 Mitsubishi Electric Research Laboratorie       1911      27387   14.3
      34             Columbia University New York      11380     157882   13.8
      35                 University of California       2275      31547   13.8
      36     University of California Los Angeles      16214     223380   13.7
      37          University of Wisconsin Madison      11919     164035   13.7
      38       Oregon Health & Science University       2035      27992   13.7
      39                    University of Chicago       5299      72038   13.5
      40                      Brandeis University       1524      20597   13.5
      41                                      NEC       1219      16446   13.4
      42               University of Pennsylvania      11177     150223   13.4
      43        Washington University Saint Louis       6646      88489   13.3
      44      University of Massachusetts-Amherst       6436      85339   13.2
      45       University of California San Diego      15449     204661   13.2
      46                  University of Rochester       3876      50691   13.0
      47                  University of Cambridge      13978     181921   13.0
      48             US Naval Research Laboratory       1717      21984   12.8
      49                    University of Toronto      12396     158501   12.7
      50                University College London      10831     136958   12.6
      51                     University of Oxford       9704     122210   12.5
      52   University of California San Francisco       3253      40915   12.5
      53        University of Southern California      17375     218213   12.5
      54      University of Massachusetts Amherst       1381      17166   12.4
      55           University of Colorado Boulder       6574      81660   12.4
      56                 Johns Hopkins University       6917      84569   12.2
      57                   University of Michigan      16286     197470   12.1
      58 University of North Carolina Chapel Hill       6867      82186   11.9
      59                          Duke University       8430     100875   11.9
      60                        Boston University       6744      80477   11.9
      61                       Rutgers University      10092     119986   11.8
      62                    Georgetown University       1182      13938   11.7
      63   University of California Santa Barbara       8238      96305   11.6
      64           École Normale Supérieure Paris       2102      24111   11.4
      65                   University of Virginia       5040      56874   11.2
      66                   University of Maryland      16658     187911   11.2
      67  University of Illinois Urbana Champaign      22084     248645   11.2
      68               University of Texas Austin      14418     160564   11.1
      69                      Tel Aviv University       7936      88271   11.1
      70                        Dartmouth College       2958      32683   11.0
      71                Portland State University       1795      19624   10.9
      72                  University of Minnesota      12559     137294   10.9
      73          University of California Irvine      10365     111280   10.7
      74   Lawrence Livermore National Laboratory       1682      18018   10.7
      75 National Institute of Standards and Tech       3612      38352   10.6
      76             École Polytechnique (France)       1370      14360   10.4
      77                  Northwestern University       7908      82239   10.3
      78  Technion Israel Institute of Technology       7391      76190   10.3
      79           University of British Columbia       9613      98773   10.2
      80                    Nokia Research Center       1683      17288   10.2
      81                    University of Arizona       6378      65277   10.2
      82                  Oregon State University       2499      25469   10.1
      83                    University of Waikato       1572      15804   10.0
      84                 University of Copenhagen       2232      22291   9.98
      85          Case Western Reserve University       2648      26219   9.90
      86       Polytechnic University of New York       1771      17506   9.88
      87                       University of Utah       5313      52423   9.86
      88                     University of Dundee       1088      10727   9.85
      89 Institut National De Recherche en Inform       1081      10581   9.78
      90           University of California Davis       8423      81240   9.64
      91        Commissariat a l'Ënergie Atomique       2403      23170   9.64
      92                   Stony Brook University       4358      42017   9.64
      93          Technical University of Denmark       2859      27564   9.64
      94                         Imperial College       4775      45981   9.62
      95           Los Alamos National Laboratory       4206      40442   9.61
      96          Georgia Institute of Technology      17315     165915   9.58
      97            Agricultural Research Service       1419      13596   9.58
      98                  University of Edinburgh       9598      91615   9.54
      99                     Texas Medical Center       1103      10514   9.53
     100                         Institut Pasteur       1315      12468   9.48

<comment><USER8>
      44      University of Massachusetts-Amherst
      54      University of Massachusetts Amherst

Uh?

<comment><USER9> Equally interesting, check out the first of those UMass Amherst links to see an example of how little scrubbing Microsoft did in the case of professor names, as well. The same professor is listed as #4 and #5, whereas combined, he would be #1 at UMass Amherst, and in the top 5 or 6 most-cited professors in the history of MIT or Stanford, with ~15,000 citations.

[http://academic.research.microsoft.com/Organization/3912.asp...](http://academic.research.microsoft.com/Organization/3912.aspx)

</comment></comment></comment></comment></comment><comment><USER10> It's interesting to note how much Google's (citation) influence has decreased over time. 60583 -> 19354 -> 3893 for all years -> last 10 -> last 5, where "all years" means about 12 (!). I'm guessing it's the exponential falloff of PageRank paper citations over time.

<comment><USER4> It is important to keep in mind that ... the older a paper is, the more "chances" it gets to be cited. On average, papers published 20 yrs ago would've been cited more than papers published 10 yrs ago. It is more fair if you compare publication citations in 10 years.

I.e. compare

citation between 1990 and 2000 for paper A published in 1990

vs

citation between 2000 and 2010 for paper published in 2000

<comment><USER10> I think we're talking about independent observations. I found it remarkable that Google's papers received 60583-19354=41229 citations between (presumably) 1998 and 2000 but only 19354 between 2000 and 2010. That's a pretty staggering difference, _especially_ as the number is an aggregate, as you say. Based on this observation I theorise that the PageRank papers were hugely influential, but the recent published work has paled in comparison. (i.e. those 19354 will also include later citations of the early papers, _inflating_ the 41229 figure further)

<comment><USER4> I definitely agree with you pagerank would be one of the most influential paper in Google history. However, for the year filter, I might be wrong but I think it filters based on the year the paper is published, not the year it gets cited. So when you pick "last 5 years", it won't include the citations for pagerank.

</comment></comment></comment></comment><comment><USER11> this seems to be simply a ranking of organisations by the number of citations.

there are a number of factors missed:

1\. what's the earliest publication of each organisation?

2\. what's the real world impact of the publications? (citations are not real world impact.)

3\. what was the significance of an organisation's contribution to a publication? for example, there might be many authors, where only one author did the actual work.

4\. it should be normalized by the size of the organisation.

5\. CS is multidisciplinary: plenty of people in CS publish in other domains such as biology, mathematics, statistics.

i couldn't work out if they counted self-citations or not.

<comment><USER4> Re impact: While it's not strictly correlated, the number of citations does indicate to a certain degree the real world impact of a publication. This is usually how you measure "impact" in the academia.

<comment><USER12> It's the wrong way to measure real world impact. It just happens to be an incredibly easy way for tenure and hiring committees to make decisions. There are a ton of problems with it, many have been pointed out in this thread. One I haven't seen mentioned is that lit reviews cited disproportionately (especially in the sciences). Many of them aren't even read. Many journals limit the number of citations so authors cite one lit review rather than many separate studies.

</comment></comment></comment><comment><USER13> I don't know what conclusions you can really draw from this, but the underlying service (Microsoft Academic Search) is pretty interesting. I've been checking out publications from my school for the last hour.

</comment><comment><USER14> I don't quite get why the citations for major institutions have grown at a rate of ~10K per year since the late 90s, but much fewer for the decade before that.

Can anyone explain?

<comment><USER15> Most people weren't publishing as computer scientists but rather electrical engineers and/or mathematicians.

At least that's my assumption. CS is a pretty young field after all.

</comment></comment><comment><USER3> > 2\. what's the real world impact of the publications? (citations are not > real world impact.)

so any suggestions on real world impact? winning a Turing Award?

</comment><comment><USER16> Not sure what data sources they are using here but there is probably certain organisations which a lot of their stuff is missed and some where everything is present. If it's similar to Google scholar a lot of the stuff my uni does doesn't end up on there.

Fully agree that papers published has no correlation with an organisations actual overall contribution to the field. Even citations really, because in some cases something broad will get cited a lot as it relates to a lot of papers without actually presenting something new or important.

</comment><comment><USER17> I wonder how much namespace pollution there is? I found at least one incorrect attribution due to identical names.

<comment><USER3> to report and correct identical names, you can cick the <edit> button on top of each author's profile page, then you can make changes to his/her hompage, affilication, papers, etc. you can even contribute papers.

</comment></comment><comment><USER18> I wonder how many decades IBM has been in the top 10?</comment>


Ask HN: What language is the most fun to learn - <AUTHOR> Looking for a hobby language to learn. Thinking F#, Haskel, Elm, Elixer or Nim but want something fun. Any recommendations? <comment><USER2> Currently having a blast with Haskell. Rust is probably my favorite overall, however, for pure fun: Scheme.

\- Scheme: pure fun. Pairs well with, Structure and Interpretation of Computer Programs

\- Elixir: also a lot of fun, I really enjoy the elixir help-docs/man-pages... Really ergonomic, almost no hassle.

\- Haskell: endless fun; tbh, for me, setting up a Haskell environment wasn't what I hoped it'd be. It's getting there, but if you've used Cargo (rust) or Mix (elixir) and expect to have a similarly smooth experience in Haskell, you're going to have to work for it.

\- ReasonML: I'm pretty excited about this and interested to see how it goes. I'm a big fan of OCaml-flavored languages.

\- Racket or Clojure: both are cool, docs/guides for both are great. The online Clojure docs/reference are fantastic. Same with racket.

If you're leaning towards F#, try to lean Scala. Just my 2cents.

<comment><AUTHOR> F# is only slightly winning due to Excel interop. But that can be delegated to other languages.

</comment></comment><comment><USER3> Either of these:

\- Elixir

\- Haskell

\- Ada

Are all unique and quite enjoyable to learn. Each of them has challenging new concepts that are amazing once you get your head around them (and a bit painful beforehand).

Each one will teach you something new and valuable.

Ada has an incredibly advanced concurrency model that blows everyone else out of the water. It is also incredibly safe -– this is the language that powers airplanes and spaceships (and missiles). Beware: after using Ada, you will hate the concurrency primitives of other languages.

Haskell is a great and enjoyable introduction to functional programming with concepts that can be taken anywhere.

Elixir can create extremely robust software through the "let it crash" philosophy and supervisor tree structure. Also a great intro to highly distributed systems, probably the only language where I found the lack of types to be an advantage. The concepts have been replicated in other languages (e.g. Akka, various actor frameworks)

<comment><USER4> +1 For Ada!!

</comment></comment><comment><USER5> If you do something with some number crunching it's Julia.

First it's nice because notation is very similar to math and turning algorithms into code is easy, but then comes multiple dispatch, nice dynamic type system and lisp-like ability to modify the code.

<comment><USER6> ^ This. Julia also has amazing differential equation packages and features. It also has some interesting AI stuff too, although my work with that is limited. There are some cool Markov chain Monte Carlo packages too, that are updated relatively often. For more cohesive references, there are books on Julia via Packt Publishing.

While Python has its purposes, Julia is just a fun language to use.

</comment></comment><comment><USER7> For me I've had most fun with Erlang. There are lots of new paradigms i discovered that I wasn't exposed to before, like, pattern matching, OTP system., Programming Erlang by Joe Armstrong is a really book and lots of credit goes to the book for making it enjoyable.

<comment> non-entity > Programming Erlang by Joe Armstrong is a really book and lots of credit goes > to the book for making it enjoyable.

Oh man I was really enjoying learning Erlang from this book, but put it down a while back after getting lost on some part.. I need to get back into it.

</comment></comment><comment><USER8> Haskell. No contest. It will blow your mind and completely change your perspective on programming.

</comment><comment><USER9> Prolog to me. The way it forces you to think about the problems in terms of facts and predicates, and the use of backtracking is very different from every other language.

</comment><comment><USER10> I did more than half of the Advent of Code to try learning F# over the holidays. The learning curve seemed very gradual. The only really weird thing I ran into were how arrays initialized/mutated. Wish it was promoted more rather than have C# incrementally gain its features over far too long a time and in a less concise way.

</comment><comment><USER11> ReasonML / OCAML if you are into ML. Clojure if you like LISP.

Node if you want to convert into money making opportunity

</comment><comment><USER10> Hamler looks really exciting to me.

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

</comment><comment><USER12> I'm learning Elixir at the moment. I've mainly done OO programming so there's a few new things.

</comment><comment><USER13> So late to the party... Still, I feel like I have a chance to contribute due to my hobby being programming languages (see my blog.) So, a few suggestions:

\- Smalltalk: I played with Pharo Smalltalk for a bit and enjoyed the experience very much. Pharo is image-based, which will probably surprise you - very few PLs share this characteristic. Pharo includes an IDE within the image, including incredibly powerful debugger; the look&feel is not "native" to your system, as it's built from scratch, but it's not ugly either; the upside of using Morphic as a base for GUI makes it flexible, so much so that only the Web (with browser developer tools) comes close to it. There are downsides, but if you hit one of them, just shoot me an email. Overall it's an eye-opening experience which will show you how incredibly user (the tinkerer kind) unfriendly basically every GUI currently in use is.

\- Prolog was mentioned by others, and I second that. There's also Logtalk, which is Prolog with OOP baked in - it's a surprisingly powerful and practical language, but it may be hard to get into without first going through something like [https://www.metalevel.at/prolog](https://www.metalevel.at/prolog) (same goes for Mercury, which is also interesting, but not easy to get into without a warm-up)

\- J: I'd recommend APL or K, but I unfortunately don't know them well enough to do this. J is an array language by Ken Iverson, it's general-purpose with heavy emphasis on expressing complex data transformations succinctly. The core of the language is not that big, its rules are simple, but they combine in a way you won't see anywhere else. Worth taking a look; one important note, though: it'll take you _years_ to become able to read J code on your own, so in the beginning don't even try - the trick is to use the interpreter, which has 3 or 4 different ways of displaying expressions to make them more manageable, but in the end you're going to execute and experiment for _hours_ before understanding a single line of J. That's normal. Don't be discouraged. That line probably expresses computation that would need hundreds of lines in "normal" language.

\- Forth: it's basically a REPL for Assembly. It's interactive, lets you define and execute programs by typing them at the prompt, yet it's usable on the most underpowered microcontrollers out there. See the (free) book "Thinking Forth" by Leo Brodie, it's a good overview. Also, personal note: don't try to do everything via the stack: it's perfectly ok to use named variables. Especially since you can implement the support for them yourself (or fetch one from the net) in case your chosen implementation doesn't provide them.

\- OCaml: F# can be viewed as a dialect of OCaml, but, due to it having to fit into .NET, F# left out the 'O' from OCaml. While the ML base of OCaml is solid, it's not that unusual (well, if you have experience with other languages in that family...); it OOP part, though, is a real gem, and from the looks of it it was a major influence on Scala OO features. F# also left out functors, IIRC, which are also an interesting feature. Also, after you learn OCaml, you'll be able to learn F# in a weekend, so it's hitting two birds with one stone.

\- Elixir and Erlang. Depending on what you want out of it, I'd start with Erlang and then learn Elixir after that. That is because Erlang is a very simple language, with no "magic" at all: whatever's happenning is in plain sight, visible in the source. Of course, it's tedious and verbose as a result, but considering that the OTP is damn hard to really grok, having a simple language actually helps a lot. Once you have Erlang/OTP basics down, transition to Elixir, which adds a convenient syntactic abstraction in the form of macros and a more complex/powerful module system.

\- Nim: I like it personally, but I'd wait a bit before delving into it. As far as I understand, the parts around the GC are being redesigned, and from the looks of it the new design will be rather different than the current one (also better, IMO). Other than that, I use Nim regularly for writing simple scripts, which are not much longer than Python or PERL equivalent, yet they are statically linked executables with excellent performance and ability to be dropped on any of my systems where there's libc.

\- Haxe + LuaJIT: this is what I'm currently investigating. There's a lot to like about Lua, but lack of static (even if optional) typing, the module system design, and non-existent stdlib are a huge pain points. Haxe is a language which compiles down to Lua (among 9 other targets) and it covers all the problems, leaving you with the incredible speed and other goodies (like proper tail calls) ready to use. The Haxe compiler performs dead code elimination, so you only pay (in terms of the lenght of produced Lua code) for what you use. Finally, Haxe has proper macros, a bit similar to those in Nim, but with additional layer of sugar, similar to syntax-case from Scheme. BTW: Haxe compiler is written in OCaml, so it won't hurt to know it beforehand (not a strict requirement, though, unless you want to write comipiler plugins.)

\- Common Lisp, Clojure, Racket: I'm running out of time for writing this post, but these all have many good things going for them. Personally, I started with Racket, then learned CL, and only later I learned Clojure, which required JVM to run. I didn't like that last part. ClojureScript is now a serious contender, as it became bootstraped and can work with JS engine alone.

\- Scala: honorary mention, being tied to JVM is not that bad in its case, and it is actually quite well designed langauge. Of course, the chains of implicits or higher-kinded types are hard to grasp, but you don't need them in the beginning, and by the time you need them, you'll be able to understand them, probably. The problem of it becoming a write-only language is real, but IMO much exaggerated: a bit of discipline goes a long way here.

There's so much more I'd like to say, but I don't have the time right now :( Shoot me an email or ping me on Discord if you'd like to chat about this stuff; it (PLs) has been my hobby for more than a decade right now, and I have played with pretty wide selection of languages, so I might be able to give a more precise advice if I knew what do you need the new language for.

</comment><comment><USER14> Haskell

</comment><comment><USER15> Clojure

</comment><comment><USER16> R</comment>