One VM to Rule Them All - <AUTHOR> http://medianetwork.oracle.com/video/player/2623645003001/ <comment><USER2> So... can I run Erlang code on it efficiently? (This question also disqualifies LLVM, the JVM, the CLR, etc. When most people say "universal VM" they really mean "universal VM for running mostly-serial code that might at most have 5 or 10 threads, and where killing and restarting the entire VM (to, e.g., spin up a newer version) isn't a big problem for the clients talking to it." This is not future-proof.)

<comment><AUTHOR> You can already run Erlang code efficiently on the JVM: [https://github.com/trifork/erjang](https://github.com/trifork/erjang)

<comment><USER2> I can't tell from the precis whether it supports hot code loading (the JVM doesn't, so it won't without heavy magic); and it definitely doesn't work in a soft-realtime manner ("In Erjang, every node runs on a single heap, and so global GC will sometimes happen.") Without these two things, you're not "running Erlang code efficiently"; you're just running a pretty-useless-for- its-intended-purpose subset of the language.

It's a bit like those benchmarks that show that a language that's a subset of Ruby, performs much faster than actual Ruby. Well, yes, that's nice--but we use Ruby precisely for all the inherently-really-slow parts. Once you add all the slow stuff, and have to check whether to branch to it at every call, your speed advantage stops being nearly so impressive.

Erlang is a painful language to code in; you don't do it because it's pretty. You do it for what the BEAM VM and the OTP libraries give you: the ability to spawn 100k processes representing, say, people's phone calls, or their MMO game sessions, and not drop any connections for something piffling like a garbage collection pass, or a bugfix. I would expect no less of any "universal" VM. (Though I might, of course, expect _more_. It should probably be able to do CPU-bound stuff like large matrix multiplications without dragging the rest of the VM down, for example.)

<comment><USER3> Not knowing much at all about erlang (other than its apparent software uptime), could you briefly tell me how erlang achieves such amazing performance and reliability? Is it due to the way erlang code is written (which is pretty functional looking to me) more than the vm's inherent structure, or a bit of both?

<comment><USER2> Erlang isn't really _performant_ in the way I think you're using the word. It has okay speed, but you don't want to write your game's physics engine in it. On the other hand, its _concurrent_ performance is great--you can load up a VM with tons and tons of processes, and as long as none of them _individually_ are pegging the CPU, the VM will efficiently get them all evaluated.

Basically, the key to this is a combination of Erlang's use of tail-calls as the only means of looping, and the VM's use of what I might call (I'm not actually sure of the name for it) "hybrid budget-based cooperative/pre-emptive scheduling."

Since all loops are implemented as tail-calls, every Erlang function effectively is a straight O(N)-time-for-N-instructions shot that ends in either another call (which either adds, or reuses a stack frame) or a return. This gives the VM the opportunity to _act_ like a pre-emptive machine, while gaining the _advantages_ of cooperative multitasking.

In cooperatively multitasked VMs, where coroutines have to explicitly "yield" to pass the baton, you get a huge advantage: since the instruction-set architecture can be designed to ensure that memory is in a well-defined state whenever you yield, you don't have to do the expensive context-switch thing that pre-emptive architectures do: stashing and unstashing registers, switching out memory descriptors, etc. It can literally just be a jmp instruction.

BEAM is basically a cooperatively-multitasked VM, except that every "call" instruction is also an implicit "yield". (More specifically, it's a "yield if this process has executed >= 2000 call instructions since it received control.") So you get everything nice about cooperative multitasking (you never decode only 0.8 of an audio frame before being interrupted), and everything nice about pre-emptive multitasking (nothing can hog the processor forever[1]), together; thus, soft real-time.

Another place where this design comes into play is in hot code loading. The design of the loader itself is pretty simple: modules are kept in a hash- table, keyed by name. A module is referenced by address on the stack, and in loaded (threaded) bytecode; and by key in unloaded (abstract) bytecode. When you upgrade a module, you just replace the value of the key in the module dictionary. Functions that call other functions in their own module as they're running stay in the previous version of a module; other functions that try to jump into the module--or functions from the module that make a "remote" (fully-qualified) call back into the module--jump into the new version.

This would be a lot harder and more complex, if we didn't have that guarantee that every looping construct in Erlang is implemented in terms of tail-calls. Since they are, we don't have to worry about "interrupting" a process to upgrade it when it still has some dirty state; we can just wait around, and every process will yield after a few microseconds, and we can upgrade it then, when its state is well-defined.

\---

[1] --unless you call into C and that C code does something that takes a million years. This is why people tell you to not do CPU-bound things in Erlang. The semantics of BEAM's instruction-set architecture (and therefore its non-optimal speed) is essential to how it multitasks; you have to insert explicit process-yielding checks in your C code if you want it to be "non- blocking." Or you can write your C code as a "port", which means letting the OS manage it as a separate process--which, if you're writing one global matrix-transformer process or one per-MMO-zone physics-engine process, isn't that bad; but if you're writing a per-user speech-to-text analyzer, you've handed your OS the job of managing 100k real native processes. Better to just write it in plain Erlang, let the VM do its concurrency thing, take the speed hit, and scale horizontally a bit sooner than you would have had to with C. (Erlang is _great_ at scaling horizontally.)

<comment><AUTHOR> Curiously enough, _all_ of the features you've mentioned are doable on the JVM, even without TCO support (I know this because I've worked on implementing them in [https://github.com/puniverse/quasar](https://github.com/puniverse/quasar) – well, except for the "budget-based yield" but that's a minor change). The general idea is that instead of providing the implementation baked into the VM, you inject it into the compiled code using bytecode instrumentation (at load or compile time).

What truly separates BEAM from the JVM is the almost total process isolation, particularly, as you've mentioned, in the case of memory allocation and reclamation. This difference, however, entails tradeoffs – sometimes you'd want the one and sometimes the other.

<comment><USER2> Not so curious; this is the true meaning of Turing-completeness at work (not the pop meaning programmers use in reference to programming languages.) You can always write a virtual machine with semantics Y, that both executes on top of another Turing-complete abstract machine with semantics X, and reads X machine-code--and thus get semantics Y on machine X.

What you've effectively done is to just skip the naive VM-emulator step, and move to the optimization of _dynamic recompilation_ , where you move the state-transitions and additional semantics from the X interpreter, into the chunks of X machine-code it would operate on. You've still implemented a Y VM; it's just distributed throughout the code output by the compiler.

[For the same reason, I'm planning to port BEAM to asm.js. Why? Because _pre- emptive concurrency_ is just an abstract-machine semantic, and you can get it from a non-pre-emptively concurrent platform using the exact logic above. No more callbacks! (If everything that uses asm.js has Web Worker support, though, they could be used as run queues vis. BEAM's SMP support, leaving the UI thread a lot less stressed.)]

<comment><AUTHOR> Well, Yes, but the result still benefits from the JVMs awesome performance with regards to optimizations and memory management, and its terrific monitoring and management tools. So, true, you lose some of BEAM's process isolation, but you gain performance and tooling.

So I don't know if the JVM is universal in the sense that it can provide an efficient implementation for all known or future languages, but it can certainly serve as a very good Erlang VM.

Actually, Javascript is a bigger challenge than Erlang for the JVM. In Erlang there's no dynamic dispatch, while in Javascript you have nothing but. So a different kind of JIT might be better suited for Javascript.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER4> [https://news.ycombinator.com/item?id=6232240](https://news.ycombinator.com/item?id=6232240)

</comment><comment><USER5> So now it isn't only Oracle's detractors equating it with the Dark Lord.

</comment><comment><USER6> Does this mean that we can expect faster versions of the languages laid out in the presentation (Python, Ruby, etc)?

<comment><AUTHOR> To judge by the results they present for Ruby, I assume the answer is yes.

<comment><USER6> This got me excited yeah, but the main issue is always that of the ETA. I do love Ruby, wouldn't use any other language really, but damn would a little speed boost be nice.

And of course I want it for free. Once all the goodness for JRuby, Rubinius and that Oracle stuff get shaken for a long enough time, I guess we should see the benefits in our everyday-coding.

</comment></comment></comment><comment><USER7> I read "Oracle" and "VM" in the title and immediately thought that VirtualBox was going to be OpenOffice/MySQL-ized. I don't know how VirtualBox fits into Oracle's strategy, but I'm glad that they're not messing with it.

<comment><USER8> I read Oracle in the title, and immediately closed the tab.

<comment><USER9> Always good to see such well reasoned technical discussion here on HN. You make a particularly well-reasoned point about the text in the title and how it affects the technical aspects of the VM.

<comment><USER10> Please don't be passive-aggressive, it's perfectly fine to call people out for being narrow-minded and, dare I say, lazy.

However it's hard to deny that there's a very large stigma attached to the name "Oracle."

</comment></comment></comment></comment><comment><USER11> Isn't think supposedly what parrot[1] is supposed to be for? Granted the perl 6 stuff under parrot is practically a laughing stock amongst much of the tech community, but they are trying to make something awesome.

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

<comment><USER12> That was one of the goals of Parrot, but that P6 mess eventually chased off almost all of Parrot's developers:

[http://www.modernperlbooks.com/mt/2013/02/goodnight- parrot.h...](http://www.modernperlbooks.com/mt/2013/02/goodnight-parrot.html)

</comment></comment><comment><USER13> Interesting. Wondering, if the ruby implementation they wrote for demo available? Want to play around with it. How do I install it?

</comment><comment><USER14> ... and in the darkness (of Oracle) bind them!

</comment><comment><USER15> well, to stop people from panicking; in this context "All" means just a few.

It seems they have been building their own CLR.

<comment><USER9> Why would people "panic" if Oracle builds them a better VM or the tools to build a better Ruby/Python/Java VM?

It's quite different to the CLR. The CLR lets you implement any language you like, as long as it can basically be mapped to C# constructs, not that different from the JVM.

What Snoracle is working on is more generic with much higher performance.

<comment><USER16> The CLR supports things that C# the language doesn't. C# isn't the common denominator here, it's just one of the languages running on the CLR (and probably? the most well-known). VB.Net and F# are equals, not to mention all the non-MS languages that exist.

C# isn't special and doesn't represent the CLR's potential. It certainly might drive the evolution of the CLR to a point.

</comment></comment></comment><comment><USER17> In related news, Oracle still doesn't support HTML5. Back to you, pron.

<comment><USER18> Oracle is a database. What features of HTML5 have anything to do with databases? How is this related to the article?

<comment><USER19> he's talking about their website... and oracle isn't just a database company the last I checked. I mean, they make sparc servers. And VirtualBox. And Java.

<comment><USER18> If he was talking about the company, it would be an even stranger thing to say. As we are not talking about a technology the only way it could be interpreted is that Oracle (the company) does not 'tolerate' HTML5 as if they have something against it. If he was talking about another of their technologies he should have said so.

</comment></comment></comment></comment><comment><USER20> What about vmkit?</comment>


How Google uses blacklists, algorithm tweaks and contractors for search results - <AUTHOR> https://www.msn.com/en-us/money/companies/how-google-interferes-with-its-search-algorithms-and-changes-your-results/ar-BBWOCm2 <comment><USER4> Bullet #3: Yes they keep blacklists, I worked on the web crawler for many years. But the article does not understand or differentiate between blacklists for content farms, spam domains, link farms, infinite spaces (that aren't calendars) etc. Blacklists are low level url regexps. In ~2015 some spammer in China overnight created 100 million websites to boost priority and each page had 1000 links. Google saved them all! This will literally crush the web crawler, slowing it by 20000x or more, like a snake swallowing an elephant. Or it will crash the crawler and we'd have to write manual code to cleanse the search logs and add blacklists to keep it from happening again, right away.

Blacklisted domains are blacklisted forever, because they crash the crawler. This happens 1x - 3x times per year. Changes here are all tracked and only owners of the first stage of search (who have no connection to the ranking algorithm) have change rights.

Bullet #5: search quality is assessed by thousands of contractors worldwide and you can become a part of the crawl quality team, although it doesn't pay that well in the USA. The book they follow is 180 pages and available on the Google website for many years. It has guidelines for how to determine sexual, offensive, or illegal (or child porn) content in ALL countries. It has guidelines on how to rank news source reputation and credibility.

<comment><USER5> > Bullet #5: search quality is assessed by thousands of contractors worldwide > and you can become a part of the crawl quality team, although it doesn't pay > that well in the USA. The book they follow is 180 pages and available on the > Google website for many years. It has guidelines for how to determine > sexual, offensive, or illegal (or child porn) content in ALL countries. It > has guidelines on how to rank news source reputation and credibility.

Funny factoid for you: Google hires those guys in Russia through recruiters and innocuously sounding shell companies in Saint Petersburg.

The guy can work for the shell for years without realising that he works for Google.

<comment><USER6> > Funny factoid for you: Google hires those guys in Russia through recruiters > and innocuously sounding shell companies in Saint Petersburg.

> The guy can work for the shell for years without realising that he works for > Google.

Your comment makes this practice sound shady. I don't see how this practice is even probably shady, if the general thrust of you say is true.

First, you have to set up a different company for each country where you're doing business. Second, it's not a shell company if it hires employees or contractors and has clients. Finally, if the subsidiary doesn't engage in your primary business activity you don't call the subsidiary by a name similar to the primary company's name.

It's a very common corporation structure.

<comment><USER5> Well, at one point a recruiting company acting on their behalf tried recruiting me for an ops position. After seeing a few metre long NDA in perfect English, and Russian, and them being extremely tight lipped for whom and what for the job is, it was very clear to me that it was Google given that I knew that the recruiter is one of the few with whom Google works in Russia.

I asked "Google?" It raised their eyebrows, but they said they can't answer that.

<comment><USER7> That's common recruiter behaviour. A lot of them are very afraid of being cut out of the deal.

<comment><USER5> The point is, Google doesn't hire directly there. Officially, they have their Saint Petersburg office closed years ago, and it is "just 3rd party contractor companies" doing things for them there

</comment></comment></comment></comment></comment></comment><comment><USER8> Here are the findings of the investigation, according to the article:

>More than 100 interviews and the Journal's own testing of Google's search results reveal:

• Google made algorithmic changes to its search results that favor big businesses over smaller ones, and in at least one case made changes on behalf of a major advertiser, eBay Inc., contrary to its public position that it never takes that type of action. The company also boosts some major websites, such as Amazon.com Inc. and Facebook Inc., according to people familiar with the matter.

• Google engineers regularly make behind-the-scenes adjustments to other information the company is increasingly layering on top of its basic search results. These features include auto-complete suggestions, boxes called "knowledge panels" and "featured snippets," and news results, which aren't subject to the same company policies limiting what engineers can remove or change.

• Despite publicly denying doing so, Google keeps blacklists to remove certain sites or prevent others from surfacing in certain types of results. These moves are separate from those that block sites as required by U.S. or foreign law, such as those featuring child abuse or with copyright infringement, and from changes designed to demote spam sites, which attempt to game the system to appear higher in results.

• In auto-complete, the feature that predicts search terms as the user types a query, Google's engineers have created algorithms and blacklists to weed out more-incendiary suggestions for controversial subjects, such as abortion or immigration, in effect filtering out inflammatory results on high-profile topics.

• Google employees and executives, including co-founders Larry Page and Sergey Brin, have disagreed on how much to intervene on search results and to what extent. Employees can push for revisions in specific search results, including on topics such as vaccinations and autism.

• To evaluate its search results, Google employs thousands of low-paid contractors whose purpose the company says is to assess the quality of the algorithms' rankings. Even so, contractors said Google gave feedback to these workers to convey what it considered to be the correct ranking of results, and they revised their assessments accordingly, according to contractors interviewed by the Journal. The contractors' collective evaluations are then used to adjust algorithms

<comment><USER9> _Despite publicly denying doing so, Google keeps blacklists to remove certain sites or prevent others from surfacing in certain types of results. These moves are separate from those that block sites as required by U.S. or foreign law, such as those featuring child abuse or with copyright infringement, and from changes designed to demote spam sites, which attempt to game the system to appear higher in results._

Google has a permanent demotion applied to a site I've run since 1996: [http://onlineslangdictionary.com/](http://onlineslangdictionary.com/) . I estimate that my traffic would be 2.5x - 3x what it is now, were the demotion not in place.

These demotions are hidden, permanent, and cannot be appealed. Moreover, these demotions can be performed _by hand_ internally within Google - for whatever reason they choose, or for no reason at all. That is to say, some demotions are manual and not automated.

I have never been _officially_ notified that the demotion exists, in any of Google's available tools or any other way. However, a Google employee checked the internal status of my website and there is, indeed, a permanent demotion in place.

There is no reason for my site to be demoted. This demotion was put in place while Matt Cutts was the head of the web spam team. I asked him about it here on HN, and he lied about it. (I know he lied because of my communication with the Google employee.) You can read my thread with Matt here: [https://news.ycombinator.com/item?id=5408087](https://news.ycombinator.com/item?id=5408087) .

I'd like to make the email chain between the Google employee and I public. But I don't want to ruin someone's career / life, just because they did the right thing and told me about the penalty.

So... I don't know what to do. Thoughts?

<comment><USER10> That thread with Matt Cutts looks terrible for Google.

In it he admits that the site is being penalized for having prominent ads above the fold.

90% or more of Google's revenue comes from presenting prominent ads above the fold.

How is demoting the organic results of sites that use the same business model that it does not the epitome of anti-competitive behavior?

<comment><USER11> Putting ads above the fold makes a site worse for users. This doesn't mean it's immoral, and it doesn't mean it's the wrong thing to do. You are trading of the amount of value you provide and ability to capture a portion of that value. Capturing value can be essential to continued existence of the site, and ability to create more content.

However, Google search is acting on behalf of the users, trying to find them the result that brings them the most value. And everything else equal, that is the one without ads above the fold.

<comment><USER10> The argument that Google is acting on behalf of users is contradicted by the fact that they put their own ads above the fold.

</comment></comment></comment></comment></comment><comment><USER12> Google can't interfere with its own search algorithms by definition. It is their design and theirs alone. The accusation isn't merely wrong but impossible generically.

The whole goddamn point of a search engine is to privledge certain results over another. The claims of armies of contractors reek of the zombie lies of their persecution complex.

<comment><USER13> Sure, you can define algorithm to be "whatever Google does" in this way, but that misses the point: The point isn't that they violate the algorithm, that is just a semantic convenience in presenting the article. The point is that they privilege and editorialize the results in ways they have claimed they do not do.

</comment></comment><comment><USER14> We should rather be fighting for competitive alternatives and looking more at if/where Google uses it's market dominance to stymie competition. That would be a more fruitful discussion IMHO.

<comment><USER15> What alternatives do you all use? I like DuckDuckGo but it still depends on existing engines behind the scenes. There is also Quant and SearX but I haven't used either much.

Surely there is some foss project that has been promising, somewhere?

<comment><USER16> I don't understand why Google's competitors don't form an independent search engine. If I were Microsoft, I'd talk to Apple and others to see if they would help fund a spun off Bing.

The internet badly needs a big alternative search engine that isn't beholden to advertisers or dependent on a single corporate owner.

The benefit of such a search engine (whose main incentive is to just be a good search engine) is obvious for the public, but would also give companies who rely on their own OS leverage against Google.

<comment><USER12> Conflation of want and need aside how exactly - lets assume they have said niche. How are they going to manage to scale funding to actually provide for it while big?

Paid by user search? Discourage curiosity or just using the alternative.

Deep pocketed sponsor? They have the control now.

User donations are the biggest "maybe" I can see which would be not worse but depends upon charity and campaigning to some degree.

<comment><USER16> If you mean "conflation of what customers want and what companies need" that is another way to express "customer focus"

If companies like Apple and Microsoft care about providing a great user experience, Google search is risky. I think users would prefer not to see ads when they search, or worry about Google harvesting their data. If this is so, it might be worth it to fund some sort of independent "search foundation."

I reckon a simple text-only search engine – like Google before it jumped the shark – would actually be quite cheap to develop and operate.

<comment><USER17> I can tell you from experience that everyday users don't care that much about seeing ads. Some even like them. They care even less about the possibility of manipulated results. It's also a really big topic to explain.

Besides the question of the funding of this hypothetical search engine. It being "fair and objective" or even completely transparent about its ranking, would mean it'd be SEO'd into oblivion by everything from click/content farms to trolls to more nefarious actors. As long as many on the internet want to make money or manipulate people somehow it's not really doable in my opinion.

<comment><USER16> Am I doing your comment an injustice if I paraphrase it as follows?:

\- Ads do not adversely affect customer satisfaction.

\- The combined forces of Microsoft, Apple and others could not create a serviceable search engine (despite Microsoft alone having already made one).

If not, let's just agree to disagree :)

<comment><USER17> Ads are looked at as either a nuisance and necessary evil or just a part of how the "free web" pays for itself.

I'm sure they can. And, as you say, MS does already. supported with ads as well unless I'm mistaken. Are you suggesting they offer a search engine and subsidize it. That they offer it as part of their ecosystem benefits, sort of?

<comment><USER16> Yes, that's what I was thinking.

I can't disagree that users tolerate ads, since advertising is the model of plenty successful websites. It's just that, like bundled OS crapware, the user experience is better without it.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER18> Is there research on how to create a distributed search engine ?

<comment><USER19> I'd love to see search decentralized and have been toying with this idea for a while.

The last concept I hacked together was a custom search plugin for Grav and a command line util to use for querying.

It goes like this.

Use the command line util to search a term. The command line util run that term against the search engine _inside_ of the websites CMS itself. You essentially have a list of sites related to a topic that you chose to execute the query against.

I got this working against some sites and the proof is there. But it's obviously highly inefficient and I haven't figured that out yet. :-/

<comment><USER20> One alternative is to run a webcrawler that stores the index in a series of SQLite database files, either by topic or by site, or any other criteria. Then users could download sets of those SQLite databases and run queries on them. Not really completely distributed, but hides some information in the noise of "search sets" and mirrors, and individual queries are run on local. You could mirror the main repository and just run searches on your own server/local. You could also swap the database files with P2P, etc.

</comment></comment></comment><comment><USER8> For those who can't see the article:

>The practice of creating blacklists for certain types of sites or searches has fueled cries of political bias from some Google engineers and right-wing publications that said they have viewed portions of the blacklists. Some of the websites Google appears to have targeted in Google News were conservative sites and blogs, according to documents reviewed by the Journal. In one partial blacklist reviewed by the Journal, some conservative and right-wing websites, including The Gateway Pundit and The United West, were included on a list of hundreds of websites that wouldn't appear in news or featured products, although they could appear in organic search results.

Gateway is trash and I'm not sure what United West is but they can't say they aren't blacklisting political sites at this point. Pretty big challenge for them ahead of the bipartisan AG investigations and 2020 elections.

<comment><USER21> Your assertion is a bit literal. Yes, they can't say they aren't blacklisting political sites. But they can say they aren't blacklisting sites _for being political_.

</comment></comment><comment><USER22> Google has destroyed small business with its monopoly. First search page is all ads on mobile.

</comment><comment><USER23> If you actually read the article most of the statements of fact are about the omnibox autocomplete system, and then they use innuendo to imply some things about search engine ranking. But these are two completely separate systems, and it makes sense that a system that is literally telling you what to type is more sensitive than the search result ranking. It is not a flaw of Google that it won't suggest "is hillary clinton still controlled by the jews" when you type "is hillary clinton". If it was just a big trie of what everyone typed, it would be completely dominated by 4chan troll bots.

<comment><USER24> First, I don't agree with your assessment of the article at all. There are multiple concrete assertions regarding manipulations of the search rankings themselves. I also don't agree that it is somehow "more okay" to manipulate autocomplete results than the search results proper.

Second, I think the big chunk of the problem here is lack of transparency. Google has traditionally been very secretive about its algorithms to avoid tipping off spammers. So if you ask them directly they will hem and haw when in fact they ban spammers and also, as the article reports, they moderate inflammatory content and manually boost rankings of specific websites. The question is - what is the exact scope of these activities? Where is the red line that they will not cross? I think the public deserves to know.

<comment><USER25> What's a site they've manually boosted?

<comment><USER24> > Google made algorithmic changes to its search results that favor big > businesses over smaller ones, and in at least one case made changes on > behalf of a major advertiser, eBay Inc., contrary to its public position > that it never takes that type of action. The company also boosts some major > websites, such as Amazon.com Inc. and Facebook Inc., according to people > familiar with the matter.

Of course the exact nature of changes and boosts remains unknown but that's just underlines the need for transparency.

<comment><USER25> "algorithmic changes" implies the boost is not manual.

<comment><USER26> An "algorithm" still implies human intent. Heck, even a blacklisting system is still a form of an "algorithm." Even if each changes to the algorithms Google have made in the past may be justified, the public can't make an informed decision about it if it's not transparent about what it actually does.

</comment></comment></comment></comment></comment></comment><comment><USER27> imbo - this is fraud on a global scale [1], it negatively affects millions of users and thousands of webmasters, and content producers that do not publish in walled gardens.

I've watched the changes since there was a 'googleguy' and the 'big update was charted with moon phases'.

Since about the time Page started pushing things around it's gone downhill slowly with more and more censoring and less and less transparency.

Google is still benefiting from public trust that was earned years ago, when it was truly doing lots of good around the world.

The lack of transparency about the censoring is a terrible thing for the knowledge of the planet - an entire generation of people are learning truth about life (and the afterlife) trusting google, and being filled with info from youtube. Even the censoring spam filters in gmail are affecting people's lives in the real world today.

I mentioned some of the issues with users not getting transparent info about their searches being censored in a comment here recently: [https://news.ycombinator.com/item?id=21487318](https://news.ycombinator.com/item?id=21487318) (and how I think more web sites need to put notices about the increased censorship of big G)

It's fraud for the all webmasters as well.

"Make a good site, we'll find it and display it. Don't do any SEO, that's evil - just make good content" \- well many of us have spent hundreds of hours making good content and watching others who have less content rank higher.

Is there a blacklist from the time period Matt Cutts was on the spam team and around the time he left?

I heard a rumor that if your site was on one of these 'we caught you' blacklists with a certain googlers name on it - you can't get out of the de- rank jail unless that specific person lets you out.. a shadowban, and public notice to do more work to fix it, and whole while knowing nothing will fix the ranking for that site.

maybe not regardless - but telling webmasters to make disavow lists and spent that stupid amount of time putting them together - and still not putting their sites back into the top 10 (knowing you've crafted the blacklists / shadowbans and tweaked the algo to push them back as well) - that's fraudulent isn't it.

You've made people spend tons of time trying to fix things for google - knowing they were wasting their time and losing money.

I'm guessing the goal was to destroy lives and knock the spirit out of those people who would 'game the google system' \- those evil SEO people should be destroyed.

I'm sure there's a valid excuse - the algo changed - we added more manual reviews - we have this stay in your lane thing, this your life your money thing - you have to have all this other info to be legit -

Is that really what the end user needs when they are looking for entertainment sites? No - it's a sneaky way to put down a bunch of sites to raise up the others.

Then a video comes out - some googlers say, well it is okay to hire an SEO company now - don't hire a bad one or it'll penalize you - you should only hire one that says it will take 6 months for you to rank.

So google keeps saying one thing and doing another - then saying another thing and not doing that.

Webmasters should be able to get details about anyone who has 'manually scored' their site.

In some cases it's not just are they looking for what's in the manual - <USER2> location in the world, their religion, and other factors, could influence how they feel about a site and it being downranked by someone in the Philippines could have drastic consequences for a webmaster in the states, and for all the users who might enjoy that site from Europe.

So the one big G statement said that NOT being transparent is the best thing so bad actors don't take advantage of knowledge of the system - well I believe you are hurting more good actors and more users by hiding everything.

There's even some recent evidence that telling users why things have been moderated actually leads to less problems: [https://news.ycombinator.com/item?id=21513871](https://news.ycombinator.com/item?id=21513871)

[1] InMyBiasedOpinion - and not a lawyer, doctor ymmv yada yada

<comment><USER27> Will the downvoters please comment about what part of these statements you find wrong? I am trying to offer an honest assessment from how things look from the other side of the glass, er bubble.

I put in my comment that my opinion is biased, and I think it is obvious what side of the issue that bias is from. I will add that for a couple of years I had a site in the number one position or top 3 of some cool search results and it was a site that gave the searchers what they were looking for.

For a long time google was good. I even took my love of google and content creation to other businesses in town, got them to make better web sites and even partnered with them to spend more than $100k on adwords over a couple years.

When things are good, they are great, but when cracks start to show - <USER3> algorithm changes to enhance national publishers, there is little help when you discover fraud clicks, customer support is a 'volunteer top poster not a google employee' kind of thing.

as was said at a hearing recently; ""Small businesses cannot survive on the internet if they cannot be found."" \- [https://www.marketwatch.com/story/tech-giants-google- amazon-...](https://www.marketwatch.com/story/tech-giants-google-amazon-and- facebook-accused-of-posing-threat-to-small-business-2019-11-15)

knocking people out of business with hand wavey 'make good stuff, don't do seo' \- knowing that they will be screwed forever and knowing they most likely will never know about the secret manual that some know about and how it actually plays out, it's worse than mean.

imho

<comment><USER28> I have done a fair bit of work labeling and classifying quality of user submitted URLs for a public facing platform (not Google). That includes many hours spent manually inspecting content and deciding whether a site looks "spammy" overall.

[http://weblog.globaladvancedmedia.com/2010/research- before-b...](http://weblog.globaladvancedmedia.com/2010/research-before- buying-web-software-script-security-is-important/)

If I were judging by the first few paragraphs of this entry from your site, I would lean toward blacklisting it. Reasons: typos, grammatical errors, and a general lack of polish and punch in the writing. It looks at least superficially similar to thousands of keyword-stuffed, semantically- impoverished blogs that I have encountered before. The page source contains another red flag:

<!-- This site is optimized with the Yoast SEO plugin v9.2.1 - [https://yoast.com/wordpress/plugins/seo/](https://yoast.com/wordpress/plugins/seo/) \-->

The co-occurrence of the terms "SEO" and "optimized" is almost a good enough signal to blacklist it on that basis alone.

I am not saying that _you_ are personally trying to exploit search or recommendation systems to trick people into visiting your page. There are also two big counter-signals that show me this entry _isn 't_ part of a content farm:

\- You don't link to commercial sites.

\- You don't show ads on the page.

The problem is that there are armies of people churning out "SEO blogging make money fast" content, incorporating ads or commercial links, and spreading it across a multitude of domains. For every blog entry like this one -- unpolished but harmless -- there are many that look textually similar and are purely mercenary.

 _So the one big G statement said that NOT being transparent is the best thing so bad actors don 't take advantage of knowledge of the system - well I believe you are hurting more good actors and more users by hiding everything._

This is where I disagree most strongly. Google already struggles to keep junk out of search results. Process transparency would enable content farmers to evolve more quickly. Thousands of brilliant engineers are not a match for millions of people who pollute the web as a full time job. Some good actors will be hurt, granted. I think that you are badly underestimating the number of bad actors when you say that opacity hurts "more good actors" and users than bad actors.

<comment><USER27> This "typos, grammatical errors, and a general lack of polish and punch in the writing." \- reminded me of something I had considered some years ago...

A time when I read google was ranking edu type sites higher, and blogs lower... I noticed more news sites in top results and mayo clinic types..

It dawned on me that it would be a convenient truth to point to a bunch of 'high brow signals' to justify sanitizing results a bit - and that this would be a slippery slop slide into censoring lots of adult stories and other entertainment, while also playing into the bigger companies that can afford to spend the adwords money.

Could be good reasons for this (less public pressure to remove the porn and such) - could be nefarious, censor the web for users and cater to those who can afford to pay the big bucks, less companies to contend with content questions - while not be transparent to the users and content creators.

This allows big money to influence the results via ads easier, and limits choice - those publishers who spend a lot of time creating content are cast aside, even though one side of the big G keeps saying 'create good content you will soar to the top'.

I think we, er they, big G especially, crossed a threshold of being able to determine intent more often than not and so the need to filter search results for 'how to have sex' and 'watch free sex' for example are different and can be, and should be handled differently.

I know they are handled differently to a degree, I feel it's important to point out that these two different intentional searches should show results even much more different than they are.

The first one would likely benefit from ranking higher sites that meet a lot of the points on the pdf manual checkers document and other factors for trust rank and what have you. However I think the other kind of sexual entertainment searches would actually benefit from not using many of those factors in the ranking process.

I believe you will find many professional sex people do not advertise their address on every page of their site, and many do not use real names in order to make it harder for bad things to happen to these people. For example.

I also think the need for perfect grammar and such is much less when people are looking for erotic entertainment. Millions of penthouse stories magazines have sold over the (pre-internet, get that stuff free via searches from content indexers, years) - and I am pretty sure that if every story had perfect grammar like it was written for a college thesis, that they would not have sold as well month after month for years.

If you combine this with the type of grammar and spelling you see a majority of people using via textual communique - look at Insta, fbk, snap... people expect, engage with, react with, and continue to pursue content that is not grammar and spelling perfect.

I'd go so far as to say that a majority of people in the US at least (?) are actually mostly trying to find more crude discussions and writing styles, and it's a much smaller amount of people searching daily for phd level high brow perfection.

Of course this is different when looking for electrical engineering searches, and even searches for putting together prefab furniture - they are definitely searches where you want things to be accurate and no fluff, no extra personality needed.

Given that I believe this to be obvious to most, and that we do not have the computer systems of 1991 running the search giants, I believe that they know they could provide tons more content that browser reporting behavior would show that people enjoy and are looking for - yet they choose to use some of these trust rank things to censor bigger portions of the net for various reasons.

Hey, I'm a big believer in private companies doing what they want - I just think transparency is seriously lacking with big G - why not be honest about how many semi-good sites are not being shown because google is employing new content filters?

We used to see this chilling effects notices regularly, and some results show that X number of pages or sites are not being shown due to dmca requests... but being honest about how many sex chat sites google use to show in the results, and how they have pushed many good ones down and many more straight out of the index.. we don't see any posts about that.

Sadly, for many people the internet is what google shows it is. I understand there are many in the world who think whatever if on fcbook is the entire internet. Well if things are being removed from these platforms and it's not being understood - then it's a huge disservice to humanity, imho. It's closer to people learning with today's tools may never find Mark Twain and others for they are not perfect in the eyes of the elite.

</comment></comment></comment></comment><comment><USER29> Between SEO gamification, ad spam in top search results, neutered advanced search capabilities, auto correction of search terms based on NN models which are regressing to the layman's mean, and increasing evidence of manual manipulation of search results/autocomplete, Google search is rapidly degenerating into a pile of garbage. Unfortunately their market cap combined with the status as the defacto portal to the internet makes them hard to unseat and DDG isn't quite as good yet.

Give me back the Google of 5-10 years ago, and the rest of the internet from that time, not this ad and blogspam dominated AOL 2.0 joke of a net that we're quickly centralizing into. It's sad to see where ad based economics are driving the net.

</comment><comment><USER30> Good old msn

[https://www.msn.com/en-us/money/companies/how-google- interfe...](https://www.msn.com/en-us/money/companies/how-google-interferes- with-its-search-algorithms-and-changes-your-results/ar-BBWOCm2)

<comment><USER31> Thanks! Url changed from [https://www.wsj.com/articles/how-google-interferes- with-its-...](https://www.wsj.com/articles/how-google-interferes-with-its- search-algorithms-and-changes-your-results-11573823753?mod=rsswn).

</comment></comment><comment><USER32> When it gets bad, I'll stop going.

But right now I am still getting decent results.

I don't use Facebook anymore, yet we had some hysteria about that being manipulated.

<comment><USER33> I don't know about you, but when I search for "python string replace" I'd expect the first result to be the Python 3 documentation for 'string'.

Instead, I get (in order):

1\. GeeksforGeeks

2\. Tutorialspoint

3\. W3Schools

4\. Programiz

5\. Stack overflow

6\. And then, finally, the official documentation... For python 2.7.

How does this happen? Are these sites just paying Google a bunch for the rankings?

<comment><USER34> Honestly, this is because the organization of the Python 3 docs is terrible.

The documentation for str.replace is located halfway down an enormous page that describes every single built-in type in the language [1].

And then, once you manage to find the entry for str.replace, what does it tell you?

 _Return a copy of the string with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced._

That's it. No examples, no link to re.sub or other functions you might want to use for replacement. Stack Overflow or even W3Schools (gasp!) is much better results for this.

[1] [https://docs.python.org/3/library/stdtypes.html](https://docs.python.org/3/library/stdtypes.html)

<comment><USER35> Incidentally, if this is the level of information you are looking for, you can get the same thing by typing help(str.replace) in the Python interpreter.

</comment></comment></comment></comment><comment><USER36> what is the purpose of sharing articles that are behind a paywall?

<comment><USER37> Do you prefer ads or paywalls?

Nobody's ever happy..

<comment><USER18> Ads. The social contract of the web was: link aggregators bring traffic to websites which need views to ad-support themselves. WSJ doesnt need it. (This article is not available on archive.is or anywhere. You actually need to pay to see it).

<comment><USER38> There is no such social contract.

<comment><USER18> thats why RSS and those like/share buttons existed

</comment></comment></comment></comment></comment><comment><USER39> Try this:

[https://duckduckgo.com/?ratb=c&q=autism+vaccine+link&t=h_&ia...](https://duckduckgo.com/?ratb=c&q=autism+vaccine+link&t=h_&ia=web)

[https://www.google.com/search?q=autism+vaccine+link](https://www.google.com/search?q=autism+vaccine+link)

The 3rd result on duckduckgo.com is learntherisk.org. That result is not presented in the first 10 pages of results on Google.

It seems quite likely to me that one of these sites is manipulating search results. Because the organic search results for these two different search engines should not be that far apart.

Edit: Why the downvotes? Here is an even more egregious example:

Try searching for "learn the risk autism".

[https://duckduckgo.com/?ratb=c&q=learn+the+risk+autism&t=h_&...](https://duckduckgo.com/?ratb=c&q=learn+the+risk+autism&t=h_&ia=web)

[https://www.google.com/search?q=learn+the+risk+autism](https://www.google.com/search?q=learn+the+risk+autism)

Note that I am not promoting an agenda here. This seems like an example of manual manipulation. The article sites "vaccinations and autism" as an example.

<comment><USER40> Wait why would duckduckgo be more accurate because a random site called learntherisk.org is present. This is just confirmation bias.

</comment></comment><comment><USER41> Google sucks in many ways. Search results are very curated and filtered to match they agenda.

Advertise ? How it's any profitable for advertiser to have multiple same adverts on page ?

Thruth about Bill gates and Epstein is filtered away..just like hn filter and delete comments :)

<comment><USER42> Daa

</comment></comment><comment><USER43> I can't read the article but unless it's NOT about Google promoting their services on top of others, let me be the devil's advocate and ask:

Are we elevating Google's search engine to public utility status?

<comment><USER44> Same here, but working with that assumption:

Yes. And we might have too I'd say. Given the defacto monopoly they have, I think it is reasonable to agree that they fulfill a public utility function and thus need to be held to a higher standard. This should however be done through regulation, cause that is why we have governments.

<comment><USER45> But other search engines do exist, and it is trivial to switch from Google to Bing or DuckDuckGo. Unlike a social network, you can switch your search engine in isolation without waiting for others to switch.

</comment></comment></comment><comment><USER46> The American people arent this stupid. Its obvious to everyone that the search results are being messed with. Its incredibly arrogant for Google to think they can get away with mass scale information manipulation. Capitalism doesnt work this way, Google search is an inferior product, everyday the opportunity for a competitor to move in gets just a little bit bigger. But the time is not quite here yet

<comment><USER47> > Google search is an inferior product

Inferior compared to what, exactly? I have yet to find a good replacement.

<comment><USER46> Worded that poorly, inferior to what could exist. Clearly too expensive at this point to show up and compete, but I think the time is coming.

<comment><USER48> Isn't literally everything inferior to what COULD exist?

<comment><USER46> No, I think Google search is inferior to what google could produce. By that I mean they tuned their own knobs in such a way that search results are worse than they could be. They are hurting the search results in the name of revenue and bias (political and otherwise)</comment></comment></comment></comment></comment>


Show HN: iOS App Features 12 Turntables and a Microphone - <AUTHOR> http://scratchdisc.com

<comment><USER2> Is it a toy or a serious music app?</comment>


Better than templates, building highly dynamic web pages - <AUTHOR> http://blog.fastmail.fm/2012/02/20/building-the-new-ajax-mail-ui-part-2-better-than-templates-building-highly-dynamic-web-pages/ <comment><USER3> This is, in my opinion, even worse than writing straight HTML in JavaScript. Before I get into anything, I just want to point out that with jQuery, you can do the same thing:

$('
bar
').appendTo('.baz');

I'm not one to condone the over-use of the bloated jQuery, but in this case I sure would.

Anyways, my biggest gripe with this whole thing is the fact that writing any markup in your JS, or anywhere other than an HTML file, is just plain ugly. Beyond that, it's a pain to manage, and totally screws up the whole "separation of duties" paradigm that the web community seems to be quickly forgetting as of late.

Keep your markup where it should be, in your HTML files, because as we all know, HTML is XML and XML is meant to give semantic meaning to data. JavaScript should be a means of transport for data to its relevant structure, not means of giving visual structure to data. Leave that to the HTML and CSS.

Even templating doesn't do it for me 100% of the time and there are better ways. I'm a heavy believer in separation of duties, and any JS programmer should be too. Every time I come across any heavy-handed DOM manipulation in JS I cringe.

As for this article, there's 523637483723526334632 other libraries/frameworks/micro-frameworks that do this same thing, and if you're going to do it, just use what you're already probably using: jQuery. You're probably already abusing it anyways.

<comment><USER4> That jQuery snippet is the best possible way to make your site sluggish.

<comment><USER3> <http://jsperf.com/tmandersondomtest>

The best possible way? Well, that's not true at all. In fact, that was even faster* than whatever method this article was talking about (genDom).

Either way, my point wasn't to say 'just toss it all over to jQuery!' My point was, if you think this technique is cool, you're probably using jQuery and you could've been doing this for years. Years!

Anyhow, this is a huge deflection from what I was really trying to convey. Basically, I don't think this (the 'sugared dom' method from the article) is solving anything. HTML should define your markup and JS should just be filling in the blanks (and not creating them).

*Please note that I do realize my DOM creation was particularly minimal (however, hardly differing from the 'sugared dom' test mentioned in the article) and is hardly a sufficient test. Really, I just wanted to show that you'd have to be doing a ridiculous amount of DOM manipulation to see any significant drop in performance.

</comment></comment></comment><comment><USER5> My browser does 10,000 operations / second with innerHTML, and 15,000 operations / second with DOM. In every ajax application I've ever made, this is negligible, compared to latency, server processing time, and downloading time.

I guess this saves you 1ms for every 30 elements you create? I'm sure there are some cases I'm missing where this might make more of an impact, but from my understanding of the article, this looks like a pretty small improvement.

<comment><USER6> Keep in mind, not everybody is running a desktop browser with that sort of cpu horsepower behind it.

Half of the iPhones ever sold - something like 80 million devices - are pre iPhone 4. There are a lot of low end Android devices on the market _right now_ with worse browser performance than an iPhone 3 (I've got a <6month old Huawei U8110 here as an example). Sure, top-end Android devices compare well against an iPhone4S (I'm pretty impressed with the Galaxy SII I've got here), but the bulk of Android devices in the wild are not late-model-top-end devices.

I had to drop an entire development branch from a project late last year due to insufficient performance of mobile device on-handset ajax. (We fell back to on-server html rendering and innerHTML updates, and even _that_ is annoyingly slow to me on low-end phones.)

And unless you have gathered data showing otherwise, this _probably_ really does apply to you. I was collecting some mobile use data last week - <USER2> ~70 websites that I've got Google Analytics access to, the average mobile visits was 14%, and the peak was just over 28%. This was across a range of markets and a variety of levels of "mobile friendliness" of the web design. (Biggest and probably most obvious takeaways from that exercise: B2B sites are a standard deviation or more below average for mobile visits, personal/leisure B2C sites up to one or two SD's above average. 80+% of mobile visits exit on a page with contact details - a phone# or address.)

</comment></comment><comment><USER7> I remember back in the late 90s that generating content on the browser using javascript was the new and greatest thing.

Personally it bugs me. But I'm 31, a total fuddy duddy.

<comment><USER8> Those were the days. I remember coding in Livescript and debating between implementing stuff in VBScript vs Javascript.

</comment></comment><comment><USER9> I have a problem with this, as it appears to break the separation of concerns.

Don't the programing guru's tell us over and over NOT to mix markup into code and vice-versa?

<comment><USER10> Try for yourself. What the guru's tell you is a heuristic.

When this heuristic fails, you waste lots of time mangling data to fit it into dumb markup instead of writing a simple loop with a couple of ifs.

</comment></comment><comment><USER11> I thought this was going to be about a data binding template system like AngularJS or Knockout. Those are truly "better than templates", whereas this one is questionable.

</comment><comment><USER12> I have a library for this sort of thing (but without the HAML-style # and . niceties :-/) which can also output DOM Elements or HTML (escaped by default) from the same code by flipping its output mode: <https://github.com/insin/DOMBuilder>

The output modes are implemented as plugins, so you can also add other sorts of things, like the template mode I'm in the progress of writing, with template inheritance and the like.

Bretthopper's comment about the readability is spot on, though - you have to start using comma-first pretty quickly or you will go mad getting commas in the right places, and you're never going to get a designer writing these things.

The good thing about it is that since your templates are written in code, it's trivial to share them between client and server - this example app can also be clones and run on Node.js, which uses the same templates to serve full pages when you hit any URL and works as a forms 'n links webapp if you disable JavaScript in your browser: [http://jonathan.buchanan153.users.btopenworld.com/sacrum/fra...](http://jonathan.buchanan153.users.btopenworld.com/sacrum/fragile/fragile.html)

<comment><USER4> That looks pretty cool, but I have to ask... you're using with? Really?

<comment><USER12> Yes, it's perfect for building templates in code based on an object defining your templating API - code which is run once at startup with little or no assignment and no ambiguity between the contents of the context object and anything else, e.g.: [https://github.com/insin/sacrum/blob/master/fragile/lib/frag...](https://github.com/insin/sacrum/blob/master/fragile/lib/fragile.js#L450-482)

You could easily go back and plug in use of a single-letter variable instead of the implicit context object after the fact, but it's nicer to work with while you're building stuff up.

</comment></comment></comment><comment><USER13> Hey man I think its pretty cool, I'm using it to replace my default shorthand to document.createElement. Added a handy dandy outputStrings mode so i can run it in node.js without a dom. Check it out $el is it, plus uses $node for the string output mode <https://github.com/andrewluetgers/loot>

</comment><comment> jarek-foksa The idea that CSS selectors could be used for element creation is awesome. It would be so convenient to write:

        var link = el("a#top.link[src='http://google.com'][data-external='true']")

Instead of:

        var link = document.createElement('a');
        link.setAttribute('id', 'top');
        link.setAttribute('class', 'link');
        link.setAttribute('src', 'http://google.com');
        link.dataset.external = 'true'

Someone needs to bring it to W3C forums, otherwise we might end up with this [http://lists.w3.org/Archives/Public/www- dom/2011OctDec/0020....](http://lists.w3.org/Archives/Public/www- dom/2011OctDec/0020.html)

<comment><USER14> I get that what you're trying to do is keep it syntactically correct javascript, but just in case, have you looked at HAML [1] and/or Jade[2]? Both templating languages that allow you to write HTML in that kind of way. Even less syntax than what you're writing there.

I guess you have the overhead of the template language and rendering them though still.

[1] <http://haml-lang.com/>

[2] <http://jade-lang.com/>

EDIT: Added links.

<comment> jarek-foksa What I'm looking for is a way to easily create single DOM nodes, not a full templating language.

HAML and Jade assume that you have static pseudo-markup defined upfront and you just fill it with data, this approach is not suitable for apps that are doing heavy DOM manipulations (e.g. SVG editor, text editor, sophisticated widget toolkit).

</comment></comment></comment><comment><USER15> The syntax looks very similar to JSONML, which has its own templating thing JSONML BST:

<http://jsonml.org/> ([http://webcache.googleusercontent.com/search?q=cache:http://...](http://webcache.googleusercontent.com/search?q=cache:http://jsonml.org/))

<http://jsonml.org/bst/> ([http://webcache.googleusercontent.com/search?q=cache:http://...](http://webcache.googleusercontent.com/search?q=cache:http://jsonml.org/BST/))

</comment><comment><USER16> This is an interesting approach. One downside is that it's much less readable than the Handlebars template. Using Coffeescript for the "templating" functions would actually clean it up a lot.

<comment><USER17> Would you mind posting a Coffeescript snippet to demonstrate that?

<comment><USER18>
      items = [ 1, 2, 3, 4 ]
      el 'div#message', [
        el 'a.biglink', href: 'http://www.google.com', [ 'A link to Google' ]
        el 'ul',
          el 'li.item', [ "#{item}. Item" ] for item in items
        'There are lots of items'.localise() + '. ' if items.length > 1
        'This is just plain text. ' ]

</comment></comment></comment><comment><USER19> What concerns me about generating HTML clientside is the impact on accessibility (WACG and the likes). How would screenreaders handle these techniques?

</comment><comment><USER20> The DOM is a live object while a string can be sliced and compiled in a function.

If you run a template once, either to generate a form or a simple list, the DOM is faster than innerHTML.

But if you need to repeat a template(loop), use partials or recurse, interpreted DOM manipulations will become a degree of magnitude slower than a compiled function concatenating strings.

Quickly slow enough to loose the snappy effect of client templating.

<comment><USER4> A compiled function only gives you a really fast string creator. It doesn't make the innerHTML call any faster than it is (which is really fast, but slower than the DOM).

You can also use cloneNode to cache frequently reused DOM snippets.

<comment><USER20> The creation of a complex DOM tree(nested loop, partials, recursion) is what is slow compared to string concatenation. The injection time of the string need parsing, and will take a bit longer. But in total less time than DOM manipulations.

I'm trying for a few months now to remove the last innerHTML bits of pure.js and haven't figured out a way yet to make it as fast.

</comment></comment></comment><comment><USER21> On mobile, if performance is really so good, it might make sense – I especially like having references in place – might be quite handy.

</comment><comment><USER22> When I do this, I do it with Kris Zyp's put selector [1]. Creates new elements, modifies existing ones. It's the only DOM manipulation API I like besides jQuery.

[1] <https://github.com/kriszyp/put-selector>

That said, I don't do this very often because the designers I work with prefer templated markup.

</comment><comment><USER23> This reminds me of HAML. I've never really seen the benefit of adding a layer that doesn't really add much onto something that is well-known and thus easily maintainable.

Performance benefits seem mostly irrelevant, as pointed out by others.

<comment><USER24> I didn't see the point of HAML - until I used it. I'm a complete convert now: the syntax is just so superior to being productive in markup for me. In my current app I'm including a small ember app, having to write straight markup for handlebars (hamlbars is a bit awkward) is painful compared to how quickly you can produce markup with HAML.

Personal preference of course, but to me the difference is night and day in terms of my productivity with producing markup.

<comment><USER23> I guess the thing for me is that my HTML is usually simple enough that there isn't significant time spent writing it.

So I can see there could be productivity gains, but I don't see they would be sufficient to justify the technical debt in introducing a new syntax.

<comment><USER24> I seriously think you're overstating the technical debt incurred by HAML. The docs aren't the best - they cover stuff, but are hard to navigate sometimes - but the actual language has a very shallow learning curve in my experience picking it up myself and bringing front-enders up to speed with it when I work with them on projects.

<comment><USER23> Oh, sure, learning it is pretty trivial if you know CSS. But there are a lot of hidden things, like cutting + pasting snippets of code from the Text Editor to/from the browser/jsfiddle/wherever, providing code samples on Stack Overflow, etc etc etc etc.

I think they made the right call when they went SASS -> SCSS for these kind of reasons. I know that coverting CSS blocks into the equivalent SASS was one of my least favourite things :)

</comment></comment></comment></comment></comment><comment><USER25> It's worth mentioning that CoffeeKup lets you write HTML templates in CoffeeScript: <http://coffeekup.org/>

</comment><comment><USER26> I have a prettier implementation: <https://github.com/nathansobo/space-pen>

</comment><comment><USER27> I'm just excited to have ajax on <https://beta.fastmail.fm> now.

</comment><comment><USER28> That code smells funny.

</comment><comment><USER29> i distrust any 'template system' that involves in putting a html tag name, classname or id in the code I use to drive it.</comment>


Why Every Linux Application Known To Man Will Be SaaS Soon - <AUTHOR> http://blog.jamesurquhart.com/2008/08/why-every-linux-application-known-to.html <comment><USER2> The problem with SaaS is that the GPL offers me no rights in that instance because they aren't distributing and the GPL only comes into effect when a copy is distributed. Whether or not you believe in free software, you can see how the effectiveness of the GPL to fend off close-sourcing is diminished by SaaS. Anyone can take GPL-licensed software, modify it and offer it as SaaS without opening up that changed code.

<comment><USER3> If this gets to be a problem I imagine people will just go with the affero gpl. GPLv3 and AGPLv3 are mutually compatible.

I remember reading some Eben Moglen & i think he mentioned that they didn't hardcode this into GPLv3 because the rights of someone using an ATM are (should be?) different from those of someone owning the machine with the code.

<comment><USER4> Oh, the ATM is a good example. For a user-oriented website though, I think the Affero licenses are a good idea if you care about Free Software. I personally don't see a whole lot of difference between logging into a mainframe system using a terminal, and logging into "the cloud" using my web browser.

</comment></comment></comment><comment><USER5> This article seems like a big bubble of hype without much substance. Skip.

</comment><comment><USER6> Which are the "every Linux application known to man" that could be offered as SaaS and get someone to pay for it? I can think of none.

<comment><USER7> I guess that means my startup idea of offering `ls` as a web service is bound to fail, then.

<comment><USER8> How about ed?

<comment><USER8> ?

</comment></comment></comment></comment><comment><USER9> Hmmmm. Perhaps I should have been more clear. Not necessarily applications that are part of Linux, but the applications built to run on Linux.

\- Mule \- Sugar \- Scalix \- etc.</comment>


Earn IT Act threatens end-to-end encryption - just-juan-post https://nakedsecurity.sophos.com/2020/03/13/earn-it-act-threatens-end-to-end-encryption/ <comment><AUTHOR> It's not just encryption - although that might be the main first target. It's any conditions all that the government might arbitrarily decide to impose as "best practices".

I think anyone who's worked in IT long enough knows that 'following best practices' is a euphemism for 'do it my way or else'.</comment>


Ask HN: What is Quora doing right? - <AUTHOR>

Quora seems to get talked about a lot, and seems to have many influential people as members.
What is it doing right? How did it get all those influential people to sign up to such a new website?
Bonus question: How are they planning on making money? <comment><USER2> They are providing something that people want: answers (not written in text speak) to interesting questions. As to why they appear to be getting so much traction to a problem already solved by several sites (Reddit, MetaFilter, StackExchange, Googling), I'm not entirely certain. I suspect the answers market is just _that large_ , and though I haven't followed them much, there must be some key (or controversial) people involved helping them. Never underestimate the buzz that human drama creates.

</comment><comment><USER3> From the inside Quora doesn't look to be very big. Maybe its because I don't have a network within Quora, but browsing topics is kind of difficult. There doesn't seem to be much involvement outside of topics regarding Startups, Business, Technology, etc.

</comment><comment><USER4> How has quora done so far? Would they consider themselves a huge success, mild success, etc?

</comment><comment><USER5> Quora itself has a bunch to say on this:

<http://www.quora.com/Why-is-Quora-a-valuable-service>

<http://www.quora.com/Why-Users-Love-Quora>

[http://www.quora.com/How-did-Quora-manage-to-do-what- Mahalo-...](http://www.quora.com/How-did-Quora-manage-to-do-what-Mahalo-and- Yahoo-Answers-couldnt-which-is-getting-such-high-quality-questions-and- answers-on-their-site)

[http://www.quora.com/Why-is-the-quality-of-discussion-on- Quo...](http://www.quora.com/Why-is-the-quality-of-discussion-on-Quora-so- high)</comment>


Show HN: Interactive guitar scales diagrams - <AUTHOR> https://grunfy.com/scaler.html <comment><USER2> Professional guitar teacher here.

I had to look for a few minutes myself before this started making some sense. I'm sorry to say that I can't feed to this to my students as it is.

On one hand, it's extremely information dense. All the colors! On the other hand, it seems to lack crucial information that might make it worthwile.

Sorry if that sounds very negative. I do appreciate the effort a lot! And I di see potential to use a further evolution of this in my teaching practice.

P.S. One hint for a small/easy update: include French style note names as an option. They're in use in quite a few more places than you'd think...

<comment><USER3> Self-taught (shitty) guitar player here.

The diagram made perfect sense to me. In fact, I sketched a diagram like that when I was practicing playing every scale in every position. First I noticed that each pentatonic scale shape has 2 minor third intervals and 3 major second intervals on five strings (sixth string is always the same as first) and they kind of "loop around". And if you put the five possible shapes side to side in a certain order, they also form a loop. And then I extended that looping pattern to septatonic (major/minor) scale. I don't know if I'm making any sense right now, but it made me instantly memorize all the scales in a way that wasn't explained in any of the guitar tutorials on the Internet I've seen. Until now, I guess.

<comment><USER4> Sounds like something described here? [https://www.guitarmasterclass.net/guitar_forum/index.php?sho...](https://www.guitarmasterclass.net/guitar_forum/index.php?showtopic=52237)

<comment><USER3> For septatonic scales I use the following mnemonic: there are 14 notes in 2 octaves and they are distributed among 5 strings. 14=4*3+2 so there's one string with 2 notes and 4 strings with 3 notes. And it always goes like

OO-O

OO-O

O-O

O-OO

O-OO

The semitone steps seem to "gravitate" towards the 2-note string. So just loop this pattern around and you get all possible septatonic scale shapes (modulo the offset caused by shorter distance between G and B strings). Also the second note of the two-note string is always a minor scale root.

</comment></comment></comment></comment><comment><USER5> Nice work. I like it.

Some suggestions:

* Can we have an option to show the note names (A, Bb, B etc.) instead of the relative scale positions? Crucial for learning the actual fingerboard notes IMO. You may already have it there, but I may have missed it. (Ability to toggle between the two would be fantastic).

* Fingerboard markers are not as obvious as I would like. I was looking for fret numbers actually, and then eventually noticed you had fingerboard markers - but the light grey make them hard to see. (And what to the black/gold dot markers denote?). I am used to seeing bright, consistent fingerboard markers on my guitars.

* Having stared at guitar fretboard for > 40 years from all angles, I always have a hard time when I see fretboard diagrams with constant spacing between the frets. Makes it harder for me to visualise exactly where it is on the neck that I need to start. May I suggest an option to show a scaled neck (doesn't have to be exact, just an approximation of wider spacing at the nut and narrower towards the bridge) just so it becomes easier to relate the position to an actual guitar neck? (Also make the 12 fret really REALLY obvious so you know where the repetitions start).

But aside from these, I think this is brilliant and I have bookmarked it for future reference.

EDIT: Scratch my first suggestion above :D - I see you already have a note/position toggle along the bottom!

<comment><USER6> Great idea about freeboard scaling!

</comment></comment><comment><USER7> I'm a self-taught moderate guitar player and I feel like this is really cool, but I don't understand any of it. Can someone explain how to read this, and what to do?

<comment><USER8> Let's give it a shot.

So first I have marked "Pentatonic Minor" and "A" as our key since this is probably a scale that you know. What you are seeing are all the notes in the scale laid out on the fret board.

If you look at fret 5 (second dot) and starting from the E string you'll see a red dot with a R in it. This is the "Root" of the scale, namely A. The next note is on the 8th fret and has a "b3" in it. You read this as "flat third". If you don't know music theory this might be confusing so please let me know if I've explained it in a non-understandable way.

To understand why we say "flat third" is that it is the third note in the _Major_ scale lowered half a step (or one fret on the guitar). So the A Major scale is A B C# D E G# G#, the Pentatonic Minor scale takes 5 notes from this scale, namely A(R) C#(3) D(4) E(5) G#(7) (original indexes in parens). We then lower the C# third note, and the G# (seventh note) so we get the scale A C D E G and those notes are what you see over the fret board.

<comment><USER9> I had understood what the diagram means, actually I have most of this information internalized... not a great guitar player, but I know the theory.

What I don't understand is what can I do with it. What's the typical way of _using_ it?

<comment><USER10> > What's the typical way of using it

I mentioned elsewhere in this thread, I have been building a similar app so I can speak to my use case. In my case I'm building it because i have been trying to learn how to play in a more improvised way. I have been playing guitar for a long time, but have always been a chord-strummer, usually just kind of sing-and-play, more recently has gotten in to more advanced finger- picking "fingerstyle" patterns, but have mostly never strayed far from the bottom 4 or 5 frets because I'm just playing open chords or the odd barre when I need to. My goal now is learning more of the fretboard, learning to play "lead" a bit more, or just experiment with recording multiple tracks, jamming over a song or a looped track, or play with a friend.

Typically what my approach would be is to come up with a chord progression in a particular key, say A Minor. Then if I want to solo over top of it I need to stick mostly to the notes of the A minor scale. So the notes in the A Minor scale are just the natural notes, A B C D E F G, that's easy, but visualizing where they are all across the fretboard is not obvious, so hence the app to help with this. In taking lessons I have learned about the various fretboard "boxes" and having a visualization like this app can help you see how the different box patterns all fit together.

Another aspect that this has helped me with is visualizing chords at various places on the fretboard: if you have a song in A minor with a typical chord progression, say A-minor, D-minor, E, then your goal when you are soloing or improvising on top of it is to try to hit notes that are within the current chord, not necessarily all of the time, but to emphasize those notes and usually land on these "target notes" at the end of a phrase. These "target notes" are a subset of the A minor scale, and that subset changes depending on where you are in the song.

So being able to visualize the shapes of those chords and how they fit in to the different box patterns is important. Knowing all of the chords not only in their "open" positions but the myriad of other positions that they appear on the neck is a bit of a challenge, and I find that having a visualization tool like this can be a nice reference.

<comment><USER9> Now I understand. I use other tricks to do the same thing, so I didn't see it before, thanks.

</comment></comment></comment></comment></comment><comment><USER11> Love this. As someone who has been playing casually for years with a few attempts to use scales and music theory to up my base understanding, this is something I could see myself using a lot.

Having some labels or explainers for the different toggles would be helpful.

<comment><USER12> +1 for text explanations.

I have a decent internalized understanding of western music theory and it's application on guitar but it seems like it would be a pain to try and decode the meaning of all of the colors, polygons and icons. Even if I did spend significant time on that, I fear I'd still be left wondering if I was missing some of the insights you might be trying to convey.

For the time being, it might be useful to just provide a key/legend where each term links off to some third party site that already has an explanation of the respective term.

Also, it'd be good to explain what the different views are good for. E.g., what's the difference, when viewing A-minor pentatonic, between the scaler view vs the pentanizer view?

FWIW, I'm on a moderately aged Android phone. If there's more to the desktop experience (e.g., hovertext?) it'd be good to add a note saying so.

<comment><AUTHOR> Thanks for the feedback. I'll add help files and explain scaler/pentanizer differences. Scaler is "traditional" way of learning scales, but I think pentanizer makes more sense...it just needs to be explained bit more. My main focus right now is to introduce print possibilities. I am just bit tight on time right now.

<comment><USER13> Could you say a little more? I think I understand the "scaler" and it's how I learned the scales and how I practice, but I'm curious what the pentanizer is suggesting to do. Picking a root and an interval and finding it all over the fretboard?

<comment><AUTHOR> This may help: [https://www.reddit.com/r/Guitar_Theory/comments/8c1s9i/penta...](https://www.reddit.com/r/Guitar_Theory/comments/8c1s9i/pentatonic_shape/)

There is a youtube link video link included which explains the concept.

<comment><USER13> That's pretty awesome - I hadn't seen it before. Thanks for the link!

</comment></comment></comment></comment></comment></comment><comment><USER14> Pretty cool! I made something like this a few years ago, but nowhere near as sophisticated. One suggestion: as of late I've been playing guitar in perfect 4ths tuning, and it would be helpful to be able to change the tuning of individual strings on your tool to enable that (and any other alternate tuning)

<comment><USER15> What kind of music do you play and how do you like the new tuning so far? Were there any unexpected difficulties or benefits?

<comment><USER14> I would be hard pressed to come up with a coherent genre for what I play, I guess it's really a hodge-podge of everything I've been exposed to musically.

I like it a lot. I'd say I play 95% in P4 now, after starting about 3 months ago. I keep another guitar tuned standard right next to it, and find myself reaching for it less and less the more I get used to it. If you know standard tuning well, most of the work is just a matter of reprogramming your muscles.

The biggest trade off is that all your open and barre chords are gone (there are open and barre chords in P4, but many of them are hard to play and none of them are straight equivalents to what you have in standard--the other side of that is that some unusual chords are now easier, so it's a good way to experience a different flavor), so if you play music that relies on those you have to make a big adjustment. That can be an opportunity, since now you have to get creative with how you play. A chord over 3 or 4 strings doesn't sound as huge or sparkly as an open chord, for example, but it can be interesting in its own right and of course it also opens up some sonic room if you're into layering many parts together.

The biggest gain is that the scales and chords you learn are now always the same without that b-string bump. A lot of things just have less mental overhead now. The benefits sound less tangible than the drawbacks, I know, but I think it's worth a try. It's pretty easy, just tune your two highest strings up a semitone. And easy to go back if you hate it, of course.

</comment></comment></comment><comment><USER16> The blues scale should somehow indicate that the flat 3rd needs to be bent up to get that blue note from West African music that sits between our flat and natural thirds in western tonality. It's absolutely necessary to get a real blues sound.

</comment><comment><USER17> I'm quite familiar with the music theory behind all of the scales, having played instruments for over 30 years, but I'm not finding the information display or interface to be very intuitive.

<comment><AUTHOR> could you be any more constructive, I mean, which parts are confusing / none intuitive?

<comment><USER17> A couple issues/questions on desktop:

\- the hover effect makes the lighter color buttons seem to disappear, especially once pressed

\- I have no idea what the R button does or why

\- pentatonic major is an uncommon scale and odd choice for default - pentatonic minor might be better, or just major

<comment><AUTHOR> R marks "relative" major/minor, for example: A minor pentatonic is relative to C major pentatonic (contains same notes/shapes, just root note is different). I can/could change defaults, but, all your presets should be saved between the sessions (your next visit). I am in the middle of making some interface changes, hopefully buttons will behave better after it. Thanks for feedback.

<comment><USER17> You're welcome, i may have some more feedback.

One thing I want to mention is that tool tips or other onscreen help would be useful.

<comment><AUTHOR> I was thinking about tooltips but those are tricky to implement for mobile devices (although I haven't spend much time making it usable for small screens/devices)

<comment><USER17> True, i didn't notice the lack of hover tips until I used the desktop. But if it's oriented towards desktop, might as well put them in?

</comment></comment></comment></comment></comment></comment></comment><comment><USER18> First, it must be said that this is super cool, and I love it so much!

I've got questions...

1\. What is the relationship between the bottom colored dots and the colored notes? I'm looking in the "scalar" tool, key of C. It looks like the bottom dots are for coloring a cross-fretboard position. I would have expected the red bottom dot to mark the position from C on the 8th fret for all the scales, as it does for pentatonic minor to dorian. However pentatonic and blues major are on the 5th fret position, and major is in open position.

2\. The pentanizer, what is it? I also don't understand the relationship between the colored and numbered dots and the fretboard coloring. The UI has a strange way of switching the numbers if I switch the scales. E.g. select pentatonic major, red dot, and 1 dot. Then switch to pentatonic minor, and it auto-switches to 5 dot. Overall, it's pretty disorienting the relationship between these design elements and the scales. Or I've fundamentally misunderstood the tool.

3\. What tools did you use to make this? Will you open source?

Thank you, you're really killing it!

<comment><AUTHOR> 1\. Bottom colored dots are connected to shape colors, nothing else. Those shapes are often (in guitar literature) referenced by number, 1 to 5 (e.g. pentatonic shape 1), I decided to use colors 2\. Pentanizer is adding interval colors. It splits "scaler" shapes into 5 micro interval shapes. It is explained in [https://grunfy.com/updates.html](https://grunfy.com/updates.html) section and this video might help to understand the concept: [https://www.youtube.com/watch?v=H3DCpJlGQFA&feature=youtu.be...](https://www.youtube.com/watch?v=H3DCpJlGQFA&feature=youtu.be&t=126) 3\. I use some own JS on top of [http://svgjs.com/](http://svgjs.com/) library...I'll need to cleanup things and make it somewhat "stable" before opensourcing it.

</comment></comment><comment><USER19> I like your work, it looks and feels awesome.

However, I would argue that you should be very careful while using it. And here's why.

I've been playing guitar for 10 years, and I had two teachers, one of which was a blues/rock/jazz improvisation teacher.

I used to draw scale diagrams, and use some pre-drawn diagrams as well. But for some reason I could easily improvise cool melodies in pentatnoics, but I had hard time with all other scales.

I stopped trying to learn improvisation despite my teacher's desperate attempts to make it work for me.

And then I found [https://www.youtube.com/watch?v=OkaqfgSqtHg](https://www.youtube.com/watch?v=OkaqfgSqtHg)

It's a short video by Guthrie Govan, easily one of the best guitarists in the world.

And what he says that conventional method of learning scales is bad.

Essentially, what he offers is to learn to add notes modes to pentatnic scales.

And now I use that approach, and my playing is much more melodic and musical. It's a pity that I found the video way too late.

</comment><comment><USER20> This looks amazing! Just started studying intervallic improvisation and this will help alot! do you have any plans to add support for alternate tunings or let the user to modify the tuning (like this tool: [http://fretviz.com/](http://fretviz.com/)) ?

</comment><comment><USER21> Very nice!

To anyone wanting to break out of that "locked-in" and boxy style of playing both scales and chords, I suggest listening to how Allan Holdsworth approaches arrangement.

His books/instructionals are amazing. Completely changes your perspective on how to build chords and how to play scales over them.

</comment><comment><USER22> +1 for using SVG. It looks awesome.

Are you using some SVG library or making it "by hand"?

<comment><AUTHOR> I am using [http://svgjs.com/](http://svgjs.com/) It's very lightweight but doesn't have much features though.

</comment></comment><comment><USER23> This is amazing! Looking at this I learned and realized a lot of patterns that I never really considered before.

One thing about the UX of it - because you haven't gotten enough feedbsck on that already; a demo of how the scales work would be cool. E.g., perhaps on first load, the scales could play for one section automatically starting from the bottom string and then going up. Then I think people could realize what the dots represent, the colors, and how it all ties together.

Well done! I'm curious to know how all this works from a math/theory perspective, but not curious enough to get in over my head :)

</comment><comment><USER24> This is quite cool, nice work! I'm a self-taught player and only in the last five years or so have I managed to punch through the fog and begin to understand what I'm doing. This is a great tool for visualizing scale positions and finding roots. I use smartchord on my phone, but this is a much more accessible reference when playing. +1 for including the Martin serial number lookup, although I already knew my D18 was built in 1974 :).

</comment><comment><USER25> As someone who stopped trying to learn guitar around middle school, I'm totally lost. Must make more sense if you're well practiced, I suppose.

<comment><USER26> I'd say I was reasonably well practised and this still makes no sense.

</comment></comment><comment><USER27> Very nice! Love the large collection of scales you have (750!) Do you have them all hardcoded or does the site generate them from base principles / interval patterns?

For those that may want a more random experience while practicing, I made asciitabs.com a few months ago. Not as polished or full-featured as machak's site but would likely appeal to the same audience

</comment><comment><USER28> Here's a thing like this I made for violin/viola/cello scales, when I was learning music theory a few years ago.

[http://osteele.github.io/fingerboard/](http://osteele.github.io/fingerboard/)

</comment><comment><USER29> It's beautiful but as a fairly experienced musician, I think it's a bit information dense with all the symbols and letters. The aesthetics are great but I'd love maybe some slimmed down information.

</comment><comment><USER30> I think I'm missing the Phrygian scale could we add it? Great stuff btw.

<comment><AUTHOR> I'll add more scales in the future, for time being you could check [https://grunfy.com/modenizer.html](https://grunfy.com/modenizer.html) It has different coloring, but you can use 1-5 shapes to "dissect" it

</comment></comment><comment><USER31> Very useful! If you could also add note sounds, that would be amazing!

</comment><comment><USER32> This looks fantastic. Though some labels would be nice. It's difficult to find out what all the colors and the numbers mean. Adding an audio library would be a nice addition.

<comment><USER33> R is the Root note of the scale while the numbers are notes in the full scale. A pentatonic is a regular major/minor scale with 2 notes removed. The blues scales are the pentatonic with one note added. The colors are simply a way to highlight a geometric pattern - learn to play the patterns (and bounce around within them) and how they chain together to form various scales over the whole neck. Explaining some of these things is more of a theory lesson than something you can just add a few labels, and the colors for the patterns don't have actual names at all AFAIK.

I agree this could be expanded on in some ways.

Edit - wait, the colors are not just patterns, there are common chord forms that fit over them as well.

</comment></comment><comment><USER34> Very nice! It might be nice to have (at least as an option) the fretboard narrow the distance between frets as you go up the neck, like a real fretboard.

</comment><comment><USER6> It would be great if you could use the same "engine" to make similar tools for other stringed instruments: bass, ukulele, banjo, cello, violin, etc

</comment><comment><USER35> Very nice. Small suggestion: make guide dots positions like on real guitar. Specifically, on 9th, 12th, and 15th frets instead of just odd frets.

</comment><comment><USER36> This would be a lot more accessible if you could 'strum' the strings with the mouse cursor while you had different chords selected.

</comment><comment><USER37> Good stuff! Any plans to add arpeggio patterns?

<comment><AUTHOR> added to my .plan (stay tuned;-)..no pun intended)

</comment></comment><comment><USER38> Very cool. It would be nice if I could pick a list of my chords and switch between them with single mouse or keyboard click.

</comment><comment><USER39> This is fantastic. I am eternally lazy about mapping out scales. This makes my guitar life easier. Great job!

</comment><comment><USER40> Damn I'm not seeing anything other than the navigation and a red footer, in Firefox on latest Android.

<comment><AUTHOR> sorry about that, just downloaded firefox on android and for me it does render the fretboard but it only takes like 1/3 of the screen. Will look into it asap.

<comment><USER40> No problem at all, excited to check it out all the same when I get back to my laptop.

</comment></comment></comment><comment><USER41> Love this.

One thing I've been doing lately is overlaying chords over the scale to do something similar to the CAGED method.

</comment><comment><USER42> Nice work. I'm really impressed. I think with addition of an audio lib, it'll be perfect.

</comment><comment><USER43> The last row of buttons don't work on mobile (they don't update the view)

<comment><AUTHOR> to be honest, I targeted desktop audience, and running linux (and android) myself, I am bit limited in this (testing) area. I might be getting an iOSmac device soon so that might help. What browser/OS are you using?

<comment><USER44> The scale name buttons don't have any effect for me on the iPhone. Their rendered state changes but that's it.

</comment></comment></comment><comment><USER45> I would love a left handed one. It's very difficult for me to use otherwise.

</comment><comment><USER46> Nice work, love SVG use.

Can this be flipped for left handers?

<comment><AUTHOR> unfortunately, not at the moment. I think with some code "flipping" it would be easy to support. I;ll look into it.

</comment></comment><comment><USER47> very cool! did you consider adding note sounds?

edit: also, what does the 'b' prefix signify? I'm not familiar with it.

<comment><USER48> I took that to be the flat notes so b6 would be a flat sixth note of the scale.

<comment><USER47> A minor has no flat notes, but when selected, shows b3, b6, and b7. I must not understand what you mean by 'flat note of a scale'.

<comment><AUTHOR> I hope this might help (I am not very good at explaining it): [https://music.stackexchange.com/questions/17426/naming- scale...](https://music.stackexchange.com/questions/17426/naming-scale- degrees)

<comment><USER47> Cool. I understand now after reading the discussions in the link a few times. Sadly, I never delved very deep into music theory, despite having played guitar for nearly 20 years.

<comment><AUTHOR> Give it a shot, it's worth it. I also played for years before I started looking into theory part, but I wish I started way earlier.

</comment></comment></comment></comment></comment></comment><comment><USER49> Thank you for the wonderful work.

</comment><comment><USER10> Hello! This is cool, I was really interested in this because I have been building something very similar, a little side project that I started working on some time ago.

You can check it out here

[http://sonicpines.com/fretboard](http://sonicpines.com/fretboard)

(still somewhat of a rough, half baked demo, so expect bugs)

For the most part I have been building it for myself, to help my understanding as I was taking some guitar lessons. But I thought I might eventually release it as an app.

It seems we took a very similar approach, I'm also using an SVG visualization (though, I have to say, your version is a bit more visually appealing, kudos for that), and you can choose your key and scale in a similar way (though my demo is limited to a pretty small number of scales right now). I have WebAudio playing some recorded guitar sounds on mine, though I think sometimes this is more annoying than useful.

I have been surprised by the comments of a few friends that I have showed it to who are learning guitar as well, who could not make heads or tails of it. I suppose it requires a certain bit of music theory background before you can really get in to an app like this. I was quite surprised by the guitar teacher saying he didn't get it and didn't think it would be useful in teaching. My guitar teacher keeps drawing all of these kind of diagrams by hand which are all parts of what can be seen on my app (or yours) and it seems odd to me that this kind of an app would not instantly make sense to anyone who is trying to learn the fretboard.

I guess on your app one thing that wasn't totally obvious to me was what the colouring in between the notes represented. In one version of the app it seemed to just represent the space between one note and the next, but in another it seems that you are colouring areas of the fretboard to represent the different "boxes"?

Myself, I already know a lot of music theory from Piano (hence the use of little mini-piano keyboards as key/note selectors on my app), so for me it's all about learning how the stuff I know from piano maps on to the guitar. I could see how for someone without any music experience learning guitar for the first time, all of the different terminology and reasoning behind it all might not be self explanatory. That's not a failing of your app necessarily, just that music theory in itself is a bit weird. Perhaps that makes an app like this a bit of a niche thing, the fact that you need to know some music theory to use it. Maybe some people who are learning would find it beneficial if it packaged more in a tutorial form where there are different "lessons" which introduce the concepts a bit at a time and keep coming back to the same fretboard interface as a visualization.

</comment><comment><USER50> What am I looking at?</comment>