Response from Google Tech Lead, Re: "Google May Be Stealing Your Mobile Traffic" - <AUTHOR> https://www.alexkras.com/google-may-be-stealing-your-mobile-traffic/#comment-55336 <comment><USER2> This is a good response and I appreciate Malte's effort to engage publishers, but it doesn't calm my nerves about the biggest publisher complaint about AMP:

 __Google owns the chrome (top navigation) on all AMP pages. This makes it easy to navigate back to Google (why would you ever want to leave?) and other publishers in the AMP ecosystem, but much harder to navigate to the publisher that created the page in the first place __

In essence, this means that what was once a publisher-owned page is now shared property: between the Google and the publisher. By controlling the top navigation, Google more easily controls the content the visitor sees, keeps visitors on Google longer, provides greater opportunity to track visitors, and perhaps most importantly has the opportunity to earn more ad revenue.

Now imagine if this was a requirement for ALL pages served in Google search results. You publish a page and it appears in Google, but when the user clicks on it Google has pasted a new navigation on the top of your page. This is exactly what is happening with AMP.

This is especially troubling in light of all the anti-trust controversies Google is finding itself in, both in the US and abroad. A recent study showed that 49% of all Google clicks go to Google properties of one kind or another (Maps, YouTube, Ads, etc) [http://www.slideshare.net/randfish/intro-to- mozcon-2016/24-L...](http://www.slideshare.net/randfish/intro-to- mozcon-2016/24-Lots_of_NoClick_Searches_in)

Does AMP count as another Google property that will push more than 49% of clicks their way? Hard to say, but it's a disturbing trend for a monopoly and a hard pill for publishers to swallow.

<comment><USER3> If you aren't comfortable with it, just don't use it, right? I'm probably missing something, but I don't understand how something can be such a hard pill to swallow when it is opt-in.

<comment><USER4> AMP content shows up before other organic search results. So it's not really optional unless you want to lose all your search-driven traffic.

<comment><USER5> The guy said AMP doesn't influence ranking. Who do we have to believe ?

<comment><USER6> it may not be a direct ranking signal but i think this is a little disingenuous. by putting this "lighting" icon next to some results, the CTR (click through rate) on the SERPS (search engine results pages), will likely be higher for AMP pages, and that higher CTR _is_ a direct ranking signal which will eventually lead to better rankings.

</comment></comment></comment></comment></comment><comment><USER7> As a user I've learned to avoid AMP pages because the UX is horrible:

* back button is broken 1/2 the time

* the bar wastes 1/3 of my screen

* I can no longer see what site I am on in the url

* it's hard to navigate to the / of the site

* I can't forward the link

* being on a good network in US it solves no problem that I have

What I'd really like to see is a way to opt-out of seeing AMP'ed pages in my search results. Or at least a way to navigate from AMP page to its native version.

Further, I noticed that AMP is a signal for low quality content. I am guessing sophisticated publishers are conservative enough to wait and see. And individuals haven't bothered dealing with it. So you get low-end publishers in between.

<comment><USER8> Visiting non-AMP sites on mobile is masochistic (e.g. try searching news results). You get basically all the same problems, but also pop-unders, late loading ads, greedy javascript, autoplaying videos, and other bad behavior.

The AMP is really quite solid for the news use case, in my experience.

<comment><USER9> Using Firefox for Android with uBlock Origin pretty much solved that problem completely for me.

<comment><USER10> I use Firefox on Android + uBlock Origin as a default, but even _loading_ the Firefox browser takes longer than loading, reading the first few lines of an AMP article, then going back because it wasn't interesting. And I have a high- end phone.

<comment><USER9> >And I have a high-end phone.

And bigger issues. My Galaxy S3 takes 4 secs to open Firefox without cache compared to 3 secs to open Chrome.

</comment></comment></comment></comment></comment><comment><USER11> Yeah, I was quite surprised how positive a reaction the original complaint got, considering it was long-winded, repetitive, and seemed to go out of its way to misunderstand AMP.

The only valid criticism appears to be how google displays search results using its own URL and this toolbar – it seems to break rather fundamental assumption about http and has the potential to break all sorts of tools that rely on the established structure of the web and open standards, as has already happened with the refer(r)er as mentioned in this response.

I wonder if there's a way to get the same result without rehosting content on their own URL. Couldn't they allow publishers to achieve the same result with a CNAME, possibly for amp.<hostname>.<tld>? And do the google servers add anything beyond being distributed caches? Because if not, it seems this level of indirection is redundant for websites already hosted on CDNs.

Regarding the toolbar: yeah, that's a terrible idea. I have no sympathy for publishers who object to it because if it reduces your retention rates there's probably more wrong with the content than the presentation. But as a user, it's the sort of "assisted browsing" that feels intrusive, like resizing the window or a "you need flash" popup (I don't).

Considering their market share in browsers isn't far behind the in search, I wonder why that function isn't just a chrome feature. Funny thing is: it's a feature that exists in Safari ("Search results snapback").

