Vivaldi – A new browser for our friends - <AUTHOR> https://vivaldi.com <comment><USER3> Its not a new javascript engine.

Its not a new rendering engine.

So basically its just a different UI skin on chrome. That's cute, but its not a new browser.

It's the same browser with a slightly new UI.

Count me as skeptical and unexcited.

I am similarly unexcited by the 'it's browser' webkits views in android and ios, for exactly the same reason; they're dime a dozen, and lack any compelling reason to switch or use.

(Servo, by comparison, _is_ a new rendering engine, with new features that make it extremely interesting)

<comment><USER4> I'll voice a dissenting opinion.

Doing HTML and JavaScript are commodities. Given the existence of standards, there's not a lot of room for innovative behavior. Any developments (faster, new HTML standards, etc) won't impact the market unless they're in one of the major browsers. Competition is good, but there's only room in the market for a handful of rendering engines. Maybe 3-5, tops.

Conversely, UI and human interaction with the browser is a place where there's room for an unbounded number of players. This is where the competition can actually be happening. And it's where I think the competition _should_ be happening.

The idea of a browser as something that just renders HTML and executes JavaScript is kinda lame. I use Opera because I think it's also the browser's responsibility to include tab organization and search functionality and mouse gestures and flipping CSS in and out and synchronization. (And I like my mail integrated, but that's a personal thing.) And I want it to Just Work, instead of having to manage a half-dozen extensions.

I am guardedly optimistic about Vivaldi, because it's what I actually out of a browser. (Specifically, an updated version of Opera 12, which Opera 15+ is not.)

<comment><USER5>
      > Given the existence of standards, there's not a lot of
      > room for innovative behavior.

This is incorrect. Servo, with its goal of being fanatically concurrent, is forging new ground in discovering exactly where the HTML specs both admit concurrency and where they unintentionally demand serial behavior. Browsers of its ilk, regardless of adoption, will be instrumental in informing future standards such that they are not accidentally hostile to concurrency and parallelism, thereby clearing the way for widely-adopted engines to implement such optimizations at their leisure.

<comment><USER6> > unless they're in one of the major browsers

Servo is a research project for a future version of Firefox. That's the definition of a major browser. No web developers want a new browser with incompatible features to test or build against, but Mozilla/Google/Microsoft experimenting for future versions is expected.

The original point is that independent browsers using established libraries and adding new UI concepts is great for users and doesn't make extra work for web developers. I'm looking forward to what they make of it!

</comment></comment></comment></comment><comment><USER7> MRU Tab Switching out of the box. Didn't expect that now that some shitty browsers (Chrome) can't even have it via extensions. I will never understand why someone intentionally removed ctrl+tab functionality from their browser (it's completely useless feature as "select tab to the right").

So I'll keep an eye on this for sure. Even though there are lots of missing features and couple of bugs that I noticed right out of the box. I hope they'll get to the point where they can maintain their own version of Blink, to get rid of some stupid choices they made (text selection for example).

Relevant (open-source) project: [http://otter-browser.org/](http://otter- browser.org/)

<comment><USER8> +1 for MRU

Who even finds "select tab to the right" useful??

<comment><USER9> I couldn't get used to MRU because then I can't get to the tab I want without looking away / breaking my train of thought. Once you know the tab you want is three tabs to the right, you can get to it by muscle memory. You can't build a mental index with MRU because the items keep moving around (but maybe tracking MRU lists is an acquired mental skill).

By default, many browsers also arrange tabs in an order I find not entirely optimal. Tree Style Tabs / Tab Mix Plus help here.

<comment><USER7> In old Opera you were shown an ordered list of tabs when using ctrl+tab (as you have in window managers). Not exactly what you were talking about, but it was not just random guessing as for which tab will pop up next. You saw how many you had to go, or you could use a mouse. You have other shortcuts for go left/right when those make sense.

Also, my biggest issue is with the inability to change this behavior. So I don't think there is one right way to do things (as there obviously isn't). I think such option should be included in settings, or at least let it be possible via extension (as is in FF). By the way, request for this option is one of the top voted issues in chromium (like in top 10 of all time I think), yet it was closed as WONTFIX without any comment from developers.

<comment><USER9> Yes, I used Opera for many years until I reluctantly switched to Firefox. The MRU popup still adds a mental load because you have to visually scan the tab list and know at which tab to stop at. Alt+Tab suffers from the same problem.

> or you could use a mouse

I try to not use the mouse, even while browsing the web. One of the reasons I liked Opera was the excellent spatial navigation feature, which sadly has no good equivalent in other browsers currently. Vivaldi claims to reimplement it, so that's interesting, but at this point I'm not going to risk more lock-in by switching from an open-source browser to a closed-source one.

</comment></comment></comment></comment></comment><comment><USER10> I would like some more information. Like what engine is this based on? What JS engine? And I guess the source will not be open? (Why?)

Edit: Some more info here: [http://thenextweb.com/apps/2015/01/27/meet- vivaldi-new-brows...](http://thenextweb.com/apps/2015/01/27/meet-vivaldi-new- browser-former-ceo-opera/)

Seems as if it uses the Chrome engine. I wonder about the differences to Opera then.

Edit: Found also this on the homepage (somewhat hidden under the "Web technology" tab):

We use JavaScript and React to create the user interface — with the help of Node.js, Browserify and a long list of NPM modules. Vivaldi is the web built with the web.

So it's like [http://breach.cc/](http://breach.cc/) ([https://news.ycombinator.com/item?id=8952152](https://news.ycombinator.com/item?id=8952152)) then?

<comment><USER11> Most of the UI is based on React. But we use _a lot_ of open source projects. If you run it you should visit vivaldi://credits

<comment><USER12> It's cool that you use a lot of open source projects. But some of them are under licenses that require the user to be able to download their source code, and it's not obvious right now where (for instance) your Webkit code is. You should probably fix that.

<comment><USER12> And as an aside - if you're linking LGPLed material into a static binary (as you appear to be doing with Webkit), you need to follow the provisions of section 6(a) of LGPL 2.1 and provide object files that allow the recipient to re-link the binary with a modified copy of the LGPLed work.

</comment></comment></comment></comment><comment><USER13> Why there aren't any screenshots?

One suggestion: 'A new browser for our friends' is nowhere a good introduction. It simply fails to explain to me the reason why I should care this in the first place.

</comment><comment><USER14> Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Vivaldi/220.127.116.11 Safari/537.36

I think it's the first useragent string to contain 7 different browser/engine names.

<comment><USER15> It's roughly the same as Chrome, plus the reference to Vivaldi.

It's ugly, as any user-agent string is. The uglier beast, to my knowledge, is this one:

Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537

Windows Phone 8.1 Internet Explorer.

<comment><USER16> That one makes a little more sense. Some user agent detectors will look for Trident and assume it's an old version of IE and therefore not compatible.

The more things you put in your UA string, the harder it'll be to fall into the "this is IE" bucket.

<comment><USER15> It serves a purpose, but (IMHO) makes no sense.

Microsoft is trying to avoid UA-based blocking (e.g. Google once used this do block the Google Maps web app in Windows Phones) and styling (some sites only send the mobile version to webkit mobile browsers). Microsoft effectively masks its browser by changing the UA string to something which is detected as mobile Webkit, and this is (IMHO) wrong. Even if the site is "functional", a site owner should be able to opt to not support Windows Phones.

Suppose you are responsible for a site which carries a heavy and valuable brand. Suppose you don't have/don't want to allocate the resources needed to correctly develop and test your site in Windows Phone. You don't know how the site will run: you won't know about bugs, you can't guarantee a solid user experience and you can't guarantee performance. Ergo, you might affect the brand you carry. Although not ideal, I think it is valid for someone to say "I want to block my site in some device/OS, because I can't guarantee the quality and it might be bad for my brand".

I concede (and believe) that the end user should be able to circumvent these mechanisms by, e.g., changing the UA string. However, I don't agree with Microsoft approach of masquerading, by default, as Android and/or iOS browsers. Pardon my rant, but it's just Microsoft being Microsoft: bending standards at will and playing desperate when not it control of a given market.

</comment></comment></comment></comment><comment><USER17> Uninstalled.

"Title: Vivaldi End User License Agreement

7\. Without limiting the foregoing, you are neither allowed to (a) adapt, alter, translate, embed into any other product or otherwise create derivative works of, or otherwise modify the Software ; (b) separate the component programs of the Software for use on different computers; (c) reverse engineer, decompile, disassemble or otherwise attempt to derive the source code for the Software, except as permitted by applicable law;"

<comment><USER18> Contacting the FSF as this is using GPL'ed code under a restrictive license.

<comment><USER19> What library contained in it falls under GPL?

</comment></comment></comment><comment><USER20> Hmm, so it's not Open Source? So it's not a community effort? So the developers are paid? Then how are these expenses earned back?

<comment><AUTHOR> My guess is that it's funded by Opera Software co-founder and former Jon von Tetzchner for now, he should have some money left in the bank after leaving Opera.

</comment></comment><comment><USER21> Color me interested. I'm currently fed up with more or less the entire current crop of browsers, so it would be nice to see a new serious player with some experience enter the field. Old Opera was a fantastic suite in its day, but new Opera is little more than a buggy hack of Chrome.

<comment><USER22> The new Opera is far more than a buggy hack of Chrome. It has a new user interface which isn't actually buggy.

<comment><USER21> A new interface which offers less functionality than either Chrome or Opera 12 (it can't even export your bloody bookmarks FFS), constantly locks up and becomes unresponsive for half-minutes or more at a time after simple actions, and largely wastes its breath on visual features like the new bookmarks manager which manage to be deliberately less functional than almost any other possible interface.

It's not as bad as Firefox though.

</comment></comment></comment><comment><USER23> Tried it out, there are some problems with handling local hostnames. Tried visiting my localhost webserver but have to specify [http://](http://) every time, even if I'm already on the site and just append something to the url it'll redirect me to google unless I first prepend [http://](http://). It's rather annoying considering I only edited the already loaded URL. It's easily a deal breaker from a developer stance point.

<comment><USER24> Similar things happen in Chrome. This is why I jumped the shark and simply use fake domains with actual TLDs for local development stuff, e.g. "myproject.ninja" or "something.gg". With the advent of all those new TLDs, there should be one for you as well to designate as "this points to localhost". ;-)

<comment><USER25> The only trick I've had to do with chrome is use an ending slash `/` like `devserver/` and it tries that hostname and doesn't search for it.

</comment></comment></comment><comment><USER26> The very first thing I noticed as soon as I opened the browser is that the tabs don't touch the top of the screen when the browser is maximized [1]. This makes closing tabs much more difficult since you can't just move your mouse all the way to the top of the screen and middle click--you have to consciously stop moving the mouse before it leaves the tab.

I can understand why they don't touch the top of the screen: the tab stacking shows up above the tab. My suggestion would be to expand the tab to the top of the window, and then just make the tab stacking show up inside at the top of the tab. If not that, at least make the tab's bounding box touch the edge of the screen and leave the tab stacking on top of it.

I found a few more issues while typing this up: 1\. The browser seemed to think my CTRL key was stuck or something. Typing in my password on imgur made it switch tabs and zoom out multiple times when I went to type some of the numbers in my password. 2\. Copying the image URL from the address bar after I uploaded it didn't copy the protocol. The protocol was hidden since it's http, but that adds an extra step of typing "[http://"](http://") when I wanted to paste it here.

The browser looks like it has promise. I like the look-and-feel. I like that the address bar is the progress bar when the page is loading. Being able to add notes and screenshots also seems like it would be incredibly useful.

Overall, I'd give the browser another shot once you've made some more progress.

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

<comment><USER27> While Fitts' law is useful, that behaviour actually drives me mad as someone who is used to the three mouse buttons having discrete behaviours on the actual caption bar. Suddenly 'tab' is above 'window' in the hierarchy for control.

<comment><USER26> I can understand that. For me, though, I use middle click to close tabs significantly more often than I move the browser window to another monitor. So I'd rather live with having to click an empty space farther to the right of the tabs when I actually do move the window.

I could learn to use CTRL+F4 to close tabs, but I find that slower than just middle clicking the tabs.

</comment></comment></comment><comment><USER28> It is much slower than Chrome - <USER2> [http://www.leboncoin.fr](http://www.leboncoin.fr) and try to move the mouse above the map. The lag is very noticeable.

<comment><USER29> What about "tech preview" and "not optimized" did you not understand?

<comment><USER30> Can you say the same without it coming off as mean-spirited? One example: "They did mention it was a 'tech preview' and that it was 'not optimized'."

<comment><USER29> You're right I should have expressed myself differently.

</comment></comment></comment></comment><comment><USER31> It's funny because its Mozart's birthday not Vivaldi's.

</comment><comment><USER32> Interesting but no HiDPI support (linux) so won't be able to use as daily driver and help test it.

<comment><USER33> How does HiDPI work on Linux? Is everything scaled to twice the size like with retina?

<comment><USER34> Ubuntu has a slider that lets you to adjust the multiplier, see [http://www.phoronix.net/image.php?id=0x2014&image=unity_hidp...](http://www.phoronix.net/image.php?id=0x2014&image=unity_hidpi_1_show&w=1920) Not sure about other distros.

</comment></comment></comment><comment><USER35> > Built on Web Technology

I wish this trend would end. The few applications I tried out that advertised being built on web technologies were not very well integrated with the OS (UX wise), huge in binary size, very memory hungry and noticeably slower than native alternatives. It's not a selling point, imo.

Especially not when you consider how _big_ a dependency webkit/gecko is and how much bugs and attack surface you're bringing in and are responsible for patching in your end product.

<comment><USER36> I'm so glad that I'm not the only one asking for this.

I don't understand what the use-case is. Why expend all that energy to make a custom native UI platform when all you end up doing is breaking the standards for my native OS? On Windows, Internet Explorer is the only browser that just gives a simple native window. Chrome and Firefox both cause issues because of their custom drawn windows. I don't see any reason to use Vivaldi if they're going to follow the same path.

</comment></comment><comment><USER37> All I want is Spatial Navigation like in the old Opera. It was such a intuitive way to operate your browser solely with your keyboard. I really miss the old Opera...

<comment><USER38> Same here. Old Opera is now only a nice memory. :/

</comment></comment><comment><USER39> I really like it! One thing that I'd like is for Bookmarks to be synced with Pinboard. Local browser bookmarks are no use for me (and I would presume a lot of people) because I use too many devices and too many browsers. I don't mind going to pinboard.in to view my bookmarks but it's nice to be able to quickly bookmark something using the native browser UI (rather than an extension).

</comment><comment><USER40> I hope they make it, sure looks interesting. I kinda miss old-Opera, it was great for its time.

I wonder what their business model is. How does one earn money off a browser nowadays? They seem to focus on being a complete browser suite, old-Opera style. Do they plan to sell it as an app? Sell web services (mail etc)? Convert all encountered amazon links into affiliate links? (har har)

<comment><USER41> At a guess, no.1 objective would be to get eyeballs. The money would likely come from the search box/URLs default once they have some scale.

</comment></comment><comment><USER42> My gods, it looks more like Opera12 than the latest Chropera. I'm so very tempted to start using this as a daily driver right away!

And I got an error when trying to register on their forums (edit: solved through IRC), oh well. I wonder if they even considered doing something similar to now-defunct Opera Unite. That thing rocked.

</comment><comment><USER43> If you were looking for screenshots (since this is a wrapper around blink) they are buried here under the Press Resources link:

[https://www.dropbox.com/sh/ljm9h48qn2x3v33/AAAmdrTw2ISsKKQNR...](https://www.dropbox.com/sh/ljm9h48qn2x3v33/AAAmdrTw2ISsKKQNRNHk-73ka/Screenshots?dl=0)

</comment><comment><USER44> Hey cool, a new bowser which seems function-

oh for fucks sake it's goddamn node.js again. Stop this shit. I don't need a node runtime taking up 400MB on top of an already memory hungry browser. I don't need a browser using and abusing fucking javascript to run.

Looks good though, and features seem interesting.

<comment><USER45> You do realise that node.js is basically just V8 right? You kind of need a Javascript runtime for your browser anyways.

Chrome and FF had a decent amount of memory leaks "despite" being written in C++

<comment><USER44> >You do realise that node.js is basically just V8 right?

Aside from the fact that _I don 't need a goddamn 400MB runtime running_ all the time, the major problem is that node.js (and javascript, by extension) are awful tools for anything desktop related. (Server related too, but that's more a personal opinion that node.js is cancer (hi ted)).

Performance has never been up to par with C/C++ (no, testing a 100 line script is not a valid bench. No, comparing it against awful code is not a valid bench either. Which kinda invalidates 90% of node benchmarks.). But sure, let's trade a bit of performance for ease of use, I'm all for it. Except when that tradeoff implies using javascript, whose warts are known by anyone sensible. Having a single threaded architecture for a browser, which should basically be running one process/thread per tab is an error we shouldn't be doing anymore in 2015. I sure love one tab crashing my entire browser(hi firefox). Which I managed to do quickly with Vivaldi, but I can understand that it's still a beta.

Also, let's ignore the OS's native UI libraries because atom-shell/whatever- desktop-lib-they-use chose to render the entire thing as a DOM because reasons.

>Chrome and FF had a decent amount of memory leaks "despite" being written in C++

Nowhere did I hold Chrome and Firefox in high regards when it comes to memory usage. Chrome seems to think that allocating 4GB of memory for 20ish tabs is a good idea. Firefox is a bit better but has this slight tendency to leak memory like crazy.

tl;dr: browsers suck but that's not a reason to write one in fucking javascript

awaiting the nodejs defense force

</comment></comment></comment><comment><USER46> Visit HN on this browser, you will see chrome UI adjusts its color theme automatically. Very impressive.

</comment><comment><USER47> I'm downloading Vivaldi now. Chrome's safe-download mechanism doesn't like it.

As much as I like the idea of writing a browser using web technologies, most attempts so far have been pretty lacklustre. I'll wait until it's finished to pass final judgement on Vivaldi, but I don't really want the old Opera UI and features on top of the browser engine that the current Opera uses.

Also, I'm waiting for someone to just make a nice plain web browser. I don't want a mail client built in, I already have one of those. I don't want panels everywhere that I can't hide, nor do I really want a note taker. All I want in a browser is the minimal amount of UI around a fast browser engine that has lots of green boxes on caniuse.com.

<comment><USER48> Chrome?

<comment><USER47> What about it?

<comment><USER49> "All I want in a browser is the minimal amount of UI around a fast browser engine that has lots of green boxes on caniuse.com." Chrome.

<comment><USER47> Chrome's good (I do use it) but it seems to me that Google is turning it into a platform. It has lots of green boxes, but non-standards track features are creeping in.

</comment></comment></comment></comment></comment><comment><USER50> \- design layout looks cluttered. coloring of the ui to match the website is not a good idea. you cant really distinguish between browser and website, gives me a cluttered feeling. \- ui feels slow and flickering after some clicks \- double click on yosemite doesnt maximize instead it mimizes the window \- dont know why a modern browser needs todos, mail, notes and contacts. we have apps/webapps for that already. \- dont fetch stuff from google servers on startup \- tab grouping is useless for me, split screen etc. would be more useful imo \- integrate a service for bookmarks or deliver an api. local bookmarks are so 1995. \- rename it, vivaldi sounds very oldish and boring.

</comment><comment><USER51> I wonder how browsers in the past used to work? A single tab takes over 200MB these days.

<comment><USER52> the most common source of js memory leaks in my experience is devs forgetting to clean up event listeners.

</comment></comment><comment><USER53> 511 points on HTML5Test [0] on Linux with Vivaldi. That's more than I get with Chromium (481) or Firefox (449). Vivaldi feels already quite nice but not finished (e.g. flickering of the preview images in vertical tabs when switching the tabs) and generally a tiny bit slower when changing tabs in comparison to chrome/chromium, my default browser at the moment.

Definitely keep it installed for now, probably won't use it daily.

[0] [https://html5test.com/index.html](https://html5test.com/index.html)

</comment><comment><USER54> So good to see the single character keyboard shortcuts from the old Opera, although some functionality is working differently, need to press 1 and 2 twice to switch back and forth? It used to be that 1 and 2 would go to next and prev tab, but now 3 and 4 seem to have been assigned for those.

1 (cycles bt. tabs?), 2, 3 (next tab), 4 (prev tab), z (back), x (forward)

</comment><comment><USER55> I have been using this browser for the last 4-5 hours. It is fairly good. However, some pages like Dr. Dobbs and Vivaldi's own forum makes all shortcuts fail. The only solution seems to be to alt-tab to some other window and then use the shortcut. That said, the browser is really neat to use.

</comment><comment><USER56> I really like the way they've implemented tab previews. I can hover at over the tab and it'll show its thumbnail or I can drag the menubar down under the tab bar and all the tab thumbnails show at once. It makes more sense to me than the way Apple implements it in Safari.

</comment><comment> chaotic-good It is possible to search using address bar and separate search bar, why not to join them?

<comment><USER57> In most (all?) browsers with a unified search bar, your search query may be confused with a URL and breaks your search. There's usually some syntax you can throw at the front to disambiguate, but I'd rather not have to think about whether my query is going to work or not -- especially with new TLDs rolling out all the time. I much appreciate the separate search bar as a result.

<comment><USER31> In classic Opera browser if you prefixed your search query with a letter it always searched with engine associated with the letter. For example:

`g thisissearch.com` would be interpreted as Google search query, not url. I think this is good behaviour.

<comment><USER58> There are two different ways to do this in Firefox with no addons or weird configs:

Open Preferences->Search->One-click Search Engines, make sure google is checked, double-click "google" in the keyword column, change it to just "g".

If you want to keep the old "google" term or outright disable Google as a built-in search engine you can still add "g" as a keyword search. Go to Google, right click the search box, select "Add a Keyword for this Search..." and select "g" as your keyword. This works for search forms on most sites that aren't doing insane stuff with javascript or mandating a security token and it generally remembers other form settings as well.

<comment><USER31> Yes, I have seen this. I couldn't play with it when I was at work. I definitely love this functionality.

</comment></comment></comment></comment></comment><comment><USER59> "A new browser for our friends", as in the developer community? That seems like a lot of effort to build a browser for a very small group of users.

The sad truth of browsers is that most people use whatever comes on their machine. A lot of times that would be IE - lots of people I know/companies in the UK still use IE out of a lack of knowing any better. Some more savvy users will use Chrome/FF but that's because they realise it has a lot of benefits over IE or are shamed into not using IE.

This doesn't really offer any 'wow' features that entice me as a web developer to try it, so your average user is even less likely to try it. And really, when making a browser, your target _needs_ to be the masses because otherwise no web dev is going to support your browser if it requires even the tiniest of special treatment in their code.

<comment><USER21> _" A new browser for our friends", as in the developer community?_

The "Opera community" is, or was, a thing. Opera spent years cultivating an actual community around their users, with forums and chat and social networking features galore. Then they shut it down last year.

The Vivaldi folks have also started Vivaldi.net, which appears to be an attempt to keep that community going elsewhere now that Opera has essentially axed everything that made people love them in favor of being an also-ran Chromium fork.

<comment><USER22> The Opera forums weren't shut down. They were moved to a new location. The chat still exists as well.

The My Opera site was what made people love Opera? Uh... No. Opera 12 had tens of millions of users, and hardly a fraction of those visited that site.

<comment><USER21> Well, I was also referring to the browser itself, which is now a useless shadow of its former self.

</comment></comment></comment></comment><comment><USER60> Looks good, not sure about the nav changing color to match website styles but that is an interesting approach.

Having mail built in is not useful for me, but I wonder if it will support other email providers eventually (gmail etc)?

<comment><USER61> I don't like it either. I mean it wouldn't bother me that much, it's not a dealbreaker, but it's the kind of minor thing that would prevent me from switching to this browser unless it offers something genuinely advantageous over the existing solutions.

But, just fyi, you can switch off the color changing. At least in this preview release.

</comment></comment><comment><USER62> Looks good! I think the first thing you could do with is a public bug tracker/feature request system. I think the forum format is particularly badly suited to managing feature requests and tracking bugs.

</comment><comment><USER38> UI should be minimal. I dont't understand why all this buttons, dashboard should be visible by default. It looks like kids picture book, distractions everywhere.

<comment><USER63> Well, there's a whole lot of no-UI browsers out there for you. Hell, almost all available browsers fit in this category.

But some of us actually miss those UI, so this is good news. Although I'm still disappointed by Vivaldi atm.. not the Opera 9-like I was hoping for =/

</comment></comment><comment><USER64> My first thought was: "Crap another browser. Fun times." \- but I guess it will be alright since everything seems to run on bootstrap & co anyways ...

</comment><comment><USER65> Tab stacks, cloned UI, tab previews, integrated mail.

Someone is targeting Opera-like experience and damn, I like it.

I am not sure about liking it being another incarnation of Chrome inside though.

<comment><USER66> I think the people behind it are past Opera employees.

<comment><USER67> In fact, Vivaldi's founder is Jon Stephenson von Tetzchner, one of Opera's founders and ex-CEO of Opera.

So I guess one could say there's a link between Opera and Vivaldi (no pun intended).

</comment></comment></comment><comment><USER68> I love the Tab Stacks idea.

IE tried to do that years ago by coloring tabs, but then you ended with a rainbow in your face instead of really (abstracted away from you) grouping.

</comment><comment> chaotic-good UI looks really cool though a little bit alien on ubuntu.

<comment><USER69> It looks definitely out of place on Ubuntu (a Gnome fallback desktop here.) It looks like something ported from a Windows 8 desktop and it ignores the system setting for the color of the title bar.

I also wonder why they are implementing an integrated mail client. It seems a waste of developer time which could be spent on something more important.

That said, the browser is pretty fast. Chances that I'll use it: maybe, but not as primary browser. I'm using FF with some vital addons as my primary browser (Firebug, NoScript, AdBlock, SelfDestructingCookies) and Opera/Blink as wordprocessor and spreadsheet on Google Drive, to separate concerns (customer mandated docs). I can't see me leaving FF for this (I didn't for Chrome) but it could end up replacing Opera if they keep it minimal.

</comment></comment><comment><USER70> Nooooo! Forward/back and home buttons are all in different places to Firefox, IE and Chrome... gah! I wish they'd all use the same layout!

</comment><comment><USER71> I like how there's already Linux versions out as early as this. Unusual.

Seems like a cross between Opera and Chrome. Will have to keep an eye out for this.

</comment><comment> V-2 Still that tiny gap between the tab bar and the edge of the screen :) Years pass, but Opera (and now its offspring) can't get it right.

<comment><USER35> If i remember correctly, that's so you drag & drop a full window rather than a single tab.

<comment><USER72> I'm looking at chrome with a title bar full of tabs. If I want to move the whole browser I have several places to grab the title bar. Additionally, from a sample size of one I find that selecting tabs happens with a far greater frequency than moving the window. Generally the widow is maximized on one display and I simply Alt-Tab to other windows.

<comment> V-2 Yeah, exactly. There's normally a bit of free space to the right of tabs. User can grab the title bar there. I'm switching between tabs like 1000 times more often than dragging the entire window anywhere. Perhaps I'm not a typical web browser user, but...

</comment></comment></comment></comment><comment><USER73> Can somebody explain to me a viable business case for building yet another browser today? How do they expect to make money on it?

<comment><USER74> If they're able to attract market share at all, there's a lot of money to be made in the default search engine arena. The Mozilla Foundation gets quite a bit of money from Yahoo to have Yahoo be the default.

</comment></comment><comment><USER75> Are they caching websites? I have HN open in both Chrome and Vivaldi and the comments count are different.

</comment><comment><USER76> Tab stacks!

Is this finally a replacement for Opera?

<comment><USER77> Yes, the UI is a clone. Memories :_)

</comment></comment><comment><USER52> the #1 thing I want from my browser is tree-style tabs ([https://addons.mozilla.org/en-US/firefox/addon/tree-style- ta...](https://addons.mozilla.org/en-US/firefox/addon/tree-style-tab/))

</comment><comment><USER78> They had one thing to do right for a modern browser: tabs on the side...

<comment><USER79> Check the preferences :)

<comment><USER31> Is it there? I'm on phone now. I have been waiting for this desperately! :DD

<comment><USER80> Yes, it supports vertical tabs (tabs on the side) :)

</comment></comment></comment></comment><comment><USER81> Screenshots, screenshots, screenshots! A picture paints a thousand...

</comment><comment><USER82> You all remember RockMelt browser? This = That in the making!

</comment><comment><USER83> Opera creators using NPM & React to create a web browser.

I love the future

</comment><comment><USER84> I downloaded it without any expectations, and I must say I'm impressed. It even runs our Chrome only single page app very well and fast. I'm looking forward to seeing where this one goes.

</comment><comment><USER80> Finally a browser that supports vertical tabs.

</comment><comment><USER85> no ctrl+shift+t?? [http://1.bp.blogspot.com/-PIMx8pYvMEw/Uek_GUQ- OCI/AAAAAAAAA_...](http://1.bp.blogspot.com/-PIMx8pYvMEw/Uek_GUQ- OCI/AAAAAAAAA_0/9xOrP9jGlBU/s1600/fthisshit.jpg)

</comment><comment><USER86> I wonder if everyone in the "team" contributed code.

</comment><comment><USER87> Please disable Javascript by default when browsing. It will be very fast.

</comment><comment><USER88> Well, I know I'm not your average user, but a website that only displays a spinner to noscript users doesn't exactly make me very confident that this browser will help to make a better www.

<comment><USER89> You have chosen to break your own web experience, I'm not sure why you're complaining.

<comment><USER88> When I started to use the web there were campaigns like best viewed in any browser, and the browser wars were just starting. I didn't realize that sharing my sentiment would be perceived as complaining. I know how to disable noscript.

<comment><USER90> The times had changed. Semantic Web is dead. Nobody anymore gives a damn about that, everyone's drunk the kool-aid of webapps.

Everyone used to hate Flash, but it's perceived as normal when the pages are bundled a good chunk of rendering/layout engine to run inside your browser engine. Can't track you and serve you advertisements with plain hypertext documents, duh.</comment></comment></comment></comment>


OK -I'm convinced.  How do I start programming in JavaScript? - <AUTHOR>

I program in C and Python.  My Python style is definitely imperative in general nature, but functional when I think that paradigm suits, and OO when I think that's appropriate.  My colleagues say my programs are clean, clear, effective, efficient, and make their brains hurt.
I know squat about JavaScript.
I have a clean Ubuntu machine with a webserver.  What's the most effective way to learn JavaScript?
I'm not looking for dark, arcane knowledge.  I'm looking to write well-crafted code to accomplish meaningful tasks on web pages, as well as to solve small, on-the-fly problems, much as I currently use Python, AWK, and Bash.
Suggestions?
EDIT: Not trying to karma-whore here, but if no one upvotes the question it will disappear quickly and we won't get the collective HN wisdom.  That would be a shame.  Do you want a scape-goat comment? <comment><USER2> My path so far with javascript (with examples!):

Desire to make neat web pages. Learn enough jQuery so that you can make something move and change colors with maybe two lines of javascript instead of 20. Keep trying to one up yourself in what kinds of cool shit you can make (I use the term shit because you won't be making anything _useful_ persay, but it will be something that will make friends say "Shit, that is cool. How did you do that?")

Start to learn more and more jQuery until you think in callbacks and events. Use the canvas to make weird patterns (treeowls.com). Make something using Ajax (try the hnsearch api: pretty fun <http://zacharymaril.com/HNSearch/Topics/testing-api.html>). Try to solve a hard problem with JS that requires lots of computing (some work with Ramsey theory: <http://zacharymaril.com/thoughts/constructionGraph.html>) . Mess around with Three.js (<http://mrdoob.com/blog/post/693>) and Processing (<http://zacharymaril.com/>). Use chrome or firefox with the debugger.

Then get bored with frontend stuff and jump into node on heroku or whatever hosting service is popular but has good documentation. Make a chatroom with a lazy bot(zackbot.com) and a static file server. Look into the database bindings. Look at the stuff DailyJS puts out on node(<http://dailyjs.com/tags.html#lmawa> old with bugs, but very in depth for the time). Make something neat (still working on that part).

Read a bunch of Javascript/jQuery blogs. If you learn that way, pick up JS The Good Parts. Read anything/everything by Steve Yegge, John Resig, and Ryan Dahl. Use the jquery documentation from the website, then get frustrated with it and use jqapi.com

But that is all based on one approach. It sounds like you are interested in more backend stuff. Starting out with node would probably be what you looking for, but without much know how of how to make things work, you might not get thrilling enough results to actually stick with it. I would say stick with the frontend to learn how javascript works and where it came from and then when you get really really bored go mess around with node.

<comment><USER2> Oh also use scriptsrc and jQuery UI some. Saves time and headaches.

</comment></comment><comment><USER3> Disclaimer: noob here.

I found this interesting (and perhaps you're ready to unleash the functional programming already)

<http://eloquentjavascript.net/contents.html>

<comment><USER4> Eloquent js was recommended in this HN thread: <http://news.ycombinator.com/item?id=2016334>

Crockford, 2008, _JavaScript: The Good Parts_ received higher recommendations there. Crockford has a js resouces page: <http://javascript.crockford.com/>

I guess from _I'm looking to write well-crafted code to accomplish meaningful tasks on web pages_ you are interested in client side, and from _solve small, on-the-fly problems, much as I currently use Python, AWK, and Bash_ also server side. In that thread I linked to, vladd recommends keeping client-side and server-side js programming apart. To be honest, I don't really get why server-side js is so popular, but in any case, I recommend starting with client side.

 _Aside_ \- I think it's OK to raise this question again, because AFAICS, no one has raised it as an Ask HN post, so this should be more focussed than the thread I cited.

<comment><USER5> Crockford did an OReilly video series that's pretty good at filling in gaps as well.

</comment></comment></comment><comment><AUTHOR> See also: <http://news.ycombinator.com/item?id=2713691>

That's the question I thought I was asking, although the comments here are also useful, so I thought I'd keep them separate.

</comment><comment><USER6> \- Ctrl Alt I

\- Type:

console.log('hello world');

\- install node on your ubuntu box. Then type

node

Which starts node's interactive console. Then type:

console.log('hello world');

again.

Congratulations, you're now a javascript programmer, client and server. Go look up Rebecca Murphey's JQuery guide (it's a good Javascript book too) and continue learning.

</comment><comment><USER7> <http://ejohn.org/apps/learn/>

<http://bonsaiden.github.com/JavaScript-Garden/>

And JavaScript: The Good Parts book as others recommended.

</comment><comment><USER8> JavaScript: The Good Parts by Douglas Crockford is highly recommended.

To accompany it: [http://www.quora.com/What-are-the-most-important-things- to-k...](http://www.quora.com/What-are-the-most-important-things-to-know- about-JavaScript)

</comment><comment><USER9> Eloquent looks like a nice resource. I'd also suggest diving in to jquery pretty quickly since that's what many spend a lot of time in.

</comment><comment><USER10> Do learn Node.js, Coffeescript and JQuery, but don't be dependant on them, they aren't anywhere near as common as say Django.

<comment><USER8> jQuery is vastly more common than Django.

jQuery has something like ~80% market share and is unquestionably the most popular JS library: [http://w3techs.com/technologies/overview/javascript_library/...](http://w3techs.com/technologies/overview/javascript_library/all)

Django, by contrast, is fifth among web frameworks behind some PHP frameworks and Ruby on Rails: <http://hotframeworks.com/>

I'm having trouble finding numbers about Django among Python web frameworks, but my impression is that it's still not as popular as jQuery.

</comment></comment><comment><USER11> Check out John Resig. He's a genius with javascript. He also has a few books.

</comment><comment><USER12> JS has some odd syntax warts so you might want to keep this around for reference.

<http://en.wikipedia.org/wiki/JavaScript_syntax></comment>


Ask HN: Thoughts on Applicant Tracking Systems? - <AUTHOR> Nearly everyone hates their applicant tracking system. ATSes have become these clunky, workflow pieces of software, mostly because they cater to recruiting teams and the compliance/workflow needs of enterprises (every ATS wants/has moved upmarket). It's quite shocking how little true innovation there has been in how companies hire.
The problems are too many to count, but here are two that I find particularly self-defeating when hiring: i) job descriptions that are a copy/paste (and fail to engage any reasonably talented person who knows their worth) and ii) how companies review and respond to applicants. A good ATS should help bring an order of magnitude improvement to this.
Hiring managers today rarely spend the time doing the work of hiring and have outsourced much of it to the recruiter, including something as important as screening/filtering applicants. In-house talent folk/recruiters will put up with these systems because they have to. Early stage and mid-sized companies often don't need much of this complexity.
Hiring therefore has become a painful exercise for all involved, not in the least the candidate. How often have you not heard back on your application? How often has someone dropped the ball on you? How often do you feel you just applied to a black hole?
I'd love to hear your thoughts - especially if you're a hiring manager or in the in-house talent function at a 500-or-fewer person company. What do you suffer from in your current hiring process/ATS? What do you hate (enough to truly desire an alternative)? <comment><USER2> I think that the problem is that everyone sees the hiring market as a zero sum game where there can only be 1 winner. So everyone wants to make scalable, efficient, and generalized solutions for the whole market. I don't think that's the case. Junior engineers and Senior engineers have vastly different problems and preferences to their job search, 10x engineers don't even job search lol, and startups, depending on so many different factors and reasons, want different types of engineers. What exactly makes people think this is a "one fit all" solution? The job market is incredibly fragmented and has way too many edge cases for a single ATS or service. I think that everyone looks at the swe job market as a multi-billion dollar market and in reality it's more like a series of fragmented million dollar markets.

<comment><AUTHOR> I couldn't agree with you more, which is why tools/solutions that try to cater to all and sundry actually end up losing ground over time.

I believe there's room for an ATS that serves a certain niche of the market and nails it.

<comment><USER2> Then I guess go after remote workers, they're gonna grow like crazy

</comment></comment></comment><comment><USER3> I'm in the middle of building an AST with a technical recruiter (I'm an eng) and would appreciate folks feedback/advice.

\- We are modeling the AST after software project management products (eg. Asana, JIRA) where 'tasks' are instead 'candidates'. Specifically, kanban style boards, assigning candidates to recruiters, keeping notes & documents in candidate profiles, asynchronous collaboration, etc.

\- Looking to launch as a freemium product for small recruitment team (down market). Very easy to get started and only pay when you have X number of recruiters in your organization. Model is Asana or Slack.

\- Import LinkedIn recruiter projects

Again, would love feedback/advice so please reach out.

<comment><USER4> This sounds awesome!

Starting with smaller companies for free is a great idea. It instantly differentiates you from everything that exists today.

I'm working on a resume builder[1] and have spent a fair amount of time talking with hiring managers and recruiters. I can confirm that the vast majority of them are unhappy with their ATS — even recruiters.

How do you plan to accept applications? Many of our customers have asked us to build something that prefills the application pages with data from their resume, because they find the applications repetitive and annoying. I realize the applicants aren't you customer, but I'm curious of you have thought about it.

Also, do you plan to support automatic parsing of pdf/docx resumes?

[1] [https://standardresume.co/](https://standardresume.co/)

</comment></comment><comment><USER5> I care about this topic a lot. I think clunky ATSs are just the symptoms of the disease. The recruiting model as we know is mostly broken. Incentives are misaligned. Large companies have lot of red tape. No clear communication between the hirer and the hiree. Recruiters can be useful but they mostly aren't (the good ones are really useful btw).

So instead of building a nice/shiny ATS replacement, I would think about how to come up with a process change in this industry perhaps one bite at a time.

<comment><USER4> Has this been solved better by any other industry? Tech seems particularly bad...

</comment></comment><comment><USER6> I honestly don't see much issue with them. I like companies where everyone isn't just a cog in the system. If the system filters me out when I'm qualified, then there's a culture fit problem.

There's a reason startups are able to compete against companies like Google, and it's because they pay a lot more attention to their recruiting pipeline as well as their product.

</comment><comment><USER7> > in-house talent function

Off-topic, but I hate these little pieces of newspeak that has managed to apparently insert themselves everywhere, such as calling personel "talent".

<comment><AUTHOR> It is what it is...</comment></comment>


Sheryl Sandberg, Jane Austen, and the Queen of Versailles - <AUTHOR> http://blogs.law.harvard.edu/philg/2013/08/19/sheryl-sandberg-jane-austen-and-the-queen-of-versailles/

<comment><USER2> Quite an interesting post -- it's a shame that the anti-link-bait title means it's doomed to stay off the HN front page.</comment>


When Is Cheryl's Birthday? - <AUTHOR> http://nbviewer.ipython.org/url/norvig.com/ipython/Cheryl.ipynb <comment><USER2> Maybe I'm missing something, but the "hard" part of this problem is figuring on the trick. Once you know that, it becomes relatively easy – and you can't use a program to figure out the trick.

<comment><USER3> I don't know, can code like this reason about knowledge-about-knowledge in general?

For example, can a version of the code be used to solve the 'hardest puzzle' -

[https://xkcd.com/blue_eyes.html](https://xkcd.com/blue_eyes.html)

(solution: [https://xkcd.com/solution.html](https://xkcd.com/solution.html)) ?

<comment><USER4> It can.

If you know someone else doesn't know, that just gives you more knowledge you yourself can use.

For the "hardest puzzle", on each day everyone learns that no one was able to figure out the solution the day before. Because of this, a person knows that for a possible number of blue-eyed people to be valid, a person who sees one less blue eyed person than that, must have been unable to figure it out on the previous day.

An Arc/Common Lisp solution I just wrote up: [https://gist.github.com/malisper/80625bcda75c66780f81](https://gist.github.com/malisper/80625bcda75c66780f81)

<comment><USER3> I don't have Lisp, can you link to a pastebin e.g. at [https://ideone.com/](https://ideone.com/) that runs it?

</comment></comment></comment></comment><comment><USER5> I thought this was a great puzzle when I first saw it. IMHO, it is more satisfying to "think through it" without paper and pencil, since it is relatively simple to resolve.

The Python solution proposed is really great, in that it captures both the expressive and functional spirit of the language.

<comment><USER6> >since it is relatively simple to solve

You are overestimating how simple it is.There are more than 1200 comments on the solution on the NYTimes[1] almost all of them arguing that other dates are correct.

[1] [http://www.nytimes.com/2015/04/15/science/answer-to-the- sing...](http://www.nytimes.com/2015/04/15/science/answer-to-the-singapore- math-problem-cheryl-birthday.html)

<comment><USER7> I have to admit, it took me more than 5 minutes to figure this one out, so if this was a test problem, I probably failed. Maybe I am not as smart as I think, but it's probably not as simple as people, including other comments to this post, make it out to be. The trick to the problem is pretty obvious right away, but what tripped me is improper perspective. Reading the comments on NY Times, I think this is the same thing that trips up most people as well.

After eliminating May and June because they have unique days, which is obvious, I got stuck trying to figure out how Albert would be able to figure out the date after knowing that Bernard now knows the date. So I got stuck on July 16, Aug. 15 and Aug. 17 for a while, because I could not figure out how Albert would know the date if he was told August as the month. It took me a few minutes (ok, like 5 or so, more then I care to admit to my self I suppose :) ) to figure out that my job wasn't to figure out how Albert new, but rather to figure out what the answer was IF Albert now knew the answer.

From that it's pretty easy, but it's the perspective that trips most people up.

<comment><USER8> It wouldn't have taken you so long if you had've just been doing logic in a classroom. This isn't a puzzle that was sprung on the students by surprise; it was part of their course.

</comment></comment></comment></comment><comment><USER9> This is just beautifully expressive python. I wouldn't think of using it this way: writing

      return (not know(possible_dates)
              and all(not know(tell(Day(d)))
                        for d in possible_dates))

feels almost zen to me; or at least like Mr. Norvig likes himself some lisp at times.

<comment><USER3> Python: write pseudocode, and then make sure it's indented properly.

</comment></comment><comment><USER10> Here's my quick solution in modern SQL. This is more expensive than it needs to be, but doing it this way lets you see the truth table by commenting out the final predicate.

fiddle: [http://sqlfiddle.com/#!15/0c419/160/0](http://sqlfiddle.com/#!15/0c419/160/0)

gist: [https://gist.github.com/ibejoeb/df57cb34bbe609293d6e](https://gist.github.com/ibejoeb/df57cb34bbe609293d6e)

</comment><comment><USER11> The problem with this problem, the way it was originally put, was the utterly confusing English masked into a logic problem.

Write your specifications clearly, and then it does not become an internationally shared 'problem' to solve.

[I work with insanely documented specifications just like this, year after year. Not putting a problem clearly is not something to aspire to.]

<comment><USER12> Why do you think that confusion over the English description is more to blame than the difficulties many people face with logic puzzles?

<comment><USER11> I do not make a comparison to 'difficulties many people face with logic problems' and did not make an assertion that many people face difficulties with logic puzzles.

Getting back to the article: the problem is worded so badly it should be sent back to the author to more coherently express what they think. Specifications, etc...

<comment><USER13> Or you could learn Singapore English and not demand that everyone translate their work into your dialect.

</comment></comment></comment></comment><comment><USER14> For the more mathematically minded readers, here's a harder version of the problem:

[http://jdh.hamkins.org/transfinite-epistemic-logic-puzzle- ch...](http://jdh.hamkins.org/transfinite-epistemic-logic-puzzle-challenge/)

</comment><comment><USER15> I'd have gone a different way since my setup and approach was a bit different (I took a more visual approach). While this solution is elegant, it's also incredibly hard to do in the real world as it requires far too much knowledge to properly assign the "correct" definitions. It's no different than having a perfect health heuristic land on your lap.

When I did this a while back, my approach was to construct a 5x4 matrix with blanks (5 unique dates x 4 unique months). This allowed the clues to cross off entire rows and or columns until only 1 pair stood standing. Personally, I find the construction of the solution much more interesting than the problem itself given how many people participated.

</comment><comment><USER16> I'd be interested in seeing a solution in Prolog.

<comment><USER17> it was posted here before:

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

<comment><USER18> Thanks

</comment></comment></comment><comment><USER19> My own contribution from last week:

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

[http://opine.me/discovering-a-new-fizzbuzz/](http://opine.me/discovering-a- new-fizzbuzz/)

</comment><comment><USER20> 1\. HN comment about some aspect of fizzbuzz or whatever. Not how to solve fizzbuzz or whatever; rather, some insight into how people solve problems, which is the interesting part of the question. 2\. Two dozen oblivious nerds tell u how to do it in 20 characters of perl

<comment><USER21> Are you offended that people are sharing their knowledge?

</comment></comment><comment><USER22> Maybe someone already mentioned this, but this problem is a simplified formulation of a famous number thoery riddle called 'The Sum and Product Riddle' which is even more baffling. Here it is [http://blog.computationalcomplexity.org/2007/01/sum-and- prod...](http://blog.computationalcomplexity.org/2007/01/sum-and-product- riddle.html?m=1)

</comment><comment><USER23> This is quite disturbing for me. My Aunt's name is Cheryl. Her husband, Bernard. Guess his brother's name!

<comment><USER24> At first I don't know his brother's name, but I know now.

</comment></comment><comment><USER25> Where can I find more puzzles of this flavor? This generated some fun discussion on my Facebook wall.

<comment><USER26> I don't know where to find a general place of more puzzles like this, but here's one I enjoyed:

[http://www.xkcd.com/blue_eyes.html](http://www.xkcd.com/blue_eyes.html)

</comment></comment><comment><USER27> Friend of mine wrote a Scala solution: [http://www.agileatwork.com/scala- solution-to-cheryls-birthda...](http://www.agileatwork.com/scala-solution-to- cheryls-birthday-problem/)

</comment><comment><USER28> If you're puzzling over this you've done it wrong.

There is no inference from silence. There is no humanity in such a question, there is simply the information you're given and the application of logic to narrow down the answers. The Singaporean kids that took the exam knew this and anyone that's ever taken a maths or logic exam should know this.

You don't guess what might have happened from human behaviour because you don't know, you don't look for a 'trick' to give away the answer, you simply use the data in the question to narrow down the possibilities until you can arrive at an answer.

The moment you think "but what if this action could have taken place because if he knew he would have said" you have failed.

And you probably suck at debugging.

</comment><comment><USER29> Couldn't resist. This is the solution ported to C#:

[https://github.com/kyberias/cherylsharp](https://github.com/kyberias/cherylsharp)

<comment><USER30> Funny you say it. I had a go at it as well. Seems like we ended up more or less the same :)

[https://gist.github.com/Cheesebaron/f813576f62dce8391c3b](https://gist.github.com/Cheesebaron/f813576f62dce8391c3b)

</comment></comment><comment><USER31> still looking for solution using RDF/OWL logical reasoning...

the python solution is neat, but i have a feeling that there are tools that are more native to these kind of problems than general purpose programming language.

<comment><USER32> Epistemic logic would probably be the appropriate tool; at least that's what I thought when I first saw the problem. Epistemic logic is the logic of knowledge and belief: you use a modal operator to express the knowledge of an agent about a certain statement. The statement could be expressed in propositional or first-order logic depending on the expressiveness required (but of course there is a complexity trade-off).

Translating roughly from the problem statement (x being the variable holding Cheryl's birthday):

Not(Know_Albert(x)) and Know_Albert(Not(Know_Bernard(x) etc.

Semantically, the possible birthdays correspond to the possible worlds. A reasoner would be able to solve this by process of elimination, somewhat similarly to a constraint-solver.

Resources:

Wikipedia entry on Epistemic Logic: [http://en.wikipedia.org/wiki/Epistemic_modal_logic](http://en.wikipedia.org/wiki/Epistemic_modal_logic)

Fagin, Ronald; Halpern, Joseph; Moses, Yoram; Vardi, Moshe (2003). Reasoning about Knowledge: [http://www.amazon.com/Reasoning-About-Knowledge-Ronald- Fagin...](http://www.amazon.com/Reasoning-About-Knowledge-Ronald- Fagin/dp/0262562006)

I haven't read the entire book, but the first couple of chapters give you an idea and some great examples not too different from this puzzle.

</comment></comment><comment><USER33> Could one use Julia instead of Python?

"iPython" already supports Haskell and Julia kernels too. A iPython Javascript kernel would also make sense given its popularity and its functional inspired syntax.

<comment><USER33> A downvoter confused "iPython", its a "notebook" based (think Mathematica notebook) command shell for interactive computing in multiple programming languages. They already renamed it to "Jupyter" as "iPython" was very confusing name.

</comment></comment><comment><USER34> Unfortunately, there are a number of rather curious, and culturally specific, assumptions one must make about the problem.

The real puzzles are:

1\. "Why did Albert speak first?"

2\. "Why did he speak in such cryptic language?"

<comment><USER35> These are actually valid questions and you shouldn't be downvoted. The standard interpretation of the problem is highly questionable; Albert's initial remark is not actually dispositive to Bernhard, because if Bernhard had the 19 May date he would know the correct answer immediately without needing Albert to say anything.

The suggestion that Albert's first statement necessarily eliminates all dates in May is false, and the answer is indeterminable, as can be readily verified with a Venn diagram. It took me some time to spot the flaw in the problem construction; I initially found the official solution persuasive, but when you think more carefully about it you realize it's actually wholly illogical.

<comment><USER28> If we take silence as indicative of lack of knowledge, then nobody needs to speak.

      Bernard: Silence (he doesn't know the answer)
      Albert: Silence (he doesn't either)
      Bernard: I know it!

Interestingly it then becomes relevant _who was silent first_.

Basically it's nonsense.

<comment><USER13> If you assume Albert and Bernard are identical computers running identical programs, then it isn't nonsense. And that's not just a gimmick , timing analysis is how some side-channel attacks work in crypto.

<comment><USER28> Of course it's nonsense.

If we can deduce the answer from silence then there's no need for any of the information given in the question, it's not a logic puzzle it's bullshit.

I don't assume Albert and Bernard are anything, if you've made assumptions beyond what's stated in the question then you've done it wrong.

And yes, I understand timing oracles.</comment></comment></comment></comment></comment>


Break Up Google for the Public Good - <AUTHOR> https://amgreatness.com/2018/12/17/break-up-google/ <comment><USER2> Another "small government" conservative mouthpiece arguing for breaking up tech companies that disagree with their political opinions. I think the other reasons they give are merely nominal, and not what they care about the most.

Project Dragonfly was shelved due to public and internal outcry. Good! More of that outcry should occur more often. This is exactly what we need to do.

Then it goes on to question Google's refusal to work with the Pentagon. Odd. Pretty poor reason to advocate for breaking a company up. What about legitimate fears of what this technology could be used for?

Google collects a lot of data, so you know what? I don't use Google search, I use DuckDuckGo instead, a secondary option which doesn't track me. You can get by with any Google product that isn't YouTube pretty easily in most cases (Google Classroom exceptions not included).

IoT argument is null, it's not like it would be any better if there were more smaller IoT companies, just means they'd have worse security. Just don't buy particular IoT products if you don't like their privacy policy, and advocate for more privacy protections in them.

Just write anything against big tech companies on Hacker News, your arguments can be anything, it doesn't matter, people will support you.

I don't want to see moral outrage about a company working with China while publishing stuff like this [0] and advocating breaking up Google because they don't want to support a war like this.

[0] [https://amgreatness.com/2018/12/02/america-must-stand- with-s...](https://amgreatness.com/2018/12/02/america-must-stand-with-saudi- arabia-in-yemen/)</comment>


Keyboard Ghosting Explained - <AUTHOR> http://www.microsoft.com/appliedsciences/antighostingexplained.mspx <comment><USER2> I am always amazed that keyboards still do this. We have scanning matrices because back when I was a new engineer pins on a microprocessor were both expensive (larger packages) and they required more gates in the CPU (more expensive CPU) or chip doing the scanning. Today transistors are free and surface mount BGA packages can put down a lot of pads pretty simply[1]. So your typical 104 key keyboard could actually have 104 actual wires that the CPU scanned. And even if you don't want to put down a 144 ball BGA (that is only 12 balls by 12 balls, logic is fast enough that you could connect all of the keys to a bunch of serial shift registers, and scan a complete bitstream of all keys 1000 times a second. Easily matching the reaction times of humans.

So where is that keyboard?

Just to be crisp here, an STM32F429 can have 135 digital I/Os in the 208 quad flat pack. It also has a megabyte of flash and 192K of RAM. It also has a USB Phy built right in so you can just wire it up to a USB connector. Its $8 in 1K quantities in that package. So parts : chip, PC board, 120 or so switches and plastic case and key caps. Sure its more expensive than the $0.75 AVR chip they currently use but we're talking high end keyboards here.

<comment><USER3> Indeed there are now lots of high-end keyboards with no (or effectively almost no) keyboard-matrix ghosting problems. Actually, many of them still have USB- related rollover limitations: it's hard to fathom how someone can design a brand-new USB keyboard with no rollover limitations in the keyboard matrix, price it at $100+, and still not think (or bother?) to implement the obvious multiple-USB-keyboards workaround—looking at you, Razer!—but there you are. Still, you can find ones (like the Sidewinder discussed in the OP) with competent USB, or you can fall back to PS/2 (welcome to the future).

To my mind the interesting problem is how to get NKRO down into every keyboard. I'm sure it's possible with sufficiently clever engineering, but even with an almost-zero cost burden over bog-standard 2KRO this is almost certainly one of those frustrating situations where mass quality is achievable but only if you can get customers and manufacturers to know and care enough.

> Sure its more expensive than the $0.75 AVR chip they currently use but we're > talking high end keyboards here.

Would extra PCB layers would be another significant source of increased cost here?

<comment><USER4> not an expert but:

I was amazed when my Das Keyboard came with a USB->PS2 adapter, and said to _use the PS2_ to get N-key rollover (I think it's limited to 6 on USB.)

I am still slightly amazed every time I remember that the older format is higher spec - although I assume it is something to do with bandwidth on a "serial bus" (especially since most keyboards are forced to run at USB1.1 speed, for some reason).

Anyone who can explain these mysteries is welcome to reply :)

<comment><USER3> I'm not an expert either, but afaik it's not a speed issue, just an issue of compatibility with USB's standard driver-spec-thingy for keyboards: its authors decided that six keys (plus modifiers, iirc) should be enough for anybody, right?

<comment><USER2> Page 59 of the USB HID Spec [1] is the offender, it states:

       The following table represents the keyboard input report (8 bytes).

       Byte Description
       0 Modifier keys
       1 Reserved
       2 Keycode 1
       3 Keycode 2
       4 Keycode 3
       5 Keycode 4
       6 Keycode 5
       7 Keycode 6

Which is where the 6 key roll over comes from. However this is really the minimum implementation so that BIOS'es can use USB keyboards. If you read the spec carefully there isn't anything that says you can't implement a different reporting structure, as long as your HID driver is expecting it. My guess is rather than ship "special" keyboard drivers they just use the standard one, and they opt to use PS/2 connectors which work in the same way (they are really just a serial port and can send as many keys as they want) for the 'corner' case of full n-key rollover.

[1] [http://www.usb.org/developers/devclass_docs/HID1_11.pdf](http://www.usb.org/developers/devclass_docs/HID1_11.pdf)

<comment><USER4> Thank you. So the issue is that Das can't be bothered with coding and maintaining custom drivers for every OS under the sun. I guess that's fair.

Also, I've never actually run into a problem using it over USB on a Mac or PC, so I guess it can't be that bad! (I do play games, but this keyboard goes on my work machine in whichever office that is.)

<comment><USER3> You don't even need to code custom drivers though, you can just present the keyboard as multiple keyboard devices to the host.

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> When developing Flash games this was a personal hell. Many keyboards are unable to process Up+Left+Space, usually meant for shooting at northeast. In this case one of the keys is simply ignored. Worse yet the other directions work, so you get a hard to diagnose bug.

The users end blaming you for their character deaths and the overall experience is frustrating. The best solution I found was to use a different key for shooting, such as left Ctrl, 'a' or 'z'.

If you ever wondered why you can't use the large button on your keyboard to trigger the main action in a game, blame your keyboard manufacturer.

<comment><USER6> Or a small, but significant number of other people's keyboard manufacturers. Welcome to lowestcommondenominatorland.

</comment></comment><comment><USER7> I wonder why they scan the keyboard as a set of columns and rows!! When I was at University, I created a 49 note midi controller from a discarded electric piano keyboard.

Basically I got the hardware and wrote software for a Motorola 68hc11 to control it. The way it worked was that you would put a value on an 8 bit register that would activate one "bit". This bit would be connected to 8 different keys on the keyboard. You would get an 8 bit value out the other end that would tell you which keys were connected at the time.

So for example the value:

01000000

might correspond go keys 1, 6, 11, 16, 21, 26, 31 and 36. If you got the value:

01011001

out the other end, you knew that keys 6, 16, 21 and 36 were pressed. The 68hc11 scanned so fast that you couldn't fool it. I remember my professor standing there for ages mashing the keyboard trying to get it to break with different key combinations.

If such an old microcontroller could handle 48 keys so easily, why the hell would a modern microcontroller not be able to use the exact same method? ie. instead of doing it in "rows and columns" just treat the keys as a linear array and deal with which keys are pressed and which aren't.

<comment><USER8> Your scheme is essentially same as is used by keyboards and has the same problem. When you press two keys that are connected to same output wire, additional keys on these two inputs are ambiguous. There are some software tricks related to the fact that nobody presses multiple keys at exactly same time, but the root problem still exists.

<comment><USER7> But there are no two keys connected to the same output wire at the same time. If I put the value:

00100000

onto the input register, and I get:

01000000

on the output register, that can only correspond to one key at the time I read the register.

EDIT: I think perhaps you're underestimating how quickly a microcontroller can scan a keyboard. If I press 2 keys simultaneously that are both connected to the same output pin on the output register at different times, the rate at which I scan the input register is so fast that it would be physically impossible for me not to detect that as 2 distinct keys being pressed.

<comment><USER8> The problem happens when you press three or more keys at once in right combination. And is exactly the same regardless whether you scan output wires in sequence (as is done in simple hardware based keyboards of the 70's and 80's) or if you read them all at once.

Going back to your original example, if one would press keys 1, 2 and 6 at the same time your microcontroller would falsely detect 7 as being also pressed (because keys 1 and 6 shorts two input wires together). This assuming that your output register drives strong 1 and weak (preferably floating) 0. If it has strong drive for both 0 and 1, then such combination of pressed keys would cause some unpredictable effect, possibly including burning out the pins.

<comment><USER7> Here's a dramatically simplified diagram to illustrate the principle:

[https://db.tt/Fvs0xBpd](https://db.tt/Fvs0xBpd)

If I put a voltage on pin 2, and key A is pressed, I will get a voltage at pin 1. If I put a voltage on pin 3 and key B is pressed, I will get a voltage at pin 1.

It doesn't matter if both are pressed simultaneously because I am reading them sequentially.

All you have to do is scan the keys quickly enough that someone can't "sneak in" a key press in between scans which turns out is possible with even the lowest powered hardware.

<comment><USER9> Ghosting is with three keys pressed: If there is a key A that is in the same row as a key B plus and also in the same column as a key C, then a fourth key (the 'ghost') appears to be pressed in the column of key B and the row of key C due to the shorting of the rows and columns, also in your scheme.

<comment><USER7> There are no columns in this design. The behaviour you're describing can't occur since this isn't a 2d matrix of keys. The keys are grouped such that putting voltage on an input pin will result in an output voltage on many pins depending on which keys are pressed at the time.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> I'm surprised the term "rollover" wasn't referenced here. Is it nonstandard?

[https://en.wikipedia.org/wiki/Rollover_(key)](https://en.wikipedia.org/wiki/Rollover_\(key\))

<comment><USER11> The explanation is for the layman. They probably didn't want to use a technical term.

<comment><USER12> Wouldn't want to confuse the user with references to non-microsoft-sanctioned documentation.

</comment></comment></comment><comment><USER13> It looks like they ripped all those diagrams off from a three-year old Tom's Hardware article:

[http://www.microsoft.com/appliedsciences/antighostingexplain...](http://www.microsoft.com/appliedsciences/antighostingexplained.mspx) [http://www.tomshardware.com/reviews/mechanical-switch- keyboa...](http://www.tomshardware.com/reviews/mechanical-switch- keyboard,2955-6.html)

<comment><USER14> > (Graphics: Microsoft)

Last words on the article

</comment></comment><comment><USER12> Fun Fact: The standard USB keyboard protocol can't handle more than... 6? non- modifier keys being pressed at the same time.

IIRC, to get past this, all you need to do is emulate a hub with fifteen or twenty keyboards attached. Then you can press every key at once!

<comment><USER15> Not true. A USB keyboard must declare the number of simultaneously pressed keys it is able to report. It just happens that the example descriptor included in the USB spec has this value set to 6.

<comment><USER12> 'USB spec'\- so it's up to the keyboard driver your operating system provides to actually set the limit?

And other than that, there's no artifact of the protocol that would hinder the development of such support?

<comment><USER16> Descriptors are provided by devices, not drivers.

<comment><USER12> Sorry, I'm not very familiar with how the usb protocol works- but I meant, that not all OS-provided keyboard drivers support devices with up to 100-whatever simultaneous keypresses, right?

I've seen keyboards with what looked like hardware 'nkro' toggles, and overheard discussions to the effect that many implementations of nkro over usb are sometimes 'unreliable', which sounds like inexcusable behavior on either part of the keyboard's controller, the software driver, or the protocol itself.

</comment></comment></comment></comment></comment><comment><USER17> I wrote a shoot 'em up for PyWeek and I got a report from one of the judges of the challenge saying the controls didn't work very well. I didn't know what was going on at first, because looking at the code it was "perfect", but turns out using the arrow keys for direction and space for shooting was a bad idea because a diagonal movement (up and left) when shooting won't work in some keyboards.

Since then I use z for shooting and problem solved :) Avoid three keys combinations in the same area of the keyboard and it will be fine.

<comment><USER18> Arrows and space are the same area of the keyboard?

<comment><USER17> In my keyboard (an ultra compact keyboard; and apparently in that judge's keyboard), they are.

I didn't know about "keyboard ghosting", but with z (or x) and the arrows it doesn't happen, so I assumed it was because the space key is close to the arrows and because some internals of the keyboard it can't register three keys down at the same time in the same area (but the arrow keys and z works just fine).

</comment></comment></comment><comment><USER19> No, no, no, no. This is all wrong. This is not _why_ ghosting happens. This is _how_ ghosting happens. The _why_ is "because stakeholders are cheap bastards". Manufacturers are cheap. Consumers are cheap. Consumers don't want to pay for quality and Manufacturers won't hire quality engineers.

But there is an even bigger issue: engineers are cheap, too. Once you get a design that "works", for varying values of "work", it's like pulling teeth to get an electrical engineer to change anything.

Some of it has good reason. It's really difficult to prototype new circuits. We can prototype new code as fast as we can write it. Have you ever tried using Eagle? Or LabView? Constantly fighting with a goofy UI to build circuit designs, and then you really only have a simulation at that point. To get the real thing (analogous to compiling?), you have to fab a prototype, which fewer and fewer places are doing in-house anymore, which will take a day, or maybe a week. I compile my software 15 times an hour!

And it doesn't necessarily have to be this way. LabView sucks because EEs are shitty programmers. Every hardware shop I've walked into, I was the guy to suggest they start using such outlandishly cutting edge technology as _source control_. It's been even harder to convince some of the older engineers that no, nobody uses CVS anymore, and the little you remember of it from 15 years ago isn't going to help you anyway.

"Oh yeah, let's write our own atoi(). That sounds like a great idea. What's that? You didn't realize that I'd be sending you a direct copy of what was on the LCD screen? Why wouldn't you want to know that the LCD shows a space in the 10s column between the negative sign and the value when the value is more than -10?"

So yeah. Everyone is a bunch of cheap bastards. I'm not saying it's any better on the software side. Software engineers couldn't be counted on to put a florescent light tube in the right way if their life depended on it. But at least most software engineers try to abdicate hardware responsibility to other people. EEs think "it's just code, anyone can do it."

</comment><comment><USER20> In the high school computer lab, after I showed my friends how to disconnect from the Novell network so our instructor couldn't watch what we were doing, we used to play a very good Street Fighter 2 clone. I quickly learned all about keyboard ghosting and used it to my advantage to block my opponent from blocking my attacks.

When I tried the same tactic on my computer at home, I discovered it didn't have the same problem. The chords that were unrecognizable at school worked just fine on my keyboard at home. I surmised that the difference was in how the keyboards detected the key presses.

Over the next few days/weeks I wrote a program that could actually inspect the key queue in memory and mapped out the chords which would fail. I could actually map out what appeared to be groups of keys that caused this problem. I did the same thing for the keyboard I had at my house and while there were some combinations that would lock up the keys, I found that it could handle many more simultaneous keys.

Maybe it wasn't so surprising that the next year I started my EE degree?

<comment> T-hawk Just wondering, was that SF2 clone Super Fighter, with Pho Huang among the characters?

I did the same thing about figuring out which keys would block my opponent from moving, both in Super Fighter and in the PC ports of the Mortal Kombat games. Didn't go as far as automatically calculating it per keyboard, though. We actually tried to play honestly without using that for advantage, a gentleman's agreement to only press keys for just as long as you needed.

<comment><USER20> Eventually we decided it was cheating too and called a truce to key smashing. That wouldn't prevent us to use it on occasion as a last ditch effort. ;-)

It's been a few years, so I don't remember too much about the game. I only remember it was such a good port that I could learn moves on the clone and that made me a much better player in the arcades.

I also played my share of Mortal Kombat and Doom on those desktops. Mortal Kombat was great because it was actually a port by Probe/Acclaim and as far as I could tell it played identically. That became a valuable skill in college.

Probably my favorite misuse of equipment was from my senior year of high school. I got myself a 486 DX2-50 monochrome laptop and my friend got a Toshiba color laptop. We hooked up Null MODEM cables and strung them out over a couple seat rows and columns. We played Doom death matches in the middle of class lectures.

Having a laptop was unusual. Using one in a classroom, even more so. I don't know if our government teacher thought we were taking notes -- we weren't -- but I don't think he suspected we were playing multiplayer games. Besides, collectively my friends and I had the best grades in the class, so as long as we weren't being disruptive we could pretty much do as we pleased. We were still the only ones who would answer any questions or engage in political debate.

</comment></comment></comment><comment><USER21> > The internal electronics on the SideWinder X4 use a variant of resistive > multitouch technology. Each key has a screen printed resistor in series with > its switch. This allows the internal electronics to read the state of each > key switch independently for very large multiple-key combinations.

This is pretty vague. How exactly does this disambiguate which keys are being pressed?

<comment><USER22> The resistors change the voltage of the resulting signal. So the Microsoft keyboard probably checks whether the circuit is closed and the voltage to determine which keys are actually pressed.

<comment><USER23> The idea is that by using resistors (which are much cheaper than diodes), any "indirect paths" that go through more than 1 switch between the rows and columns will decrease the voltage sensed on those, while the voltage on the ones that go through only 1 switch is higher.

They say they've patented this technology but in fact it's been used for (smaller) keypads with microcontrollers for a long time before that; I remember reading some application notes that showed this technique.

</comment></comment></comment><comment><USER21> (Unrelated to my other post here...)

Aside from gaming, one application that's hurt by rollover is the open source stenotype program Plover:

[http://plover.stenoknight.com](http://plover.stenoknight.com)

I would like to try it, but I tote around a MacBook Pro and I don't care enough about Plover to try to carry a keyboard around and awkwardly put it on top of the built-in keyboard or something. Still, this is one of the few cases where I feel constrained by the unreplaceable hardware.

<comment><USER24> You can make a keyboard pretty small nowadays: [http://technomancy.us/173](http://technomancy.us/173)

</comment></comment><comment><USER25> Microsoft make some of the best keyboards there are. Just did some tests on my Sidewinder keyboard, no issue at all there.

<comment><USER26> Microsoft _used_ to make some really good keyboards. But about 8 years ago they started making junk. The last MS keyboard I could actually type on was the Wireless Multimedia one (now discontinued).

Keyboards in the last few years have had:

\- Mushy key feel. I can't tell when I've actually done a keystroke.

\- Keys that are hard to strike (need to press on them just right, or they hang up or don't register). This is particularly bad on the wider keys.

\- Keytops too close together; I mash multiple keys.

\- Embarrassingly bad features: Function-key lock is the classic one here. Let's not talk about the 'diamond' arrow keys that have occasionally appeared.

I'd buy half a dozen "Natural" keyboards with decent Cherry hardware running the show, ESC in the right spot, and no wacky features. I don't even need a numeric keypad. I'd pay more money for some remapping (though just about any 20 cent microcontroller will have enough EEPROM to do this).

Whaddya say, Microsoft? Care to make a good keyboard again?

<comment><USER27> If you like laptop style chicklet keys (you may not), Microsoft's new sculpt ergonomic keyboard is pretty nice. I replaced my natural 4000 with it recently and found it much nicer on the mushiness scale. It's pleasantly clicky, but not cherry clicky. It even fits in a bag much better due to the detached numeric keypad. The mouse seems a lot better than the one that came with the 4000, enough for me to overlook the lack of extra buttons compared to my logitech G500. My one gripe is the positioning of the period key seems just a little off, something that has taken a few months to get used to hitting without miskeying.

Edit: incidentally, this keyboard, despite being fairly new, only gets 5 or 6 keys on the rollover test at the top of the article

</comment></comment></comment><comment><USER28> I remember having to work around this when I created an arcade stick with the guts of an old PS1 keyboard. I used an Excel Spreadsheet to map the keys and to figure out which combinations of inputs would result in the least amount of blocking/ghosting in practice.

So basically, if you have a two-stick console with 6 buttons for each player, you had to wire it in a way that was impossible for Player 1 to ghost/block Player 2's keys (and vice versa). So when you found a combination that ghosted/blocked, you'd just map them to opposite directions on the same side since it's not possible to press UP+DOWN or LEFT+RIGHT at the same time on a joystick.

Here are some details: [http://arcadecontrols.com/arcade_input.shtml#KeyboardGhostin...](http://arcadecontrols.com/arcade_input.shtml#KeyboardGhosting)

</comment><comment><USER29> This explanation is poor. The keyboard controller and interface are crucial. NKRO is possible, but can it can be flaky over USB. There are many variables involved.

Want to learn more? Hit the geekhack forums (search for NKRO) or geekhack channel on freenode.

<comment><USER30> I wouldn't say the explanation is "poor." The article details one of the reasons behind the lack of n-key rollover. Note how the text explicitly limits the scope of the article.

> Typically, ghosting is the result of one or more of following three > limitations: the hardware can't read the given key combination, the software > on the computer doesn't support multiple simultaneous keys, or the > communication protocol between the hardware and software limits the maximum > number of simultaneous keys reported. The next section discusses in more > detail the hardware design of typical keyboards that limits the number of > keys that can be read at the same time.

The article also links to another page that describes the issue with USB: [http://www.microsoft.com/appliedsciences/content/projects/Si...](http://www.microsoft.com/appliedsciences/content/projects/SideWinderX4.aspx)

</comment></comment><comment><USER31> One of my favourite games - Star Control II had a DOS program to test what keys were not blocking - so two players were able to choose 2x6 = 12 keys in total that would never block.

And then for a while was the craze for finding this good old keyboard (IBM, HP, whatever) that did not block to play SC2 and other games (back in the days multiplayer was divinding the keyboard - to two - and much better fun if you ask me)

</comment><comment><USER32> The ZX Spectrum in 1982 (and I'm quite sure its ancestors ZX-80 and ZX-81 from their eponymous years) had a keyboard just as cheap or cheaper, with a similar matrix arrangement), but had no ghosting at all:

Instead of having an "all hot" electrical configuration, it would cycle through the rows with a "one hot" configuration, and read the columns. If I recall correctly, it would be something like 20 cycles of a 4Mhz Z-80 to read one 5-column row (you'd need 8 of them to read the entire 40-key keyboard), and it was done every 50hz/60hz interrupt by the main CPU - modern keyboards have an ASIC on par or 100 times faster than a Z-80 just for the keyboard.

</comment><comment><USER33> In which cases are such keyboards necessary?

I use a $3 one (which I bought to replace the one I used for over a decade) and I've never had such issues. I use this keyboard for coding and gaming, not just for common tasks which require low performance.

<comment><USER34> I use a Model M and sometimes encounter ghosting. Some types of gaming are worse than others. For example, while playing RTS or MOBA I do not encounter ghosting while playing FPS I encounter it on a regular basis.

This is because in RTS and MOBA while you might be rapidly hitting your keys you should be hitting them in succession, not simultaneously! In the FPS on the other hand you might be trying to walk forward and right while crouching and reloading, which requires four keys to do. This would cause problems for my keyboard.

Programming is more like the RTS than the FPS in this respect. You may be hitting a lot of keys, but the combinations are more likely to involve modifiers such as CTRL, ALT, or shift rather than a combination of letters.

<comment><USER33> Makes sense. I barely play FPSs anymore, but I can imagine the scenarios that you describe, and after testing the keyboard on that site, it's clear that my actions would fail on such scenarios.

So, I take it that anti-ghosting measures are primarily meant for gaming keyboards.

</comment></comment></comment><comment><USER35> I like how they mention keyboard manufacturers using the term _up to_ as a way to deceive customers, and then in the next paragraph mention the same phrase when referring to the Microsoft keyboard.

 _' Another marketing strategy is to state that the keyboard allows "up to" some large number of key presses.'_

 _' Microsoft's SideWinder X4 features multitouch technology that allows it to detect, and report ANY combination of QWERTY keys, up to 17 keys.'_

<comment><USER3> It seems to be largely-non-misleading in this case though, since the Sidewinder can apparently do "[a]ny combination of up to 17 Alphanumeric and Navigation keys" [http://www.microsoft.com/appliedsciences/content/projects/Si...](http://www.microsoft.com/appliedsciences/content/projects/SideWinderX4.aspx) . The only gotcha is that numpad keys share in that same any-17-keys pool.

</comment></comment><comment><USER36> > The next div class="asContentParagraph" discusses

Placeholder fail

</comment><comment><USER37> They fail to address the way they solved the protocol problem (only being able to encode 6 keys in one event).

I'm assuming they went the custom-protocol-extension route, meaning sending more than 6 keys restricted to Windows-only drivers?

Or did they do something else?

<comment><USER38> I'm using the Sidewinder X4 on linux, and the anti-ghosting-feature works even without any custom driver, so I assume they used the "register one keyboard as multiple keyboards"-approach.

<comment><USER39> What does `lsusb` give you?

</comment></comment></comment><comment><USER40> [http://www.renoise.com/blog/crippled-chords-without-full- n-k...](http://www.renoise.com/blog/crippled-chords-without-full-n-key- rollover/)

</comment><comment><USER41> its helpful to understand about keyboard ghosting..</comment>


U.S. demands iMessage backdoor in secret court - <AUTHOR> http://www.zdnet.com/article/apple-in-refusing-backdoor-access-to-data-faces-huge-fines/ <comment><USER2> This article is from five months ago. Was there ever any follow-up to this?

</comment><comment><USER3> Shouldn't this have "(2015)" in the title?</comment>


Show HN: eCommerce microservice - <AUTHOR> https://github.com/digota/digota <comment><USER2> Nice project. It seems to make a lot of assumptions about your online shop, so I guess this works only in the most simple shops. E.g. Your payment provider interface does not have any authorize/capture logic. If I see it correctly you have not included tax or discount logic, which I think is a good move, because those are hellish topics to solve once and for all. For the same reason I am surprised you included so much info on products as I would think that the Microservice would only treat them as abstract ID. What is the goal that you wish to achieve with this software? Selling licenses? Using it for your own shop?

<comment><AUTHOR> Thanks for the feedback ! Indeed it is make few assumptions of what ecommerce is like, key part here is not making room to push any other business logic in ..and Auth/Capture will get supported soon. Tax/Discounts is part or the order-item logic .. letting your app fully control over it. Product has full information just to move that managed logic from apps into digota. the goal is to replace the common ecommerce frameworks with digota as the core.. sass and licenses are an option right now. thanks :)

</comment></comment><comment><AUTHOR> I'm here for discussion about the project..</comment>