<comment><USER12> If you look at the AMP docs ([https://www.ampproject.org/docs/guides/discovery](https://www.ampproject.org/docs/guides/discovery)), publishers use <link> tags to point to the AMP page. For the original article, the AMP version lives at [https://www.alexkras.com/google-may-be-stealing- your-mobile-...](https://www.alexkras.com/google-may-be-stealing-your-mobile- traffic/amp/) but the URL could follow whatever scheme the publisher wants.

Since Google search is most likely discovering the AMP page via the <link rel="amphtml"> tag, they really should just use that URL. The Google servers do add a couple minor things beyond being a distributed cache though. First, there's swipe navigation to other articles if the link was located in the top carousel in search results. Second, if you are on a laptop, the Google servers will redirect you to the full version rather than use the AMP cache.

</comment></comment><comment><USER13> Google has their version of the internet. Facebook has their version of the internet. As time slides forward just think of how many users won't know the real internet from these rubber doll versions.

Congrats humanity. Your best invention ever and it only 20 years or so to completely fuck it up. This is why we can't have nice things.

<comment><USER14> People need to own the means of production. In this case, it's the search engine and social network. We can't rely on companies, because they are greedy, nor on government, because it is corrupt. This is what happens when we don't own the tools we use - we are subject to exploitation, others making fortunes on our backs and abusing us by incessant tracking.

I'm amazed that there is no federated (not owned by a single entity), anonymous search engine to this day and we're still pouring our brains into Google. Google knows more about a person than his spouse, doctor and lawyer put together!

<comment><USER15> Correction: There is no federated, anonymous search engine that gives _good results_.

<comment><USER16> There cant be.

People/powers-to-be would fuck it up, there would be "copyrighted material" and eventually it would be declared an illegal activity.

Only companies such as Google and Facebook prevail not due to technical reasons, but due to political power. They are selected by the likes of CIA, invested in and nourished to their position, and do their bidding. And alternatives are extinguished.

Google should not have existed had copyright laws been enforced as they are towards another search engine, thepiratebay.org

</comment></comment></comment></comment><comment><USER17> I think one important point is hidden within this sentence:

"The original idea behind AMP was to allow content to be distributed to _platforms (such as Google_ , Twitter and Pinterest) in a way that retains [...] control for the publisher."

(emphasis mine)

So Google sees itself as a platform in the tradition of Twitter and Pinterest - i.e. a controlled space on which content (with more or less control by the authors) is published. That's a significant difference to the gateway to the open web that they primarily still are at the moment.

<comment><USER18> I agree, this is the key insight. Google sees itself as moving toward what I see as a more reddit-like model. People might occasionally click away on links to other sites, but the idea is to keep them on Google's "platform" by default.

That's why clicking "X" means "go back to Google", because in this model, you never left. You just temporarily viewed some content in a pane which you are now closing.

</comment></comment><comment><USER19> As positive as the response sounds, it is an empty promise.

> We're looking at ways to make the source link more discoverable and will > update once that is done.

If Google was _actually_ going to fix the issue, they would have said "we will make the close button direct users to the original site and will update once that is done" OR "we are changing the x (close) button to a ← (back) button".

"x" means "close" and "←" means "back". This is confusing UX at the least and arguably a dark pattern.

<comment><USER20> Am I in the minority in that I found the function of the "x" to be very clear? I don't know if it is fair to call it "nothing less than a dark pattern" without a bit more data.

<comment><USER21> That is where we currently are. In our user testing it tests really well, but there appears to be confusion in this community which would be good to address.

My current feature request is to link the "publisher domain" to the origin article, so that one can always click that to get there and use it to copy the link.

</comment></comment></comment><comment><USER22> Am I being uncharitable in saying the TLDR is:

This is working as expected and you need to do more work to make AMP work for you?

Why can't it work with templates, why does content that was created need to be created again for AMP? This doesn't seem very scalable.

Also, the attribution for ads and analytics basically means you need to reimplement your entire tracking code within the schema and spec of AMP's analytics attributes which only supports a subset of existing providers rather than allowing an abstract interface.

Also to the point that AMP doesn't affect search position, is this true if someone serves a shitty AMP page? Or is it only true that it won't boost position?

<comment><USER21> Well, it certainly works with templates (like the WordPress AMP plugin), but that only gets you that far. It is definitely work to adopt AMP, but most people who have done it are pretty happy with the workflow. We are always listening for feedback, though, and are looking for ways to make it easier.

</comment></comment><comment> nv-vn Am I the only one here who has never seen an AMP site in the wild? Seems people in the comments are super familiar with the service.

<comment><USER23> I have never seen one either, but I don't use Google search anymore.

Perhaps you don't use it either?

</comment></comment><comment><USER24> "The original idea behind AMP was to allow content to be distributed to platforms (such as Google, Twitter and Pinterest) in a way that retains branding and monetization control for the publisher. AMP traffic is the publisher's traffic. Period."

So far I haven't thought of Google as a platform like Twitter or Pinterest. I thought there was a free web with Google and Bing and good old Altavista searching and indexing it. Is making a website now similar to posting something on Facebook? Or why would they have to assure you that your traffic is your traffic, "period"?

If that's the case we need an urgent change in direction!

</comment><comment><USER25> It's nice to see Google investing in direct responses to the community. If you build a developer product, monitoring HN for criticism and responding is very high ROI. Few companies actually do this.

</comment><comment><USER26> If hacker news had a speed rating next to the links I would probably click on them more instead of just reading the comments to decide if it's worth pulling up an article.

Note, It has been suggested that a speed rating on Google would be equivalent to the amp experience with less Google control.

<comment><USER27> Speed also depends on where you are geographically. Amazon.com is probably faster than Taobao.com in the States, but I'd have the opposite experience over here in China. But then Google is the slowest this side of the GFW, so that might be redundant.

<comment><USER26> True, but Google knows where you are and could test the site from that general region. It would cause additional overhead for Google but may be worth it.

Page render speed is just as important as server speed. A website bloated with ads is what I object to the most, or any type of pop over that obstructs the content.

<comment><USER27> I wonder whether they incorporate these things into their ranking metrics already, similar to how they do their Quality Scores for Adwords.

<comment><USER26> Good question, in 2010 Google said that they "... today we're including a new signal in our search ranking algorithms: site speed. Site speed reflects how quickly a website responds to web requests." [1]

I believe that page speed is also important, google provides PageSpeed Insights to help you improve your site. [2]

[1] [https://webmasters.googleblog.com/2010/04/using-site- speed-i...](https://webmasters.googleblog.com/2010/04/using-site-speed-in-web- search-ranking.html?m=1)

[2] PageSpeed Insights [https://developers.google.com/speed/pagespeed/insights/](https://developers.google.com/speed/pagespeed/insights/)

</comment></comment></comment></comment></comment><comment><USER28> Doesn't convince me. Top bar is the biggest problem and they are "working on it"™ (we all know what does it mean) and "it will be landed in Chrome soon", when Chrome is not only browser in the world of mobile devices. Also from this response I see they want to make Chrome the new IE (if problem is solved in Chrome - it's solved), and it's frustrating.

</comment><comment><USER29> End users, in generall, don't know and don't mind about these complaints against AMP.

What matters is if one gets the results he was searching for. And somehow those pages that have "amp" written nearby open faster, so let's click more on those.

Market pressure will drive decisions on whether it's better have amped pages (with those claimed drawbacks) or try to capture attention to the whole site with navigation and lighter pages.

And as a prisoner's dilemma, if sites that don't have amp are as fast as the amped, having "amp" near your link won't matter. If they are slower, the distinction will matter, independently of your specific optimization.

</comment><comment><USER30> I don't see why Google needs to have its own cache for AMP pages. If a publisher has its own fast CDN, why not just let it serve the AMP pages from its own domain?

<comment><USER21> The pre-rendering is one feature that requires a trust relationship between the host (to only serve valid AMP) and the platform. Otherwise the page may e.g. use a lot of CPU while in the background.

<comment><USER31> So you're saying AMP doesn't actually speed up pages at all, and it's only sped up because you pre-render?

You just admitted the purpose of AMP being moot.

</comment></comment></comment><comment><USER32> There's also this little chestnut:

[http://searchengineland.com/google-amp-will-override-app- dee...](http://searchengineland.com/google-amp-will-override-app-deep-links- foreseeable-future-259905)

TL;DR Google AMP also hijacks app deep links

</comment><comment><USER33> Previous HN comments on the original story: [https://news.ycombinator.com/item?id=12722590](https://news.ycombinator.com/item?id=12722590)

</comment><comment><USER34> > "If Google cares so much about the mobile experience, why cover 15% of the > small mobile screen with a fat bar at the top?"

> The Android users might have already noticed that it is now scrolling out of > the way

It doesn't scroll away. Just checked on Google news with both Chrome and Opera. Android 6. Am I missing something?

</comment><comment><USER35> So if I built my own personal ad network, I could make a PR and have it be accepted?

<comment><USER21> Somebody is currently doing that:

An external contributor is currently building first class support for "My simple ad network that just wants to put an image with a link on the page" [https://github.com/ampproject/amphtml/issues/5541](https://github.com/ampproject/amphtml/issues/5541)

There are other ways to do it, though.

<comment><USER36> I've heard a lot of discussion in the ad community around how this limits competition of ad networks. Yes, it is awesome you have many on board for launch, but what of the ones who are not? Is there a publicly available process for getting included along with guidelines to set reasonable expectations for whether one will be included? If so, I'd love a link.

<comment><USER21> See [https://github.com/ampproject/amphtml/blob/master/ads/README...](https://github.com/ampproject/amphtml/blob/master/ads/README.md)

I think with the numbers of ad tech companies coming on board every week one can safely say that the process is working for them.

</comment></comment></comment></comment><comment><USER37> Does Google have any plans to let users opt out? Maybe an icon that takes you to the original? I tried opening the AMP link in a new tab and it took me to the site, so at least there's a workaround.

Since I normally use Firefox Mobile (has to try it with Chrome), I don't get the AMP icon and I'm taken to the requested site. I'm guessing this functionality is limited to Chrome and (maybe?) Safari on mobile.

AMP is attempting to solving a challenging problem, and although I don't personally agree with their solution, I've gotta recognize that opening the embedded AMP version of the page from the result of "git tips" was faster on Chrome than on Firefox. I'm hopeful that the lessons learned from this will be pushed upstream and help improve the web.

<comment><USER21> AMP works great in Firefox (modulo this bug right now [https://github.com/ampproject/amphtml/issues/5479](https://github.com/ampproject/amphtml/issues/5479) :) and all other modernish browsers. Google Search currently chooses not to display it for FX, but that is not due to a limitation in AMP.

<comment><USER31> Instead, it's because Google Search artificially penalizes Firefox users, and even removes search options for them.

There's been discussion about adding Google Search to the list of sites for which Firefox Mobile always serves a faked User Agent because of this hostile and anticompetitive behaviour before.

</comment></comment></comment><comment><USER38> One of the problems here is that when users click on a search result (marked AMP in Google's SERPs), they expect to visit a website. Instead, they visit a cached version of the page, on Google's site.

This is deceiving.

If Google's going to cache the page, then there should be a "cache" link so the user knows that they're clicking on a cached version of the page. Otherwise, deliver the user to the site that they think they're clicking on.

</comment><comment><USER39> If it was Verizon or AT&T or some other ISP doing this there would be outrage. But I guess it's cool if it's Google.

</comment><comment><USER40> so how do i view the original page...?

</comment><comment><USER41> I'm interested in the intellectual property aspect of this.

Why exactly is it permissible for Google to "cache" my page and then serve it up to users?

That's literally them copying my page to their own servers, which is my content, my intellectual property, and then serving it up however they like.

I'm a little confused how that is legal.

</comment><comment><USER42> >Hey, this is Malte and I am the tech lead of the AMP Project for Google.

Of all his 725-words response only 18 words directly address the problem:

>We're looking at ways to make the source link more discoverable and will update once that is done.

That's 2.5%. Is he really a _tech_ lead?

<comment><USER43> This seems to compare favorably with the original article. How much information density are you expecting?

Then you go on to imply that he's unqualified to be a TL because you don't like his polite and conversational tone in an article that criticized his project?

I just don't understand HN anymore.

<comment><USER42> >I didn't imply anything you've said. I just noticed that his response looks like a product of PR or marketing department rather then tech lead.

A appreciate the fact of quick reply, even if half of the credit for it should go to HN discussion.

<comment><USER43> Everyone has to do PR to some extent. One misplaced word will create 100 comments on HN complaining about it ;)

</comment></comment></comment></comment><comment><USER44> He avoids really hard addressing the only bit that matters

> Guess what happens when the "close" button is clicked inside the AMP view?

And the amount of disingenuous on this just rubs me the wrong way:

> If you are not comfortable with traffic on your AMP pages, please do not > publish AMP pages.

<comment><USER21> Happy to address the close button:

You are on a search page, you go on layer deep by clicking. The close button goes back. I don't see what else it should do. Mind you that I do understand that a link to the origin server would be a good improvement (and I've stated that in the post).

I'm not sure what you find disingenuous. AMP are just web pages saying "HEY I A AMP, please use treat me as AMP". You can publish the same bytes minus the "HEY I A AMP" and get the old behavior.

<comment><USER32> >The close button goes back.

No. Just no. The _back_ button goes back. Period.

The _close_ button closes modal windows overlaying the original page and originating from the same site.

I can already hear you countering " _But.. since the content is served from google.com due to caching, this pattern is technically correct_ ".

Which is tantamount to saying "We serve the content. So we can add whatever the heck we want"

Very frigging clever Google. Well done. /s

<comment><USER21> The UI logically and visually belongs to the opening app, indeed. If the page itself opens a modal it opens on top of the bar and it's close button closes that modal.

<comment><USER45> but it's not an "opening app" ... it's a search engine. with links to other sites.

... or is it?

<comment><USER36> Philosophical question...

If I hit the search bar on my Android device, and it opens Google Search in an app interface, is it an app, is it a search engine, or is it both? What about with their new strategy of integrating Google Search more closely into apps? How about then?

The line is so blurry as to be irrelevant. The wording on the responses seem to be on a different side of that philosophical argument, but I'm not sure it is that black and white.

</comment></comment></comment></comment></comment></comment><comment><USER46> So basically this guy says all of the issues are by design and you can choose not to use amp if you don't like all of it. Google isn't going to penalize non amp pages in search ranking. They are just going to not show your page in the carousel.

I think it's a pretty fair position to take. If you don't like amp don't use it. We'll see if amp catches on over a period of time.

<comment><USER47> Amp isn't ideal, but neither is Instant Articles on Facebook.

I'm hoping that Amp is really just Google training publishers how to make web pages that aren't terrible for users.

<comment><USER46> Instant articles is even worse, IMO. But Facebook is not pretending it's the next version of the Web. Google is, so they set up an expectation of Web like behaviors.

<comment><USER47> So what would you have done if you were in charge at Google?

At the time Amp was announced, Facebook's Instant Articles was really taking off. It was by far the best place to read news online and arguably still is.

To get a similar experience outside of Facebook (before Amp) you had to use an ad blocker. Right around that time, Apple added support for ad blocking in iOS and suddenly ad supported content outside of Facebook was looking unsustainable.

<comment><USER31> > So what would you have done if you were in charge at Google?

File an antitrust complaint against Facebook, sue Facebook, and get a warrant to get Instant Articles instantly shut down?

> suddenly ad supported content outside of Facebook was looking unsustainable

And just pivot regarding that?</comment></comment></comment></comment></comment>


CSS Hexagon Tutorial - <AUTHOR> http://jtauber.github.com/articles/css-hexagon.html

<comment><USER2> Tantek Çelik did some of this experimentation, amazingly, over a decade ago (2001). Right-click for his CSS:

"A Study of Regular Polygons" <http://tantek.com/CSS/Examples/polygons.html>

<comment><USER3> Yea, I remember this one: <http://tantek.com/map.html>

Wayback: [http://web.archive.org/web/20020321021851/http://tantek.com/...](http://web.archive.org/web/20020321021851/http://tantek.com/map.html)

<comment><USER4> I tried to implement my own version of such menu here: <http://barabbas.github.com/blog/sandbox/hexmenu/hexmenu.html>

It is very Q'n'D and cumbersome but at least it has novelty value.

</comment></comment></comment><comment><USER5> And then, of course, there's this:

<http://www.fileformat.info/info/unicode/char/2b22/index.htm>

<comment><USER6> Not rendering for me, running Windows 7 and chrome

<comment><USER7> Win 7 + chrome here too; the URL of the parent of your note renders it ok, but not on the OP for me.

</comment></comment></comment><comment><USER8> If you're willing to sacrifice IE7 support, you can accomplish that all with one element per haxagon, as well, by utilizing the :before and :after pseudo- elements.

<comment><AUTHOR> yeah, I was thinking of exploring that next and will update the page when I do so.

<comment><AUTHOR> now updated thanks to Will Hardy

</comment></comment></comment><comment><USER9> The kind of hacks achievable with css borders is amazing. Here is a jQuery plugin that does a 3d flip using borders:

<http://lab.smashup.it/flip/>

And here someone produced a clever 3d animation using borders:

<http://www.uselesspickles.com/triangles/>

</comment><comment><USER10> These tricks with CSS are all nice. Pardon my ignorance, though, if one needs a way to draw shapes wouldn't something like SVG be more suitable for these sort of tasks? I know it is probably not as easy as with CSS (support is more limited as well), but isn't this example kinda like abusing the limits of the stylesheets?

<comment><USER9> Yes, svg would be more compact: <http://jsfiddle.net/fgu5R/>

<comment><USER11> Can you apply css transformations to that?

<comment><USER9> Yes you can <http://jsfiddle.net/ReZbM/>

</comment></comment></comment></comment><comment><USER12> And there's this:

<http://css-tricks.com/examples/ShapesOfCSS/>

Includes the infinity symbol, an egg, Pac-man, and the ever fun Yin-Yang symbol.

</comment><comment><USER13> Funny this came up, I was just looking at how Twitter's bootstrap creates the "caret" drop-down arrow.

[http://twitter.github.com/bootstrap/components.html#buttonDr...](http://twitter.github.com/bootstrap/components.html#buttonDropdowns)

If you inspect the down arrow it's created in the same way. Interesting.

I guess it's better than an extra image request if you don't mind the style.

</comment><comment><USER14> The power of the hexagon in css! I've seen some interesting art built out of triangles and render very well in all browsers and together with hexagons you can build complex geo art. Here's a favorite of mine: <http://www.ragestorm.net/erezsh/parrot.html>

</comment><comment><USER15> Is it possible to bind an image to these instead of a straight color?

</comment><comment><USER16> Clever. I'm going to play around with this now.</comment>


Ask HN: What can I use to make presentations that don't suck? - <AUTHOR>

I have to give a presentation as part of my Master's project soon, and we have to produce slides. I've never given a full on presentation. What can I use that isn't Powerpoint to produce simple, clear slides?<p>Currently looking at LaTeX + beamer, or simply drawing things nicely on my white board, photographing, cleaning up and adding a bit of text. Any other ideas or suggestions? <comment><USER2> <http://prezi.com/> 's front page has taken a turn for the worse, but they create some visually interesting presentations.

If you have to use slides specifically, take a look at Garr Reynold's (PresentationZen.com guy) sample slides...

<http://www.garrreynolds.com/Presentation/sample1.html>

...and presentation tips:

<http://www.garrreynolds.com/Presentation/index.html>

Finally, <http://slideology.com> is also a good resource; checkout the most- read articles list in the sidebar.

<comment><AUTHOR> Prezi is certainly a refreshing take on things. Unfortunately it seems we do have to create slides, but I'll keep it in mind for next time. Thanks for the rest of the links too.

</comment></comment><comment><USER3> Powerpoint is simply a tool. If you have poor presentation skills, any software will create crappy slides.

Yes using different tools may help make it easier, but similar to an artists work, the ultimate quality of the piece will lie with the artist. Yes using different tools may produce slightly better results, but the designer is the biggest contributing factor.

Powerpoint is powerful enough to do anything you need, so I don't see why you shouldn't consider it. Thinking differently for the sake of doing so doesn't make sense!

</comment><comment><USER4> Using graphics/images from iStockPhoto and similar sites helps convey the point. An important rule to remember: your audience will either be reading your slides, or hearing what you say. So make sure they compliment each other.

Guy Kawasaki has some helpful advice on how to use text in presentations: <http://blog.guykawasaki.com/2005/12/the_102030_rule.html>

</comment><comment><USER5> There was a presentation tool used at PyCon during one of the lightening talks that used an interesting 'zoom and rotate' concept.

Any HN folk know what this is?

<comment><AUTHOR> Could it be Prezi (on JayNeeley's post)?

</comment></comment><comment><USER6> I am a die-hard Linux fan. However, I recently discovered that the latest Powerpoint is head and shoulders above Beamer and OpenOffice (try SmartArt, for example), so I use the school's Windows machines just to work on my presentation.

</comment><comment><USER7> If you like Markdown you could give slidedown a try. You write your slides in Markdown and then render them to HTML: <http://github.com/nakajima/slidedown>

</comment><comment><USER8> check out <http://280slides.com/></comment>


I'll sue you if you use my common-sense JavaScript tests - <AUTHOR> http://groups.google.com/group/jquery-dev/msg/b8079000b547df15 <comment><USER2> Ah yes, David Mark. This guy trashes other JavaScript frameworks (usually quite pedantically) in order to promote his own "My Library". Not a good strategy if you ask me.

We were the target of a highly superficial "review" by him soon after Cappuccino was made public: [http://groups.google.com/group/comp.lang.javascript/msg/1799...](http://groups.google.com/group/comp.lang.javascript/msg/17994a9a6f8f96e3)

(for the record, YES and NO are there for compatibility with Objective-C, and we benchmarked the math functions, used in graphics routines which needed to be highly optimized, and found a significant performance improvement, in IE if I remember correctly, by aliasing them to eliminate the Math object property lookups)

<comment><USER3> What's even more hilarious is the code in his "My Library".

I'm far too much of a generalist to consider myself a JavaScript expert. However, even I can pick out a number of items in his lib that shouldn't have been handled the way they are:

\- He declares $ in a global context without first checking for its existence;

\- He uses RegExp objects _constantly_ \-- in 50 different places in his full "mylib.js" -- including in cases where a simple indexOf would be better, and, best yet, he doesn't bother to cache them in any of the dozen or so cases that I examined. Wasn't that one of his criticisms of someone else's code?

\- His treatment of camelCase is truly embarrassing, relying on an ugly RegExp every time it's called. Try something like this instead:

        _camelCases = {width:'width', height:'height'};
        _camelCaser = function (p) {
            return typeof _camelCases[p] != 'undefined' ? _camelCases[p] : _camelCases[p] = p.replace(/\-(.)/g, function(x, y){return y.toUpperCase()});
        }

There, now you only need to camelCase the property for anything _once_. JavaScript's object handling makes caching this kind of stuff soooo easy. And, if you do have to have a camelCasing function, try to do it with as little overhead as possible -- use the tools that JavaScript gives you, instead of capturing the string parts in a match and then .join()ing them and all that other nonsense.

His library doesn't demonstrate any of the kind of specialized language knowledge that he accuses other library developers of lacking, and it has at least some of the same weaknesses that he criticizes others' works for.

<comment><USER4> There's a tradeoff between download time and execution speed there, and download time usually wins. I wrote the camelCaser in Google Websearch (basing it off Closure), and I used a simple regexp without memoization. You can burn a lot of cycles in the time it takes to download a hundred bytes over 56.6k, and often a camelCaser is used in situations like an animation loop where speed doesn't matter as long as you come in under the frame rate.

<comment><USER3> I don't really disagree with you, however:

\- minifying and gzipping the javascript files is considered standard practice now, and the code I posted as-is is actually shorter than David Marks' case [* I lied! It's not, by 100 chars. Even shortening the object references kept it a bit longer. I don't think this defeats the rest of my points though.]. It could further be shortened, a lot -- to the point that for all practical purposes it's as small as a non-memoizing version.

\- I tend to use a camelCaser in much more than simple animation loops -- any time for example that the style attributes for any element are referenced. i.e., it qualifies as an inner-most function.

\- Although it's true that in animation loops you just have to beat the frame rate, let's keep in mind that there are a wide variety of processors and systems in use, and not everyone is using the latest dual-core Intel system with 3 gigs of RAM.

As a point of personal style, I much prefer to take the shortest, fastest, least-resource-intensive path for any given task, even if it's not strictly necessary to do so. As an end-user, I'm disgusted beyond description with the mindset that has become so prevalent among programmers, where efficiency is something that should be solved in hardware. It's absolutely frustrating that there are sites where the programmers have made so many concessions to speed in the name of rapid development that I can't even get the site to load in a few seconds on a 1.5 ghz G4.

So, yes, you're right, but I think the bit from David Marks' code is still naive and still does not make best use of the language:

        camelize = function(name) {
          var m = name.match(reCamel);
          return (m)?([m[1], m[2].toUpperCase(), m[3]].join('')):name;
        };

<comment><USER3> Actually, I take some of it back!

You had a good point about total size of the code being downloaded, so I went back and tried to see if I could shrink mine a bit without pulling any dirty tricks -- when I realized that a chunk of his code is 'hidden' in the reference to the regular expression object he's created elsewhere.

With that added, and matching my code style to his, my version is less than 20 characters longer than his -- and that's without doing anything sneaky.

But, maybe there just isn't a big difference in speed? So, I set up a quick test. Again, I wanted to be fair, so I could understand what was going on. The two tests are identical, I didn't advantage mine in any way or disadvantage his.

The results?

Given a list of 11 valid CSS properties to "camelize", some with dashes and some without, my code can camelize the set 20 times over in 1 to 2 milliseconds.

The non-memoizing version can camelize the set 20 times over in ... 1034 to 1212 milliseconds.

That's a significant difference, IMO.

Tested on Firefox 3.5/Mac.

...all that said, thanks for reminding me about function size and download speed. I try to keep my own library at under 1000 source lines of code, but there are definitely some areas where I can sacrifice a few lines to lose a chunk of text. (Like, wrapping "typeof object != 'undefined'" into an "undef(object)" function.)

<comment><USER5> You missed the point. Well, several points. My Library was written years ago and the idea was to support "ancient" browsers like Safari 2 as well as all future browsers. As the fairly torturous test page still works in IE8 (all modes), Safari 4 and Chrome it would seem a rousing success. In the meantime, jQuery has been virtually rewritten to get rid of the browser sniffing. Guess where they got the ideas (and figure they botched their implementation).

Yes, memorizing camelized styles would be more efficient, but then the library doesn't deal with hyphenated ones in the first place. It's used in exactly two places and neither has anything to do with styles. Instead, it deals with (very rarely encountered) hyphenated _attributes_ (you should have guessed, or God forbid read the code you were criticizing).

And aren't you just picking one (tiny) bit that you can sort of relate to and mouthing off without any real clue about what you are talking about? <whine>And why didn't _you_ report it to the author to be constructive, build a community, etc. What an awful jerk!</whine>

BTW, your version will blow up in Safari 2 due to the function passed to replace. Good luck with that!

<comment><USER3> Hi, welcome to HN! I sincerely hope that you will bring a different tone here than you do on comp.lang.javascript.

People tend to measure the "success" of their libraries or other code based upon whether or not it accomplishes their goals. If your goal was to simply build a set of abstractions, continue support for ancient browsers, and ensure that it continues to work for future browsers, then you've accomplished it and that's great.

However, you fail then to recognize the goals of other frameworks and libraries which differ from your own. That is, they sacrifice compatibility with very old browsers for the sake of improved performance and support for newer browsers; or they sacrifice strict correctness for improved rates of development; or they sacrifice other aspects of Javascript-specific techniques for the sake of readability or establishing patterns familiar to novice programmers.

The authors of other frameworks can no more be criticized by you for failing to meet your goals, than we could criticize your library for failing to meet our goals.

Indeed, you're correct that I did not read every one of your more than 9,000 lines of code (almost 330K!) for the complete library. Rather, given your penchant for reading a few lines of some framework, critiquing them, and then declaring them to be no longer worth your time -- I thought I'd try the same.

...Actually, I'm being needlessly rude there. The truth is, I did attempt to review portions of code inasmuch as I had time for. Much of it was simply not notable; I picked out the camelization for one point because I had been tuning my own just a few nights ago.

Thanks (seriously) for pointing out the Safari 2 incompatibility. I'll consider whether adding support for Safari 2 is worth re-working that line. (Probably not, but maybe.)

We could continue to dicker back and forth on the relative merits of one bit of JavaScript versus another, but I'd rather keep working on mine, other people would rather start writing their own obvious unit tests, and you would hopefully rather update your library or something.

<comment><USER5> You don't get it. See the examples I posted recently in CLJ (at the end of that jQuery thread, for example). It does anything you can imagine, including a jQuery-like interface if you really like bad interfaces. :) Or you can write your own OO interface.

jQuery is _downstream_ from My Library. If you go back a couple of years in CLJ, you'll find that I'm the one who tirelessly argued with Resig and co. until they dumped UA sniffing. And yeah, they copy code and ideas from me to this day. But that is _not_ why I point out the botched implementations of those (and other) ideas. I point them out because the code is bullshit.

All of that stuff about improved development time and readability and support for whatever browsers misses the mark (no pun intended) as well.

* The others are not more readable * The others are not more advanced (despite my Write Once, Do Nothing strategy). * The others are not more compatible (not even close) * The others do not perform better * The others do not have better support (the authors are too confused about what they are writing or copying)

The only thing the others have going for them is that they actually (disingenuously) market their projects. I don't have the time or need to do so.

The library is only 330K if you select _everything_ in the builder, which is the equivalent of jQuery + 100 plug-ins. It's got easily the best Flash module, a unique audio module, "sidebar" widgets, a CSS selector query engine, animations (including DirectX), etc., etc. And it all works going back a decade or so and continues to work going forward (I rarely touch it). And contrary to the laughable comment I saw in here, it perfectly suitable for use in the "Real World". That expression is so tired (and meaningless usually) it is in a coma. I sometimes wonder if the people who write things like "Real World" and "snark" actually talk like that. :)

I don't know what you mean by "simply not notable". On technical, usability and compatibility merits, it's the most notable blob of cross-browser JS ever published. But I never really called attention to it other than as a way for others (e.g. Resig) to learn. When it came out, all of the frameworks were doing crap like this:-

if (isIE6) { } else if (isSafari || isIE8) }

...and about to collapse under the weight of all of these flaky forks. You can't maintain BS like that.

Read your history, you will get an extreme sense of Deja Vu (and perhaps a laugh or two).

[http://groups.google.com/group/comp.lang.javascript/browse_t...](http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/415949d1bcce6e6a/03c4d326340e7f7d)

And I never said anything about Resig co-opting my "obvious unit tests". There's a lot more than tests on that page. Nor do I have to update My Library (that's the main point of feature testing).

Here's some more reading for you:-

[http://peter.michaux.ca/articles/feature-detection-state- of-...](http://peter.michaux.ca/articles/feature-detection-state-of-the-art- browser-scripting)

<http://thinkweb2.com/projects/prototype/>

Seriously, you just might learn something. This is why I speak loudly (and carry a big script). :) Otherwise, all of you "hackers" might have remained oblivious to the fact that jQuery, Prototype, MooTools, etc. are Z-grade scripts at best. It's not always a poor use of the language, but more often a poor grasp of cross-browser scripting techniques, which leads to endless Beta tests, wholesale substitutions, etc. It's a relatively hard way to go, despite what the commercials (blog posts) tell you. ;)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><AUTHOR> Some other gems by David Mark

[http://groups.google.com/group/comp.lang.javascript/browse_f...](http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/3d90e8b8a8301462?pli=1)

[http://groups.google.com/group/comp.lang.javascript/browse_t...](http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/2232c2e46e200cde/)

<comment><USER6> Wow! After reading these, and the replies, I definitely agree with John Resig about that newsgroup: don't read. Or risk losing your hope for humanity.

<comment><USER7> And yet I can't help drawing a parallel: comp.lang.lisp was famously full of the hateful spewing of an intolerant contributor, and for that both the group and the contributor (Erik Naggum) were basically worshipped by a non-trivial community. Why did Lisp produce that outcome, while JavaScript produces this?

<comment><USER4> It's basically the same. comp.lang.lisp and Erik Naggum may've been worshipped by a non-trivial community, but it was still a small community. The rest of us still hated it.

I'm sure there're people out there that enjoy comp.lang.javascript too.

<comment><USER8> And as a simple perusal of threads that David has posted in shows, he has he fair share of 'you're absolutely right David, jQuery, mootools and all the rest suck' style worshipping.

For some reason (which I could make guesses at) Usenet attracts this type of kookery, and when kooks gather, they tend to create this appearance that people actually value their rants and conspiracies.

As a result, you get the perceived 'Erik is god' views of comp.lang.lisp, whereas people that try to read, or contribute, consider(ed) him and his ilk as a deterrent to useful discussion.

<comment><USER4> Basically every community has their heroes, people that from the outside look like cult leaders but from the inside look like wise sages. Hacker News and Paul Graham. Joel on Software and Joel Spolsky. StackOverflow and Jeff Atwood/Joel Spolsky. FictionAlley and Cassandra Claire. Haskell and Oleg Kiselyov. Google and Jeff Dean.

Their popularity outside the community seems to reflect the popularity of the community itself, which in turn reflects how much it does for the world at large and how similar its values are to the "mainstream". I'm kinda curious _why_ such cult followings develop, but it seems to be a near-universal feature of communities of sufficient size (basically anything over Dunbar's number, where not all members know all other members). I've got a few hypotheses on this but no answers.

</comment></comment></comment></comment></comment></comment><comment><USER9> Everything I've read by this guy is more or less the same bilious, angry screed. His monomaniacal obsession with John Resig is a little alarming.

Therefore, I'm sad to admit that, in this case, he almost has a point. The use of attr('height') to mean not the height attribute in the DOM but as an alias for height() smells wrong to me. However, it's clear that he has absolutely no intention of becoming a productive contributor to jQuery or helping in any way.

By contrast, let's take a minute to appreciate this Matt Kruse fellow. He has apparently strong objections to something in jQuery's design and is taking it to John Resig. He seems ready to engage in a real dialogue. The end result? He probably ends up a little happier and jQuery ends up a little better.

The real question is: how can we have more Matt Kruses and fewer David Marks in the world? Do the David Marks of world drive off the Matt Kruses? (I think they almost certainly do.) Why are there so many sociopathic personalities in circles such as this, and how do we mitigate the damage they cause?

<comment><USER10> In my experience perhaps the only way of dealing with characters like David Marks is by completely ignoring their contributions.

He does, I agree, almost have a point. However, his lack of respect for those who spend time and energy contributing to these projects could (and will likely) drive away many useful contributors. "Feeding the trolls" is a dangerous game, much more so than avoiding the advice of a few David Marks.

The problem with this strategy lies in the fact that most open-source projects are large, open communities, where experts in a particular area useful to that project are likely not to be ignored. John Resig's response to the situation (in which he condemns the entire comp.lang.javascript usenet group) seems an extreme (but perhaps appropriate) response to this -- he's sending a very strong message to those who contribute to jQuery: "no more feeding David Mark".

(I would also agree that this Matt Kruse fellow seems to be going about things in an excellent sort of way. His response to Resig < [http://groups.google.com/group/jquery- dev/msg/e93f9484cd5246...](http://groups.google.com/group/jquery- dev/msg/e93f9484cd524625) > was, in my opinion, spot on)

</comment></comment><comment><USER11> David Mark is an anti-jQuery crusader. He is known for speaking ill of people who use the library as well as the developers (John Resig in particular). He insists that jQuery is responsible for all of the sites across the internet that have JavaScript errors.

See [http://www.reddit.com/r/programming/comments/7vul9/some_tech...](http://www.reddit.com/r/programming/comments/7vul9/some_technical_criticism_of_jquery_code/) [http://www.reddit.com/r/programming/comments/8ndyw/jquerys_l...](http://www.reddit.com/r/programming/comments/8ndyw/jquerys_latest_stab_at_competence/)

<comment><USER12> What I don't understand is why he doesn't work to help jQuery to be better then and contribute a bit? If its causing errors and bugs then certainly he could help some instead of complaining?

Resig +1 Mark -1

<comment><USER13> Ego?

</comment></comment></comment><comment><USER14> Another reason not to participate in comp.lang.javascript: Thomas 'PointedEars' Lahn.

<comment><USER15> You are absolutely right.

</comment></comment><comment><USER16> Seems like this David Mark is mad at the world:

[http://sixrevisions.com/javascript/promising_javascript_fram...](http://sixrevisions.com/javascript/promising_javascript_frameworks#comment-22465)

[http://sixrevisions.com/javascript/promising_javascript_fram...](http://sixrevisions.com/javascript/promising_javascript_frameworks#comment-24056)

<http://stackoverflow.com/users/88658/david-mark>

[http://help.wugnet.com/bravenet/webmaster/Great-Examples- cod...](http://help.wugnet.com/bravenet/webmaster/Great-Examples-code- ftopict33846.html)

<comment><USER17> Thanks for digging these up. His tone and his arguments are two different things; I find his tone hard to take, but can any JS coders weigh in on his arguments?

<comment><USER15> His arguments are nonsensical. Are there bugs in jQuery? To be sure. But he has absolutely no clue what real developers are looking for in a library. Many of the complaints in his critiques center around the fact that jQuery does things which will break browsers like Netscape 4 and IE 5. Not only does jQuery not claim to support those browsers, there are literally _no_ web developers using jQuery who care about support for those browsers.

<comment><USER18> Exactly. I would never pretend my code would run on anything less than IE6 or any brand of ancient Netscape. I'd love to know which browsers shipping today fail on:

window.blah === undefined

and require the more verbose equivalent I've seen pushed on c.l.j:

typeof window.blah === "undefined"

There's simply no market left for this sort of paleo-Javascript.

<comment><USER19> For that specific case, the more verbose version is definitely better, since the undefined property of the global object can be altered. For example, this silently redefines it for the whole page:

if (undefined = someVar) {...}

The typeof check cannot be broken in this way.

<comment><USER18> Sorry, that one wasn't the most effective example. 'undefined' is read-only in the ES3.1 specification and at some point you'll start to see code like the above failing.

22.214.171.124 undefined The value of undefined is undefined (see 8.1). This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.

It's true that it can be broken today by unintentional assignment at the global scope, but you're basically skating on thin ice as soon as you redefine undefined or one of the many built-in global object types or global mutable values anyways (Array, Element, Object, NaN for example). Ditto for adding anything to Object.prototype.

I wouldn't blame a framework for wanting to place at least some burden on the user to follow a set of basic guidelines to ensure the library functions correctly. Ideally you'd ship your development-time, unminified version of the library with a bunch of startup-time assertions to ensure that the user isn't accidentally walking over core JS objects.

Alternatively, you could workaround the mutable nature of some of the globals by defining your own in-scope. When these values are eventually made read- only, these assignments should become no-ops:

var undefined = void 0; var NaN = 0/0; var Infinity = 1/0;

This is comment is rambling a bit, but I think I can justify the position that at least some of the recommended practices of the c.l.j folk are wordy, unnecessary and out-dated.

</comment></comment></comment></comment></comment></comment><comment><USER20> I think this is "his" javascript library (can't find his name mentioned anywhere though): <http://www.cinsoft.net/mylib.html>

<comment><USER13> It was in his stackoverflow profile right? So I guess it's a safe bet that it's his. Plus the description sounds like him.

<comment><USER21> It is.

It's not all that usable ITRW.

</comment></comment></comment><comment><USER22> The worst kind of trolls are the ones that are knowledgeable and articulate, but arrogant, dogmatic crusaders.

Many programming mailing lists I've been on ended up acquiring somebody like this, at which point I usually have to unsubscribe in order to resist the temptation to get into pointless flamewars.

<comment><USER23> Actually, the worst trolls are the ones that are knowledgeable and articulate, but are more dedicated to trolling than to any particular beliefs. Dogmatic trolls are at least somewhat constrained by their dogmas.

</comment></comment><comment><USER13> He (David Mark) isn't going to get much support with his attitude.

<comment><USER24> I wish that were the case, but often it seems being controversial is a more direct path to popularity than thoughtfulness is.

<comment><USER3> He is not more popular than jQuery, however. (Or Resig for that matter.)

...Not that this should be reduced to a popularity contest.

</comment></comment></comment><comment><USER25> Hmmm. There used to be a "David Mark" back in the day that trolled the Microsoft VB newsgroups when they were very active. Trolled hard. This guy's demeanor seems very similar.

</comment><comment><USER26> I actually had to go and google the person in question. After about five or so newsgroup messages from him badmouthing other people I gave up.

Still no idea who he is.

</comment><comment><USER27> I'm completely unqualified to tell whether this guy has valid points. But Resig has led the charge on a Javascript library that makes my job dramatically easier and more fun. To gain the respect I have for Resig, Mr. Mark would have to do likewise, or contribute significantly to jQuery.

Or, to put it in more childish terms, "if you're so smart, let's see you do it."

</comment><comment><USER28> There is always some guy, I've never heard of, being an asshole on any given topic on the Internet. I'm sorry that he's picking on John/jQuery but it's really not that surprising.

I think John is being pretty pragmatic though just to exorcise the whole deal and attempt to enforce a clean room environment for the affected code branches.

</comment><comment><USER15> His latest, on a bug report I filed against google closure: [http://groups.google.com/group/comp.lang.javascript/browse_t...](http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/44bb4805cc4d9cf8)

I'd like to see him write cross browser key-event handling code without doing UA sniffing. Honestly, I would like that. He committed an attempt to a branch of Dojo but it's not in service and doesn't actually work.

<comment><USER5> And you don't know what you are talking about either. To save time, responses are aggregated here:-

[http://groups.google.com/group/comp.lang.javascript/browse_t...](http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/f829f23962c72d35#)

<comment><USER15> His response is typical. He denies saying things which can easily be disproved. He makes basic factual errors and in the same sentence validates most of the criticism in this thread:

"Cappuccino. That's something built on top of Sproutcore, right? No need to get any deeper than that."

Of course, Cappuccino isn't built on Sproutcore, but even if it was this sentence illustrates the fact that David has long ago made decisions about what he perceives to be the state of javascript frameworks, and isn't interested in anything other than those opinions, however baseless those opinions may be.

<comment><USER3> "cloverfield" is David Mark, FYI -- it seems someone went and pointed him here.

I noticed in several parts in his response, he's trying to claim credit for aspects of jQuery's development -- something that I think most people would find patently ridiculous. Given David's recent threats, if I were Resig, I'd be tempted to start using the word "defamation" and tell David to put up some evidence or shut up.

Fortunately, I'm sure Resig's more level-headed.

</comment></comment></comment></comment><comment><USER29> It would be useful that instead of praising one person and denegrating another, supporters of jquery, capucinno et al addressed each of the many concerns that have been raised about those libraries in a manner that can be objectively evaluate.

<comment><USER15> It's difficult to have a rational discussion with someone who has already staked out an extreme position and offered little to no evidence to support that opinion.

Also, it's spelled Cappuccino. And since David's superficial review contained virtually nothing of substance, there isn't much to objectively respond to.

Example:

               <script src = "Frameworks/Objective-J/ObjectiveJ.js" type = "text/javascript"></script>

         > Nice markup.

Yes, one file in 280 Slides (not Cappuccino) has spaces between the attribute, equals sign, and quote. We must be incompetent.

        > Yeah, I guess "false" is harder on the fingers.

Or, maybe, we're going for an easier transition for people from an Objective-C background...

        with (new prototype_bug())
            member = true;

        > Ugh.

How insightful. Hilariously enough, this is actually doing real feature detection to detect a real bug in real browsers.

        > I've seen enough.

So, in other words, he made no substantive evaluation. If you ask us questions, and aren't a dick about it, we're more than happy to give answers. We readily admit our own faults, and we're vocal about what our framework is _not_ designed to do.

<comment><USER29> Your post reads like an attack on a person rather than anything else. I've read tons of posts by David Mark and I've found little wrong with them technically so describe his position as extreme does not mean he is automatically wrong on everything.

Why pull things out of context and not provide a reference to the original?

You complain about the tone of his posts (someone called it snarky) and then go on to post your own snarky comments, why?

<comment><USER15> The original was referenced above, an additional reference didn't seem necessary. I don't believe the quotes are out of context, that was the majority of his post. Just so you don't have to search for it, here is the link: [http://groups.google.com/group/comp.lang.javascript/msg/1799...](http://groups.google.com/group/comp.lang.javascript/msg/17994a9a6f8f96e3)

<comment><USER29> I put mootools and jquery through jslint.com and jslint found so many things it didn't like that I wonder if the cristicism is indeed valid. Will you now publicly lambast Douglas Crockford for daring to indirectly criticise these so-called frameworks?

<comment><USER15> Doug readily admits that JSLint is opinionated. For example, it considers omitting a curly brace on a single line conditional to be an error. It considers fall through switch statements an error. It even considers differing opinions on whitespace to be an error.

It's absolutely fine to have an automated tool to enforce style guidelines. But code which disagrees with that tool isn't necessarily bad. We have published style guidelines for our project, and they differ from Doug's. Those projects may very well have their own published guidelines.

Doug has never said that code which fails JSLint is obviously retarded, or written by fools. He's never publicly insulted individuals because he didn't agree with their design decisions, or written mailing list posts saying someone has "never written a competent script in his life."

So, what's your point?

<comment><USER29> You can easily dismiss the numerous non-style related errors that JSLint finds because of the claim that JSLint "opinionated". And you can dismiss the numerous non-style related errors that one finds because you can claim a flaw in poster's personality.

The point being that I'm tired of reading responses that only focus on an insulting comment a poster makes in order to dismiss all valid technical criticism.

<comment><USER15> Then why not stop including insults with your technical criticisms?

If you include insults, purely stylistic criticism, and valid technical criticism all in an orgy of excited and angry words, people aren't going to take the time to dissect the actually interesting bits.

And, let's not forget, you're the one who claimed that jQuery and Prototype fail horribly on JSLint without providing any information on the actual errors, so the burden to prove they are not just style errors is still on you.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER30> Here is the actual David Mark post in question: [http://groups.google.com/group/comp.lang.javascript/msg/071f...](http://groups.google.com/group/comp.lang.javascript/msg/071fb5f5c6c6fe90?dmode=source&output=gplain)

</comment><comment><USER30> Dude has some decent points but has the chronic usenet disease of not being able to put them forth in any manner even approaching tact or class.

</comment><comment><USER31> Why is this even being posted to HN? Is it buzzword compliant or something?</comment>


Peak Globalization - <AUTHOR> http://blogs.hbr.org/cs/2010/12/peak_globalization.html <comment><USER2> The author seems to conflate all opposition to the current flavour of globalisation with nationalism. Nationalism in this context basically means thinking that your country and their people are best and so things made there are better - and if someone's only reason for believing that is that they were born there, or that they were brainwashed to believe it, that is irrational.

There are examples of nationalism in the United States holding back some forms of globalisation. For example, in a truly global world every country would have open borders to anyone who wanted to immigrate there, and saying that someone can't come to your country because that would take jobs from 'more deserving' locals is a form of nationalism.

However, "local food, DIY, sustainability" are not examples of nationalism. Instead, they are an expression of growing discontent about inadequate price signals for externalities like climate change and peak oil, and that much global trade is focused around avoiding environmental and labour protection laws, and exploiting third world countries, rather than genuine comparative advantages and economies of scale.

<comment><USER3> Local Food, DIY, and Sustainability are not about inadequate price signals for climate change and peak oil. They are about creating consumer surplus via PR, and nostalgia for early 20th century farming techniques. Admittedly, most people in the industry have no idea that this is what they are doing, but thats the beauty of good PR and healthy dose of nostalgia.

That is to say the reason most people pay the price premium for organo- locavore food is that it makes them believe they are better people, not because they believe that futures contracts for degree days are mispriced. Walk into a Whole Foods and ask what the appropriate prices of a heating degree day is once climate change and peak oil are priced in and they will give you a blank look. <http://en.wikipedia.org/wiki/Weather_derivatives> Hell I bet you could phone up John Mackey himself and he wouldn't have the slightest idea.

Believe me there are a lot of guys in hedge funds trying to price in peak oil through futures contracts and in the pricing the long term value of certain stocks, various forms of insurance, risk swaps.

Both climate change and peak oil can easily be traded on the various global futures markets. People who believe that climate change and peak oil are mispriced in the market not opening organic rooftop urban gardens, they are opening trading accounts (and will make a killing if they are right)

<comment><USER4> But the point is to actually do something about it, not just get rich off the prediction. Trading climate change on futures markets does not mitigate it, unless those futures are somehow tied to something else that would cause them to be priced in (like a carbon tax, or tradable emissions caps). To remove it as an externality, you have to somehow price it into the products that are causing the problem, either via decentralized consumer action, or via centralized governmental action.

I'm skeptical decentralized consumer action will succeed, and I agree that much of it is poorly targeted, but it's at least the right idea of how to tackle things: if something is not priced in, you have to take action that will force it to be priced in somehow, like preferring one product to another, boycotting some products, banning products, or internalizing the externality via a tax/fee. Just trading bets on it in a futures market doesn't do anything.

<comment><USER3> The point of getting rich from the prediction is to have the money to create the change, not idiotically growing vegetables on your apartment roof, thinking that your building's roof contains 40m2 of arable land per occupant.

Generally people use futures markets to mitigate risk. Therefore if you believe that oil is mispriced you can use a futures contract to mitigate the effects you have with regard to peak oil (increased prices). Similarly, those who may be affected by rising sea levels (coastal areas) can trade risk with those who will be insulated (inland areas).

The reason why environmentalists don't use these markets to put their money where there mouth is, is because they are much better at scaring people than predicting the future. Hence, if Greenpeace were to buy the futures contracts reflecting its peak oil predictions it would likely lose a lot of money that could better be spent scaring people and collecting membership dues. Greenpeace's expertise is fear mongering, not making accurate predictions with regard to the future price of oil, or climate. If it had such an ability it would have more than enough money to fund its operations, and would not have people on the street collecting money and talking about global warming / peak oil.

Most rational people know that we will eventually see peak oil and that prices will gradually rise making alternative forms of energy more economical in comparison. Buying expensive local food now is a waste of money, it's better to save that money in an interest bearing account and use it in the future when local and non-local food equalize in price. (Note: Shipping an apple across a continent actually uses less gas than to drive it home, note never let a locavore know this, it ruins their girl-meets-tractor fantasies of urban farming.)

See the Simon-Erhlich wager for examples of environmental stupidity with regard to economics. <http://en.wikipedia.org/wiki/Simon%E2%80%93Ehrlich_wager>

</comment></comment></comment></comment><comment><USER5> An artist did a very interesting thing a few years ago: He made a pencil from scratch.

He cut the wood, mined the graphite, melted the lead, and created the eraser from a rubbertree. His pencil ended up costing thousands and thousands of dollars. Yet you can go to the nearest office outlet and buy ten pencils for a dollar. This is because of globalisation. Someone somewhere has specialised in making pencils and churn out millions of them a year, driving the cost down to almost nothing. The same is true of almost all other products.

This is the primary reason our standard of living increases, most economists agree on this.

Protectionism usually comes around when times are bad and countries need a scapegoat and a bad guy whose fault it is. For the US it used to be Mexico, now it's China. But the fact is that open trade helps both them and us (they get to sell goods, we get cheaper pencils), besides it works both ways. Denmark, for instance, specialises in hearing aids and container shipping both of which we have a more than 50% global share of. The world gets cheap hearing aids because Denmark massproduces them, and in return Denmark gets cheap pencils and other stuff that someone else somewhere produces.

Politicians. thoughtleaders and policy makers across the world are aware of this mechanic but often use protectionism as a political weapon, knowing that it's bad for their economy.

Nations are more economically intertwined and trade more than ever before, and it's not going to stop anytime soon. There might be a bump in the road, as there often is when times are bad, but it's not going to stop.

Globalisation is here to stay, and you should be happy for it. It means that you can get a Wii for the price of a digital watch ten years ago.

<comment><USER6> This all makes sense. But. Given the high degree of specialization, livelihoods and economies get very exposed to change, which, according to the cliché is coming at an ever accelerated rate. Some people and economies get to choose how and when to switch, and according to the mantra, innovation plays a role* (some call it here wealth creation). Some don't, and this mostly applies to colonies (especially economic ones). So people loosing their living in places where they are coerced into submission become protectionist (in the form of nationalism -- one of the root causes of national socialism was, that Germany and Italy were left out of the colony pie, and didn't get what they thought they deserved to match their status).

I think everybody would agree, that in a European country, being perfectly capable of producing pears (i.e. suitable climate), it is unsustainable to have over 20% jobless, more debt than a country could ever repay in a generation, and yet import pears from China. And pumpkin seeds. With the usual socks and cutlery and electronics. Worse, this is a real example I have given. Globalization, in this current form is not here to stay. You can only get your WII for the price of a digital watch ten years ago by externalizing more and more costs (like shipping in your example). Out if sight, out of mind. This is a very important pillar of globalization, which oddly enough is turning against itself (better communication, though less true of the _active concern_ of people, which one might think as a consequence).

* This reminds me of a Russian children story. Once upon a time there was a pencil factory. Somebody had the obvious innovation, that since _nobody_ uses the last inch of lead of a pencil, because it would be too small to hold and sharpen anyway, so it makes sense to make some profit by leaving it out. Great savings, management promotion. Soon after, seeing the success, comes a new innovation: everybody knows, that the essence of a pencil is writing, and if there is no graphite, there is no need for the wood either. Cutting the useless piece of wood from the pencil would save forests and make huge profits. This cycle of logical, rational and economically sound innovation continued and iterated, until the pencil was gone. Everybody got prizes and promotion everywhere. But then came along the new innovator, who thought about putting a piece of graphite embedded into a wooden straw. Brilliant invention, huge prizes, and the pencil was reborn. The article is saying, that it is becoming readily apparent, that the pencil is about to be gone.

<comment><USER7> What are the chances that the 20% unemployed can produce pears that are price competitive with the ones shipped from China or with substitute products?

</comment></comment></comment><comment><USER8> I get suspicious when articles talk in terms of "the Chinese" and "the Americans" and "the Germans." That is painting with such a broad brush. You know you are not the same as everyone else in your country, but it is so easy to fall back on the assumption that people in other countries must all be the same. It is really hard to write insightfully about the variety and complexity of real life, so instead we get articles like this.

</comment><comment><USER9> China is a scary place, we're screwed in the US.</comment>


Fancy Context Menu for HTML - <AUTHOR> https://jamesgt.gitlab.io/grid-context-menu/ <comment><AUTHOR> Author here, just an old project finally finished and published. It'll be used in my other project soon :)

If you like it please discuss here or open an issue.</comment>


My First Facebook App - I Want One - <AUTHOR> http://www.facebook.com/apps/application.php?id=2389878632 This app provides you and your friends the ability to vote on different Amazon.com products.  You can add products via an Amazon Search or an Amazon Wish List.
Please feel free to check out the app and provide feedback.
Thanks! <comment><AUTHOR> I entered the text below into the text field on the submission form but I guess that only works for posts where the link is blank.

This app provides you and your friends the ability to vote on different Amazon.com products. You can add products via an Amazon Search or an Amazon Wish List.

Please feel free to check out the app and provide feedback.

Thanks!</comment>


Atomkeep - your profile everywhere. (Please, review my startup) - <AUTHOR> http://www.atomkeep.com

<comment><USER2> I've been looking for this type of service for a very, very long time. I went changing at least 20 profiles with new information and pictures, and that's simply annoying.

Immediate notes

\- I love the interface and design. Register and login are prominent, things are explained well, everything is clean.

\- I love that I can merge my profile info from other networks to build my AtomKeep Profile. It makes it REALLY easy to use the service at the start.

\- Freaking amazing how much information (and images) it imports into the system.

\- Obviously a big challenge of AtomKeep is adding new profiles. It has some similar veins to FriendFeed. You've hit the most important services, though. Are Google Profiles, StumbleUpon, Digg, Last.fm or YouTube possibilities?

I am rarely impressed with new services, but a tip of my hat to you, I am impressed with what I have seen so far. After I finish moving to my new apartment, I am going to be sure to write a post about this service. I'll update this comment later with future impressions about the service.

<comment><USER3> Same sentiments as parent poster. A quibble, however: I saw google talk listed thrice in the profile editor.

<comment><AUTHOR> Would you send me a screenshot to alex at atomkeep.com ? I'd like to find out what's wrong with that. Thanks.

</comment></comment></comment><comment><USER4> If I give you my Facebook credentials do you log in to my account? That's actually a good way to get _my_ account banned.

So, right from the start, there's a trust issue. I suspect the trust issue will be bigger than you think because of your target audience.

It's clear from your home page that you're targeting professionals and not, say, teenagers. That's the aesthetic, at least. But these people are going to be the most particular about what you do with their data.

That is, you're targeting the data-conscious and then asking them to give you access to their data.

<comment><AUTHOR> Unlikely, there is no way to help you, if you're unwilling to give us at least minimum. We have a workaround for import currently in development, however, we can't do much with sync feature without being able to login.

<comment><USER4> Maybe you're not understanding what I'm saying. If I give you my Facebook credentials and you log on and do stuff on my behalf, that's more than enough grounds for Facebook to delete my account.

This is what happened to Robert Scoble, for example.

There's seems to be an asymmetry, here. All I get out of it is convenience (or am I wrong?). You, on the other hand, get to sniff around my data. On top of all that I'm the one taking all the risk.

Doesn't seem like a very good value proposition to me.

This section in your "privacy policy" doesn't really me eager to jump on board, either: "Atomkeep.com may use personally identifiable information collected through our website to contact Users regarding products and services offered by Atomkeep.com and its trusted affiliates. We may also use information collected through our website for research regarding the effectiveness of the website and the marketing, advertising and sales efforts of Atomkeep.com, and its trusted affiliates."

Oh, ok, so you're going to get me to give you all my data and then you're going to target ads at me. Super-duper.

<comment><AUTHOR> The convenience is the first step, we've got more in development. Robert Scoble, as far as I recall, was trying to download all his contacts and all their information out of Facebook. And this is a little bit different to what we're doing. From the other side, I can't disagree with you on some of your points.

However, Facebook is not the only one network that we target to.

Thanks.

<comment><USER4> "Robert Scoble, as far as I recall, was trying to download all his contacts and all their information out of Facebook. And this is a little bit different to what we're doing."

Trust me, Facebook doesn't care. Having me giving your credentials and then logging in on my behalf _will_ get me banned.

"However, Facebook is not the only one network that we target to."

No, but here's a question: of your target audience what percentage have a Facebook account?

Not that it matters. Most social sites (or the smart ones, at least) have a policy against automation. LinkedIn stopped NotchUp using the same rationale, for example.

Can you be forthright? Let's say I sign up to your site and give you my Facebook and LinkedIn credentials. What, exactly, are you going to do with that information?

If I delete my account will all of my information on your servers be deleted? Will you ever send me notifications -- whether via email, IM, InMail, Facebook message, or whatever else -- that contain advertisements targeted based on the data I handed over to you?

<comment><AUTHOR> If you delete account, it will get purged completely out of servers.

No, we are not sending any kind notifications at this point of time, and we don't plan to include advertisement anyway.

What we actually planning, are new services that you can benefit from, basing on ability to manipulate the data.

In fact, you don't have to give us any credentials to other networks to use our site.

Thanks!

<comment><USER5> I agree with jfarmer, this is a no-go situation. Imagine I give you _all_ my accounts like FB and G, and then you store it in some unsecure manner and it gets hacked... Or, what if you decide to send spam on my behalf using my accounts. These accounts are too important to take "some" startups word for it.

<comment><AUTHOR> We do not store anything, but your login. You password is asked only when we do something.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><AUTHOR> Atomkeep is here to solve the problem of information redundancy. Atomkeep will keep your accounts in sync on all social networks, job boards and other sites.

Atomkeep <http://www.atomkeep.com>

Please, give me your feedback about my startup company, Atomkeep. You can be bad ;) or you can be good, any opinion counts for me. Constructive ones are better, however, I'd appreciate any help. Thank you!

<comment><USER6> What does "keep accounts in sync" mean? (Give an example of the "pain" we face doing such and add this to your homepage. Remember, it needs to "click" in 3 seconds.)

<comment><USER7> One more "pain" - looking for job and having your resume and info the same on all those job boards.

<comment><USER8> JobScore.com

<comment><AUTHOR> As the most of such systems, JobScore wants to own your profile. From the opposite, Atomkeep wants other networks to own your profile and it'll do the "dirty" job for you on syncing it. JobScore will never be as much effective, as just keeping your resume in Monster, Dice and Jobster simultaneously. JobScore looks like a good partner for Atomkeep, though.

</comment></comment></comment></comment></comment><comment><USER9> Good idea, good execution. But I think you should focus on benefits on the frontpage. If you tell me I can keep my photo albums in sync accross all my accounts, that is more interesting and more of a benefit than the somewhat abstract 'sync your profile'

<comment><AUTHOR> Thanks, good point. Actually, I am looking for a professional marketing person and copy-writer, who can develop good copy for the site. Any references?

</comment></comment><comment><USER10> I flat out can't get it to work. I can't login to two of my accounts (slide and wordpress) and of the other six I did long into, only 2 would acutally sync. I was given different reasons: image too large in twitter, some code error in Facebook; not integrated with my space; and another I can't remember. So less than 18% synced. The feature I REALLY want to see is the ablility to actually post to all of these for those of us with small businesses who need to be on all of the social networks in order to reach all of our target audience. That's the product I'm looking for.

</comment><comment><USER11> Assuming you're located in Pasadena, it's nice to see another startup nearby.

I really love the design and execution. Keep up the good work.

<comment><AUTHOR> Thanks. Drop me an email and we may arrange a meeting with a beer or coffee if you're close by ;) However, we're about to move to SF area in the mean time.

</comment></comment><comment><USER12> Great idea. What is your business model?

<comment><AUTHOR> Hopefully, I've answered it here <http://news.ycombinator.com/item?id=231570>

Feel free to drop me an email to alex at atomkeep.com and I can tell you more. Thanks.

</comment></comment><comment><USER13> I'd personally cut back on all of the "tabs" in your layout. Really confusing and there's probably a better stylistic solution to what you're trying to accomplish.

<comment><AUTHOR> I don't think there is something in design that everyone would be happy about. We've tried several things on UI, before we came up with the tabbed layout. I'd be very thankful for your practical suggestions, though. Thanks.

</comment></comment><comment><USER14> Good idea... but, how do you intend to make money with it?

<comment><AUTHOR> Thanks for asking.

Currently, we target three different sources of revenue: 1\. Subscriptions 2\. Advertisement 3\. Strategic partnership

There are few more, less straight-forwarded ways, but those three should be enough for the first days.

</comment></comment><comment><USER15> I've been playing around with this idea for a while now.

Excellent you guys are far enough along to have a beta!

As jfarmer points out, there are some tricky issues around terms of service -- most sites do not want bots coming to harvest this data.

<comment><AUTHOR> Our goal is not harvest data, but to export it. That's the point. I agree that it's easier to see the intentions to "steal" data from other networks, but this is not our point.

<comment><USER4> Given your privacy policy (<http://atomkeep.com/member/privacy>) that's a little hard to swallow.

These two sections stick out:

"Atomkeep.com may use personally identifiable information collected through our website to contact Users regarding products and services offered by Atomkeep.com and its trusted affiliates. We may also use information collected through our website for research regarding the effectiveness of the website and the marketing, advertising and sales efforts of Atomkeep.com, and its trusted affiliates."

"Atomkeep.com will not disclose information about customers or users without express permission unless the release of said information is required by a trusted affiliate to facilitate action requested by the client, or is required by government subpoena. However, we may transfer information collected from Users in connection with a sale of our business."

<comment><AUTHOR> We'll need to take time and write it in a more proper way. Thanks for pointing this.

</comment></comment></comment></comment><comment><USER16> OpenID is the first step. OpenProfile is the next in line.

<comment><USER7> Atomkeep is not OpenProfile. Idea is to do manual job for the user, just facilitate the usual boring process. Like "Autofill" in your browser did it many years ago :-) Doing just same what user will do, but just filling the fields for him.

</comment></comment><comment><USER17> what does the name mean?

the text at the top, especially the bold stuff, is too prominent and takes too much vertical space. you don't want new users to read that.

<comment><AUTHOR> The name is stands mostly for "keeping the bits of your personal information".</comment></comment>


Making Noise (Ken Perlin) - <AUTHOR> http://www.noisemachine.com/talk1/index.html

<comment><USER2> N.B. One drawback of lattice gradient noise is that the output is 0.0 at the lattice points. One trick used to avoid this artifact is to rotate your coordinate system in a higher dimension. If you want 3D noise, rotate your 3D space and take a slice through 4D.

Similarly you need to be careful of artifact when generating fractional brownian motion. I believe it was Worley who suggested rotating/translating your coordinate system for each octave.

As part of a map making project I need noise, so I wrapped toxiclibs noise code up to make it nicer in clojure. (<http://github.com/bhickey/pandaemonium> LGPL, contributions welcome!) I plan on implementing this all on the GPU when I get a chance.

Coherent noise is fun: <http://imgur.com/Y92QJ.png>

</comment><comment><USER3> "Now you have 2n of these values. Interpolate between them down to your point, using an S-shaped cross-fade curve (eg: 3t^2-2t^3) to weight the interpolant in each dimension. This step will require computing n S curves, followed by 2n-1 linear interpolations"

I don't get this part. If it's 2D and I have 4 grid points, how does that figure into the S-shaped cross-fade curve? ie, I see a parametric function with time, but I'm not sure where the grid point dot products figure into it.

Anyone care to illuminate, or point me to some article?

</comment><comment><USER4> > The technique is called hypertexture, officially because it is texture in a > higher dimension, but actually because the word sounds like "hypertexture"

i'd love to know what this means.</comment>


Is Apple ceasing to report unit sales because the iPhone has peaked? - <AUTHOR> https://9to5mac.com/2018/11/06/aapl-stock-2/ <comment><USER2> Last paragraph: "Have iPhone sales peaked? In the short-term, maybe; in the long-term, not at all."</comment>


How to Finally Beat Procrastination (podcast) - <AUTHOR> https://soundcloud.com/artofmanliness/356-how-to-finally-beat-procrastination <comment><USER2> I listen to it later.</comment>