Ubuntu still isn't free software - <AUTHOR> http://mjg59.dreamwidth.org/45939.html <comment><USER2> Read [https://www.ubuntu.com/legal/terms-and- policies/intellectual...](https://www.ubuntu.com/legal/terms-and- policies/intellectual-property-policy) before believing that alarmist stance:

 _Any redistribution of modified versions of Ubuntu must be approved, certified or provided by Canonical if you are going to associate it with the Trademarks. Otherwise you must remove and replace the Trademarks and will need to recompile the source code to create your own binaries. This does not affect your rights under any open source licence applicable to any of the components of Ubuntu. If you need us to approve, certify or provide modified versions for redistribution you will require a licence agreement from Canonical, for which you may be required to pay. For further information, please contact us (as set out below)._

<comment><USER3> The author does not claim it isn't open source, the author claims it doesn't comply with the four freedoms.

> and will need to recompile the source code to create your own binaries.

I believe the author specifically calls out this document themselves, and emphasises the phrase above, as being the problematic portion. And while canonical does also say "For further information, please contact us (as set out below)", they have not clarified this concern despite being contacted and asked.

<comment><USER4> Could this possibly refer to situations where the original binaries contain trademarked content?

<comment><USER5> I believe this is the only rational explanation.

The other, non-trademark-containing software, is distributed under a FOSS license (both the source and the binary derivative), and I don't see how anyone could be legally forced to rebuild the binary.

The copyright situation is clear, the legal leg this is standing on seems to be the trademark situation.

</comment></comment></comment></comment><comment><USER6> Could someone explain this a bit more in detail? Because this sounds like what Debian did with Iceweasal. Because they modified the source of Firefox they had to remove all Firefox branding from the software.

It totally makes sense that if some cloud hosting provider modified Ubuntu and then called their image Ubuntu, any issues unrelated to the vanilla version would damage Ubuntu's reputation not the cloud provider's.

This is the same thing with Red Hat and Centos, right?

<comment><USER7> The Ubuntu images OVH ships (I assume they're the european provider) are bundled with an old, unpatched kernel and you need to install the one from the repos manually.

Other than being unpatched/possibly insecure, it has a few features disabled: the last time I managed an OVH instance, it wasn't possible to run docker over their kernel.

Of course Canonical doesn't want that image to be called "Ubuntu", and as an user I don't want that either.

<comment><USER8> FYI, apart from the kernel, OVH's "Ubuntu" image also adds their SSH key to the root user ([http://help.ovh.co.uk/InstallOvhKey](http://help.ovh.co.uk/InstallOvhKey)) and pre-installs some monitoring daemon.

<comment><USER9> Is adding root SSH keys common practice in the hosting world?

<comment><USER10> Yes, either that or a dedicated sudo-enabled account. It's a slight step up from the older setups where they had a dedicated account with a common password known to all the second-level and higher techs.

It's because 90% of users don't know what they're doing and at some point will ask for support, and they probably won't be able to get the techs access when needed. It sucks for the 10% who are capable and willing to operate their servers independently.

Source: I've worked at hosting companies.

</comment></comment></comment></comment></comment><comment><USER11> I fail to see the problem- either don't change the image in a meaningful way or recompile without the name ubuntu and call it something else.

Seems ok to me. Also, using the Ubuntu name for a product not made by canonical without permission is against trademark law, so the argument made seems moot.

A few restrictions does not automatically make something "not free". In fact copyleft "free software" has tons of restrictions.

<comment><USER12> That isn't enough. Mark Shuttleworth had said you cannot simply remove all trademarks, that may not be sufficient. they don't document what needs removing, and thus it's fairly difficult to actually "just" removing trademarks.

</comment></comment><comment><USER13> Recalling back a couple of years ago when people talked about this, Ubuntu added _" This does not affect your rights under any open source licence applicable to any of the components of Ubuntu."_, resulting in that copyleft software is unaffected by the condition but permissive license must be recompiled. A rather imperfect situation, and it seems that no much has changed since 2015.

[https://www.fsf.org/news/canonical-updated-licensing- terms](https://www.fsf.org/news/canonical-updated-licensing-terms)

</comment><comment><USER14> I have to admit I was (and am) anti-ubuntu, because of stuff like this from Mark and Canonical, but for a while it was the only distro that _just worked_ with no problems on my work macbook pro, so I succumbed for practicalities sake. Now that I am working on my own projects full-time, I have switched to fedora on my desktop.

My main reasoning as a sysadmin for distro choice goes like this:

For server, debian, centos, opensuse. For a business that has strict support requirements, debian can become ubuntu, centos can become rhel, and opensuse can become suse.

For desktop, it's generally preferable to me to be running in the same ecosystem as the servers you are supporting in the majority. So if debian on servers, debian for desktop, but being sometimes less reliable on desktops, ubuntu makes a good replacement. If centos on servers, fedora on workstation. You get the idea.

Of course you should pick what works best for you, the point being here to this longwinded comment is that, if you don't like ubuntu but like the ubuntu base system, I suggest you pain your way through debian instead, which is a much freer distro, but often doesn't hold your hand nearly as much either.

Remember, Stallman was/is right.

<comment><USER15> Yeah, Ubuntu was revolutionary when it came out, because it made Debian accessible to a much broader audience and fixed all sorts of small but important hangnails, at a time when that was exactly what was needed.

Today, the gap between Ubuntu and Debian on cloud servers is fairly narrow: third-party packages tend to be built for Ubuntu, but Debian is fine. The big difference is that Ubuntu LTS releases have long, guaranteed support periods, which is very useful for business planning. I'm not going to comment on the Ubuntu desktop.

</comment></comment><comment><USER16> One of the things about releasing source code under various licenses is that it can't be made purposely difficult to maintain: e.g. you can't release obfuscated garbage that "technically" compiles into the binary that you released, you must release the code that you actually maintain so any type of modification is feasible.

Why doesn't that also apply when there are rules about "removing" things? It could be extremely difficult to figure out all the places that specify something, especially if the wording is not absolutely consistent. I would hate to fix 99 of them and still be sued by missing the 100th.

 _If_ a project wants to have a rule like this then they should say exactly how to comply. For example, don't say "you must remove"; say "to replace the trademark, edit script_that_everything_uses_to_set_this", or "here is the exhaustive list of files to change when replacing the trademark", or whatever.

</comment><comment><USER17> Canonical should be cautious about this kind of actions. They should learn the lessons from CentOS and how it impacts RedHat revenue.

RedHat has a clear and defined business model (I don't like it, but it's well defined). Nobody knows the business model of Canonical, so an Ubuntu fork/clone could kill them.

<comment><USER18> Mint is already killing them on the desktop, how long before a "Mint server" arrives?

And yes, Debian for servers, but some people wants more up to date software.

<comment><USER19> Really? I am yet to see a Mint installation live.

Around me and our customers it is all about Ubuntu and Red-Hat.

<comment><USER18> I'm in Europe and even some non-tech know what a Linux Mint is. And a lot of newbies I help to install Linux on their laptops explicitly ask for it as well. Many are lost with Ubuntu/Unity interface and are much more happy with Cinnamon on Mint.

</comment></comment></comment></comment><comment><USER7> I guess the Canonical announce is the follow-up of the tweet the OVH owner sent a few months ago:

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

<comment><USER20> That person from OVH is a character.

You can install an "Ubuntu" on OVH, but the kernel is a modified kernel. When you try to install standard services that are meant to work with Ubuntu, they do not work with the "OVH Ubuntu".

Apparently, Ubuntu contacted OVH to make the Ubuntu kernel closer to the stock Ubuntu kernel but OVH did not bother to do anything about it.

Then, Ubuntu told them that they break the trademark and one of the things they can do is get a license for the existing messy "OHV handicapped ubuntu", so that they keep providing this mess.

At that point, the founder of OVH went on twitter and a shitstorm ensued.

The whole affair reflects badly on the OVH founder. But many people will keep another impression in their mind.

</comment></comment><comment><USER21> Finding this a little late by HN standards, but this author is full of nonsense.

From [https://www.gnu.org/philosophy/free- sw.en.html](https://www.gnu.org/philosophy/free-sw.en.html)

"Rules about packaging and distribution details

Rules about how to package a modified version are acceptable, if they don't substantively limit your freedom to release modified versions, or your freedom to make and use modified versions privately. Thus, it is acceptable for the license to require that you change the name of the modified version, remove a logo, or identify your modifications as yours. As long as these requirements are not so burdensome that they effectively hamper you from releasing your changes, they are acceptable; you're already making other changes to the program, so you won't have trouble making a few more."

And yes it says in explaining freedom 2 & 3:

"The freedom to redistribute copies must include binary or executable forms of the program, as well as source code, for both modified and unmodified versions. "

But I argue being required to remove Canonical/Ubuntu legally protected artifacts does not in anyway "effectively hamper" someone from releasing their changes.

But regardless, so what? Calling them out won't change anything. When does that ever work? They've crafted a justification. The only way to get them to change is stop using Ubuntu.

</comment><comment><USER22> If something is called 'Ubuntu', I expect Ubuntu to be inside and not some (heavily) modified code. Wouldn't want my own open source software to be associated with a (maybe faulty) derivative either.

<comment><USER23> Quoting the article: _If someone claims that something is Ubuntu when it isn 't, that's probably an infringement of the trademark and it's entirely reasonable for the trademark owner to take action to protect the value associated with their trademark. But Canonical's IP policy goes much further than that - it can be interpreted as meaning[1] that you can't distribute works based on Ubuntu without paying Canonical for the privilege, even if you call it something other than Ubuntu._

</comment></comment><comment> happy-go-lucky That isn't new and may and/or can not be in the near future :)

</comment><comment><USER24> The thing is (at least of late 2016) that Debian > Ubuntu, and nobody wants to fork a fork that is worse than the parent.

<comment><USER25> Ironically, Ubuntu is the only distribution I can't figure out how to install on my desktop (I run debian, centos, and gentoo just fine). Some problem with refresh rates or resolution of my monitor, so Ubuntu's installer can't start.

5-15 years ago, I recommended Ubuntu to others because of the ease of their installers. These days I recommend Debian.

</comment></comment><comment><USER26> The idea that it's impossible to distribute an Ubuntu-based distribution will surely come as a surprise to Mint.

<comment><USER27> There is a big difference in basing your distro on Ubuntu, but naming it something else and basing your distro on Ubuntu and still calling it Ubuntu.

<comment><USER28> Not according to Canonical, or this article: every redistribution of Ubuntu's binary packages, under what name or flag whatsoever, requires written approval from Canonical.

</comment></comment></comment><comment><USER29> Do these distros point to Ubuntu's software center? Making your own distro, but pointing it at Canonical servers would be an issue as well.

<comment><USER7> The problem here is not about the repositories, but that an hosting provider installs broken Ubuntu images to its customers calling them "Ubuntu", which is infringing the trademark policy.

</comment></comment><comment><USER30> Should read "Ubuntu is trademarked".

news.ycombinator.com is free. Also, trademarked. 7/11 slurpies are free on 7/11\. Also, trademarked.

<comment><USER31> That is the concept the article introduces and then contrasts with what Canonical is doing.

</comment></comment><comment><USER32> Please, not this clown again.

> For avoidance of doubt, any comments arguing this point [my point of view] > will be replaced with the phrase "Fart fart fart".

[https://mjg59.dreamwidth.org/32778.html](https://mjg59.dreamwidth.org/32778.html)

<comment><USER33> That was an entertaining way of dealing with the absurdities of gamergate.

<comment><USER32> Replacing comments which you apparently can't refute with the phrase "Fart fart fart". Indeed, very entertaining and mature.

<comment><USER34> Of course, the point is that they can't be refuted. They're not claims for which a refutation is a well-defined concept.

Sartre once wrote this about anti-Semites, but it applies equally well here (and, to be clear, I am making no implication about whether the people using the same tactics today are also anti-Semites, just that they're using the same tactics):

"Never believe that anti-Semites are completely unaware of the absurdity of their replies. They know that their remarks are frivolous, open to challenge. But they are amusing themselves, for it is their adversary who is obliged to use words responsibly, since he believes in words. The anti-Semites have the _right_ to play. They even like to play with discourse for, by giving ridiculous reasons, they discredit the seriousness of their interlocutors. They delight in acting in bad faith, since they seek not to persuade by sound argument but to intimidate and disconcert. If you press them too closely, they will abruptly fall silent, loftily indicating by some phrase that the time for argument is past. It is not that they are afraid of being convinced. They fear only to appear ridiculous or to prejudice by their embarrassment their hope of winning over some third person to their side."

The only winning move, for those of us who believe in words, is not to play.

<comment><USER32> Comparing people who were trying to remind what the whole affair was really about (corruption in journalism) to antisemites.

Well, it was hard to beat mjg59, but it seems you've managed to do so. He just censored them, in a childish way.

<comment><USER33> It was never about "corruption" in journalism, especially not in gaming journalism. If it had been, it would have focused on AAA devs rather than a random indie developer who was a woman.

[https://www.theguardian.com/technology/2016/dec/01/gamergate...](https://www.theguardian.com/technology/2016/dec/01/gamergate- alt-right-hate-trump)

<comment><USER34> You're falling for the trick. 'piotrjurkiewicz isn't using words responsibly - I specifically and clearly said that I'm not comparing anyone to anti-Semitism as a belief, just the pattern of rhetorical arguments, and yet that was the objection. You are obligated to take seriously the claim that this is about ethics in journalism, when it simultaneously is and isn't, and yet 'piotrjurkiewicz feels no obligation to take what I said seriously.

In any case, the rest of Sartre's essay is completely on point. Among other things, it addresses this exact ability to believe a thing and its contradiction, and make it only a problem for the people who are trying to argue against them in good faith - it's quite scary how accurately Sartre in 1944 was able to understand these modes of trolling (and trolling is really the term for it). Harvard has the first chapter online:

[http://isites.harvard.edu/fs/docs/icb.topic468841.files/Sart...](http://isites.harvard.edu/fs/docs/icb.topic468841.files/Sartre__Anti- Semite_and_Jew.pdf)

There's an interesting question in there of what, exactly, the anti-Semite is going to do once they're not able to hate the Jew. That's the only thing Sartre couldn't see in 1944, but he did see that it's not about anything the Jewish people are or do, but as the _other_. Today we've declared anti- Semitism unacceptable, but we've got enough other others.

<comment><USER35> If you can figure out a way to make introduce your general argument without referencing anti-semitism, you will be much less open to hijacking of the conversation in just the way you observe here. Especially in online discussions, introducing flame-war inducing topics even in passing is likely to derail the conversation.

<comment><USER36> I don't think you read his comment very carefully. He was quoting Sartre, about trolling. He doesn't get to choose what Sartre wrote about!

<comment><USER35> I understand 'geofft was quoting Sartre (and it's a great quote). I'm arguing that while the quote might be useful and perfectly appropriate to the context, that it's a poor choice to introduce in an online discussion where the interlocutors are already adversarial. Anti-semitism is accidental to the argument, but is easy for someone to uncharitably grab on to, derailing the discussion and leading to a flame war. 'geofft even points this out:

 _You 're falling for the trick. 'piotrjurkiewicz isn't using words responsibly - I specifically and clearly said that I'm not comparing anyone to anti-Semitism as a belief, just the pattern of rhetorical arguments, and yet that was the objection._

If the goal is to have a useful discussion, if you can come up with different quote or analogy that does not include anti-semitism, in my opinion the discussion would be better served.

<comment><USER36> I think you, too, are falling for the trick he was describing, of taking someone at their word who is manifestly unwilling to be held to their own word. It's hard to read 'geofft's comment and think of a way he could have been clearer that he was not calling commenters anti-Semites.

<comment><USER35> I feel like I'm being daft here. I'm going to beg your patience and ask a favor: if there's something I'm saying that you agree with, or that you at least don't think I'm wrong about, would you point it out? I can't tell I'm completely off base or am just missing subtle (or somewhere in between).

I agree that 'geofft is making very clear from the outset that the quote is being used to illustrate the tactics only, that no parallel is to be drawn with respect to anti-Semites. I also know that I sometimes accidently miss points when reading someone's comment, particularly when they're discussing another side of the topic under discussion. Gotta fight against my tribal bias, and understand that others may be trying–and sometimes failing—to do the same.

Here's how I view the discussion between 'geofft and 'piotrjurkiewicz.

\- 'geofft makes a point, illustrated with a quote by Satre describing a rhetorical tactic of anti-Semites.

\- 'piotrjurkiewicz behaves exactly as Satre describes.

\- 'pjc50 falls for the rhetorical tactic Satre describes.

\- 'geofft points this out

\- I argue that by choosing different words to make the same point Satre does might defend 'geofft from the tactic.

From my point of view, 'piotrjurkiewicz is being either uncharitable, or misreading 'geofft by accident or ignorance, most likely the first. I could point this out, but if 'piotrjurkiewicz is arguing uncharitably, it isn't going to make a difference, and most likely antagonize them, effectively feeding the troll. I see 'geofft as an honest, good faith interlocuter, so it's more worth my time to engage with 'geofft. I'll learn regardless, that something about my assessment about 'geofft or the discussion was mistaken—the latter appearing increasingly likely.

You're implying that regardless of the words 'geofft uses, 'piotrjurkiewicz is going to uncharitably interpret them, correct? Which does again parallel the point of the Sartre quote. I can see how your assessment that I might be falling for this is accurate, and I do purposefully leave myself open to that to some extent, at least until I see that that's the case (I hope). By choosing words that are less likely to distract from the point I'm trying to make, hopefully I can make that assessment more quickly, by pushing them to the point where "they will abruptly fall silent", giving them the least amount of room to maneuver and play.

I can also see how this can be folly. Looking up where this quote is taken from ("Anti-Semite and Jew"), I also find this quote: "The rational man groans as he gropes for the truth; he knows that his reasoning is no more than tentative, that other considerations may supervene to cast doubt on it." I understand that viscerally.

My head's spinning a little bit, having a discussion about discussion tactics about discussion tactics—have I incepted enough? Maybe Sartre was trolling? ;)

Thank you for pushing me on this. I'm learning, er, groaning a lot.</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment>


If you didn't run code written by assholes, your machine wouldn't boot - <AUTHOR> http://rusty.ozlabs.org/?p=196

<comment><USER2> Generally speaking, I don't know why anyone could/would look at someone's skills and think anything other than "damn, they are good at that specific thing". If you apply any moral, ethical or role model paradigm to them, you will surely be disappointed. This goes for programmers, athletes, politicians and every other person in the world.

I don't think positive or negative of anyone until they prove otherwise, but I do note that I'm quite pleasantly surprised when someone with great skills turns out to be a genuinely nice person. Though, I am not surprised when they turn out to be assholes.

Bottom line, don't mix someones demeanor or attitude with their skills.

<comment><USER3> I might just be lucky, but I've had the opposite experiences in my corner of academia. Most jerks turn out to be at best moderately skilled in a narrow technical area of competence, while most brilliant people are quite pleasant and even humble.

Most of the dismissive/arrogant people I've met at conferences tend to be moderately intelligent junior professors with a chip on their shoulder. Meanwhile, the genuinely brilliant and famous folks are enjoyable to talk to; three of the nicest people I've met at a conference are probably three of the most famous (Robert Moog, Craig Reynolds, and Espen Aarseth).

Some could be the particular social dynamics of this area, e.g. junior professors are still trying to climb a career ladder and feel they need to network at conferences with important people, while already-established people are happy to talk to grad students. (And of course there are exceptions.)

<comment><USER4> Alternately, the causality could go the other way: i.e. people who are humble and friendly and who treat everyone they talk to with respect and genuine interest (as opposed to sucking up to those above and ignoring those below) might end up famous because people enjoy working with them.

<comment><USER5> Yes, and the mechanism for this is no mystery. Academia is a political game. Your peers vote to give you tenure. They vote, anonymously, on whether to publish your papers. They vote, anonymously, on whether to give you grants. If you want smart students, you have to recruit them. Et cetera.

You do have to be smart, but you also have to make friends.

(And, let me hasten to add, there's nothing particularly wrong with this. The point of academia is to build knowledge by connecting with your students and your peers: Teaching, and learning. Socializing is the name of the game. If you want to hide in your closet being an isolated cranky genius you don't need the university, and vice versa. Well, except maybe for the libraries. There's a reason why research libraries have the reputation of being filled with slightly crazy cranky people. ;)

</comment></comment></comment></comment><comment><USER6> As I understand it cancer cells can only use sugars for energy. If you fast your body starts metabolising fat, releasing ketones. Normal cells can use ketones for energy, but cancer cells cannot. Hence, fasting could be a way to manage cancer. So at least one of the people mentioned in the post might not be a crackpot.

Here's a bit of academic work on the subject:

"The goal of the current study was to test the hypothesis that ketone bodies can inhibit cell growth in aggressive cancers ... all cancer lines demonstrated proportionally inhibited growth ... The results bear on the hypothesized potential for ketogenic diets as therapeutic strategies."

<http://cancerci.com/content/9/1/14>

<comment><USER7> Wrong thread?

<comment><USER8> Perhaps you didn't read all of it?

Anyway, the person mentioned in this subthread did reply in a comment on the original post. (<http://rusty.ozlabs.org/?p=196#comment-721>)

<comment><USER7> Thanks. I guess I should read more carefully.

</comment></comment></comment></comment><comment><USER9> Evelyn Waugh's words capture this rather well and applies to a much wider field: 'Humility is not a virtue propitious to the artist. It is often pride, emulation, avarice, malice - all the odious qualities - which drive a man to complete, elaborate, refine, destroy, and renew his work until he has made something that gratifies his pride and envy and greed. And in so doing he enriches the world more than the generous and the good. That is the paradox of artistic achievement.'

</comment><comment><USER10> What the author doesn't realize is that he, too, is being an asshole simply by dismissing all these people who have different opinions or a different moral compass from him. Calling someone a "gun nut" and trivializing the change from GPLv2 to GPLv3 doesn't automatically make them wrong.

<comment><USER11> Sorry, perhaps it didn't quite work. Too subtle?

I was trying to combine the insinuations that we are generally too ready to call each other names and that all our judgements are relative.

</comment></comment><comment><USER12> I wonder if this explains why some of my best programming productivity comes when I'm totally pissed off at something -- for example, having to manually do a task for the nth time or _not_ having fixed that bug yet. Eventually it gets to the point where I can't stand it and I pound out wonderful code. Perhaps it's a combination of that and implementing a solution to a "hair on fire" problem.

Maybe people who are rockstar hackers all the time have a little more piss and vinegar in them to fuel their coding.

<comment><USER13> This is how a programmer I deeply respect described her more aggressive years. (Piss and vinegar)

She attributed the same notion to a young programmer I hope will be able to make an impact on other coders.

Sounds like it might (piss and vinegar) might contribute to people hackin' stuff out that hadn't been tackled before.

I got pissed at Emacs the other day and solved a problem that had been bugging me, for example.

</comment></comment><comment><USER14> I thought this was going to be a rant about the people who write BIOSes :-)

<comment><USER15> That's funny: exactly what I thought. The general shoddiness of BIOSes are the reason why I always have kept interest in <http://www.coreboot.org/> (formerly known as LinuxBIOS), but I have yet to acquire a compatible motherboard.

</comment></comment><comment><USER16> On the other hand, the author of the article, Rusty Russell is most definitely _not_ an asshole. Really nice person and super kernel hacker. Good guy to meet if you get a chance.

</comment><comment><USER17> There probably is _some_ personality characteristic that is similar among great FOSS hackers that makes them volunteer their time. Maybe passion, curiosity, idealism... none of those are incompatible with being a nutjob or asshole.

</comment><comment><USER18> A corollary is that people who have done nasty / unpleasant / illegal things, might actually be nice people who ended up in a situation they weren't prepared for or able to handle. Judging people is a very tricky business.

</comment><comment><USER19> "Assholes"?? You don't know the half of it. Some of us are still running ReiserFS.

<comment><USER13> Oh how my hopes rested on Reiser4...

</comment></comment><comment><USER15> I'm almost sure half of the people who run my software on a daily basis don't agree with my political views. I don't think they care about that - in the same way I don't care whether a loaf of bread I just bought has been baked by a socialist baker or not.

<comment><USER20> In my experience, socialists make great bread.

</comment></comment><comment> dorian-graph Interesting. I was thinking about something the other day on my way home from university and it was nothing profound or new.

People often say things and appear to be what they say though only on face appearance and they do themselves believe it to be true. I then considered how someone's true character, beliefs and the like are shown in their actions and in their work - or rather, the things they create ...

<comment><USER21> That's why intelligent people deceive by their actions. See Operation Fortitude for an example.

<comment><USER22> Thanks. Link - <http://en.wikipedia.org/wiki/Operation_Fortitude>

</comment></comment></comment><comment><USER23> People usually tend to construct a perfect image of a person they admire. For example, this is the case for many famous actors and actresses. Some of them play heroes and almost perfect people in movies. But these movie-good-guys in many cases turn out to be ass-holes-in-real-life.

Or consider some beautiful fashion models looking at you from covers of big magazines. People tend to transfer their beauty (which is only due to good make-up in many cases) to their personality. They construct an image of a perfect women usually forgetting the what they see is just a picture in a magazine.

When we meet people we admire in everyday life we can be badly disappointed by reality... unfortunately.

</comment><comment><USER24> It seems to me that it's the point of open-source software : To allow anyone who can improve the software to do so, regardless of who they are and what they think.

<comment><USER25> Actually, nutjobs tend to be quite passionate people when you think of it.

</comment></comment><comment><USER26> What is considered as "good/ethical/moral" is relative...to individuals and time...few hundred years back, to even think that earth goes around sun, was considered not good/unethical/amoral by lot of folks...

</comment><comment><USER27> This is almost like saying people good at getting a ball to the right place aren't always straight arrows.

Is it me or is this information already available in 5th grade?</comment>


Ask HN: Please review my webapp: Sit4.Us - <AUTHOR>

Hey everyone, I created a little webapp to make scheduling a babysitter easier and I'd love your input.
You can find it here: http://sit4.us
I got sick of calling around to a bunch of teenaged girls trying to find someone to babysit our kids so that I could take my wife out on Friday nights.  I thought it would be much easier if I could just shoot an email out to all the people in our pool of babysitters and the first one to reply back that they can do it gets the job (and everyone else is notified that the gig has been taken).  So that's basically what this app does, it's just a way to manage requesting a babysitter from within your personal network of babysitters.
Please let me know what you think, both about the site and about the idea in general.  I don't really care that much if it doesn't become the next big thing (which I'm sure it won't), because it's already making my life easier just in the last week that I've been using it.  Even if I'm the only one who ever uses it it's totally worth the $9 domain registration and 2 or so days of work it took to throw it together using Django.
Thanks in advance!
Mark <comment><USER2> Disclaimer: I just finished reading "Don't Make Me Think" so I'm probably just being arrogant when I list all of these possible changes. I know it's hard to hear so much criticism so let me add this: _I like it_

Here are three things I would do right away:

1\. Usability testing

2\. Usability testing

3\. Usability testing

The site is pretty good for usability but there were a few things that I didn't get right away. My list of possible changes:

1\. Feedback link: I thought this would take me to a page of testimonials or maybe to a UserVoice page. I think "Contact Us" would be more appropriate.

2\. About link: I thought this would be a page about the developers and who they are and where they're from. I'd probably change this link to "How It Works"

3\. Too much text: as the maxim goes "Get rid of half the words on each page, then get rid of half of what's left"

4\. Add request page: If you have no contacts it just displays nothing. You should probably put a little field in there that allows you to add contacts directly from that page.

5\. Contacts: Change it to "Babysitters". Contacts is kind of ambiguous.

6\. Contacts page: I would show the "Add Contact" field above the list of contacts instead of having a link to it on another page. It's such a small form that it won't matter that much.

7\. Editing contact: add a "Cancel" link

8\. Editing icon links: I'd move them to right instead of the left just because I'm more used to seeing them there.

9\. Home page: I'd change "Welcome to Sit4us" to something that tells people what the site does. Like "Organize your babysitters" or "Contacting babysitters made easy".

10\. Tagline: Add a tagline below your logo

11\. Make logo clickable. Should send you to the homepage.

Anyway I'll stop now. So far I quite like it despite my list of nitpicks.

What is your monetization strategy, if you have one?

<comment><AUTHOR> Wow, thank you for the amazingly helpful feedback! I fixed most of the issues you raised, and I really appreciate your invaluable feedback. It can be really difficult for me to cut back on text, I'm such a longwinded person by nature, but I definitely see the need for it.

Thanks again!

</comment></comment><comment><USER3> I have no need for babysitters, so I can't comment too much on the idea. However, I think you could make it more general (usable for types of jobs other than babysitting) fairly easily too and then it might be more useful to a larger number of people--although I know that's not necessarily what you're going for.

One minor UI nitpick: the hover effect on the navigation links is very difficult to see on some monitors. I'd make it less subtle.

</comment><comment><USER4> A couple of things: if you own sit4us.com you may want to redirect to your site (judging from what you've said, I'm not sure that you do).

I was working on a project awhile back, and we used the name "bets4.us". People would try to go to our site in about this order:

      bets4.us
      betsforus.com
      bets4us.com
      betsfor.us

Also, it would be nice to have a demo up so that I don't have to give up my email address just to see if I want to register.

<comment><AUTHOR> Unfortunately I don't own sit4us.com, but sitfor.us is available, so I might grab that one too.

Do you think a video demo (similar to the short clip Thymer.com uses) would be helpful?

Thanks!

<comment><USER4> A video demo, or even screenshots would be nice. Just... _something_ so I have an idea if the service you're offering meets my needs. (The theoretical "my", that is - I don't have kids so I'm not your target market.)

</comment></comment></comment><comment><AUTHOR> Clickable link: <http://sit4.us></comment>


Type A and Type B personality theory - <AUTHOR> http://en.wikipedia.org/wiki/Type_A_and_Type_B_personality_theory <comment><USER2> Interestingly the entry doesn't mention that the original finding was linked to an observation about the worn out chairs in the doctor's reception.

The cardio patients (type A's) wore out the front edges of the chairs because they were sitting on the edge all the time.

</comment><comment><USER3> Also of interest is Type D personality which has been correlated with cardiovascular issues and poor medication adherence: [https://en.wikipedia.org/wiki/Type_D_personality](https://en.wikipedia.org/wiki/Type_D_personality)

</comment><comment><USER4> Type A here...</comment>


Ask HN: Most important tech information sources? - <AUTHOR>

What are the most important tech information sources for you (apart from HN)? <comment><USER2> A handful of reddits (/r/programming, /r/agile, /r/semanticweb, /r/machinelearning, /r/artificial, etc.), twitter (yes, believe it or not, IF you follow the right people), a few general purpose tech news blogs like TechCrunch, Mashable, GigaOM, ReadWriteWeb, etc.

Outside of that, subscriptions to the mailing lists for the open source projects that I care about, and a few hundred feeds loaded into my RSSOwl reader.</comment>


Gmail confidential mode – Set expiration dates for your emails - <AUTHOR> https://www.blog.google/products/g-suite/new-security-and-intelligent-features-new-gmail-means-business/ <comment><USER2> I've seen several things about this on Mastodon. Here is one comment from there:

 _" Gmail's upcoming self-destructing emails will require the recipients to click on a link and log in with their #Google accounts to see the content, if they are accessing via IMAP/SMTP._

 _" Don't be fooled: Google's purpose is not to give us more confidentiality. They want all of their users to access their mailboxes via the Gmail app or their web interface, so they are creating a burden to the recipients and calling it "security" to convince people to adopt it."_

\-- [https://octodon.social/@miramarco/99871209330208151](https://octodon.social/@miramarco/99871209330208151)

Personally, as someone who doesn't use GMail, I'm wondering how they intend an email to remain "confidential" if they've sent it to me, outside of their walled-garden. My guess is that they won't send it, they'll _require_ me to use their services to receive email from their users.

So don't be fooled. Google is not your friend, they are a company that makes money by knowing more about you than anyone else does.

<comment><USER3> Never mind this is a legal land mine waiting to happen.

Get sued, must preserve all documentation...Woops. Google just deleted it. Sorry!

Enjoy the obstruction and destruction of evidence charges.</comment></comment>


Passwords vs. Pass Phrases (2005) - <AUTHOR> http://www.codinghorror.com/blog/2005/07/passwords-vs-pass-phrases.html

<comment><USER2> One fundamental problem with the idea of passphrases is that they are sometimes (often?) longer than is allowed by the website being accessed. One important website that I must access limits passwords to 10 characters, and forbids special characters. Another one ignores case in passwords.

My solution to the password problem is to use a password hash generator. I only have to remember one master password, and an identifier for the website, and the generator gives me a 12 character random password that includes upper and lower case letters and digits.

This discussion assumes we are talking about passwords for websites.</comment>


Multi-destination trip planner plans multi-city trips in a few clicks - <AUTHOR> https://www.producthunt.com/posts/eightydays-me-1-0 <comment><USER2> Wow! I'm impressed. At first, I thought it was another travel aggregator, but when I saw that I could buy all the tickets in one I was really pleasantly surprised. I like the design. A great way to explore Europe.

</comment><comment><USER3> How is it different from Kiwi.com?

<comment><AUTHOR> I will give you some reasons. 1\. On kiwi.com you must know the places you are going to include in the itinerary: there is a bunch of cities you had no idea about, for instance: when thinking of Paris and Barcelona, we will offer to visit Corsica for 2 nights, and this may be much cheaper.

2\. In the final ticket we combined planes, trains and ferries. Nobody does that. There are platforms, which sell all these separately, but not in one ticket.

3\. Almost every multi-city itinerary of kiwi.com shows layovers that take up to 8 hours. And if they are during the day, you are lucky enough. But if they are in the evening, you would just waste your time and energy at the airport.

We have no layovers, early and late flights, inconvenient airports. We try not just to create itineraries, but to care about our users.

4\. Well, just try to create an itinerary there and here, and to count the wasted time from the moment you open the site and until the very purchase.

5\. We give the ideas very very fast

Kiwi do a great product, and if they really solved the multi-destination trips easily and quickly, we would not make clones</comment></comment>


How to build an ultra cheap beowulf cluster - <AUTHOR> http://www.clustercompute.com/ <comment><USER2> Wow, this is from 9 years ago. I'm sure most of it still applies though... You'll just get way more bang for your buck.</comment>


Ask HN: business model for a new image format? - <AUTHOR>

I am currently working on an image compression algorithm. In lossless mode, it is already 30% better than .png for average photos, and I hope I can make it even better. What do you think: is it possible to make a new image format widely adopted, and still somehow make money from it? (Sorry for my English.) <comment><USER2> At first glance, I think it would be a capital intensive business. The only way I can think to make money would be licensing, which is expensive in terms of getting the legal work done and protecting and enforcing your intellectual property. Of course, you can always license it to someone else who can resell it, giving you royalties.</comment>


UN Security Council Authorizes Military Strikes on Libya - <AUTHOR> http://www.jpost.com/MiddleEast/Article.aspx?id=212699 <comment><USER2> I don't know how I feel about it, but it is definitely war; one simple test: if Libya "enforced a no fly zone on the US," would we say, "Libya is enforcing a no fly zone on the US?"

<comment><USER3> Depends on your definition of war. Logically, yes. Legally, no, not by US standards - it takes a large flock of congresscritters to do that. I'm mostly glad that the point was made that this wouldn't be an occupation.

<comment><USER4> > I'm mostly glad that the point was made that this wouldn't be an occupation.

Not yet anyway. When news broke a few days ago that a NFZ was going to be implemented, John Bolton and other neoconservatives started floating idea of ground forces.

If you give a mouse a cookie...

<comment><USER5> > If you give a mouse a cookie...

...you'd better get its consent first or the EU will come after you.</comment></comment></comment></comment>


Ask HN: What's a simple-to-set-up CRUD front-end for PHP/MySQL? - <AUTHOR>

I'm trying to set up a CRUD front-end for some non-techie people so they can update sports team stats.  There are multiple sports, leagues, divisions, teams, etc., and I've got them all set up in a MySQL database.
I need something that's less difficult than phpMyAdmin.
I know a couple of PHP frameworks do this kind of stuff well, but ideally, I'd like something that's simpler to set up. <comment><USER2> In need of quick backend admin, I used the Kohana 3 framework, its ORM and the formo form management module: <http://avanthill.com/formo_manual/> <https://github.com/bmidget/kohana-formo>

Any php framework with ORM and forms management support will get you there.

You will probably need ACL / Authentication support wich Kohana provides.

</comment><comment><USER3> Wordpress?</comment>


DOE Contracts Guardtime/Siemens/PNNL/TVA for Blockchain Cybersecurity Solution - <AUTHOR> https://guardtime.com/blog/us-department-of-energy-contracts-guardtime-pnnl-siemens-and-industry-partners-to-develop-blockchain-cybersecurity-technology-for-distributed-energy-resources <comment><AUTHOR> > With Guardtime's distributed and cryptographically sound integrity solutions > combined with PNNL's next generation transactional energy delivery > infrastructure we enable next generation security and integrity while > allowing for increased efficiency and reliability for both energy users and > energy producers.

Is the above quote just buzzwords and marketing material or is there really something to it? Is there anyone that is knowledgeable on blockchain that would be able to elucidate on how specifically blockchain can help in ways that are different/better than our current industry-tested solutions? I'm not too knowledgeable on blockchain, and I have a hard time seeing the reported value of it for electric utility grid application.</comment>


How Dropbox Got Its First 10 Million Users - <AUTHOR> http://techcrunch.com/2011/11/01/founder-storie-how-dropbox-got-its-first-10-million-users/ <comment><USER2> My take is this: LiveDrive Beta was featured in HN.

LiveDrive got lots of users used to having working and functional virtual drives, including me.

LiveDrive closed the beta and got users searching for a replacement. I found Dropbox in a post about LiveDrive alternatives.

LiveDrive could have been Dropbox, but they 'monetized' too fast and killed the product.

And still some people side with Saverin in the Social Network movie...

</comment><comment><USER3> Yes, they have lots of users (and the article doesn't mention how they used network incentives to increase the user count), but more interesting would be the rate of conversion to _paying_ customer, typical time to conversion (also, segments: do some buy right away or use for years, then buy), etc.

<comment><USER4> I would like to see time to conversion. I have a hunch the majority of the users haven't capped out their dropboxes yet. When that starts to happen, it will be interesting what the conversion rate will be.

<comment><USER5> As a data point: At SpiderOak, 50% of customers purchase paid storage within the first 4 days of opening an account. Of course there's still a long tail of events after.

</comment></comment></comment><comment><USER6> I don't really understand how this video in any way explains how they got their first 10 million users. Seems like a the standard straightforward plug for a ycombinator company on TC that we have gotten used to.

</comment><comment><USER7> I'm reading the article as validation for viral marketing, as targeted towards the big link-sharing sites. I don't remember the last time a startup hit the front page of Reddit. Surely it's happened, but I thought it would happen more than it has, since that site is about sharing links to things on the Web.

<comment><USER8> Minus hit frontpage of Reddit recently but the typical front page content isn't very much startup focused on Reddit

</comment></comment><comment><USER9> Not to bee too pedantic, but using "Why Combinator" in the article? I kinda looked down on the article after the first paragraph. Good great grammers, an awareness of what you're talking about, and proper spelling go a long way towards establishing proper voice. (sea what I did there)

<comment><USER10> It was obviously some rather sophisticated speech-to-text program that didn't realize that "ycombinator" is what he meant in the video

The actual article is rather good.

<comment><USER11> so most likely the speech-to-text startup was not funded by ycombinator</comment></comment></comment>


Young People Are Returning to Facebook - <AUTHOR> https://www.papermag.com/will-coronavirus-save-facebook-memes-groups-2646067281.html <comment><AUTHOR> Original title edited for clarity. It was:

Nature Is Healing: Young People Are Returning to Facebook</comment>


High Quality Websites - Google's New Ranking Factor - <AUTHOR> http://seogadget.co.uk/high-quality-web-sites-the-new-google-ranking-factor/

<comment><USER2> I do really like this post... It shows - with its Q&A structure - how the so called quality factors are now taking their revenge over "automatic" ones. Yes, links and old SEO factors are still important, but the Google seems to be seriously looking to the user experience in how to rank a site instead of another. The intention is surely correct, the steps toward that direction can be "wrong" is some of their details... but no big change is without errors. I suggest you also to check the extended "linkography" given by Richard Baxter to dig even more into this subject.

</comment><comment><USER3> Great, comprehensively written piece. Nice to see so much info on high authority site ranking factors in one place. Especially like the section on thinly written, or filler, content. I believe in the long term, users ability to share, rate and comment on content (did you find this useful?) can greatly separate the wheat from the chaff. I wonder also how the Google +1 button will effect this.</comment>


The First Lifestyle Cooking App - <AUTHOR> http://www.egrocer.us <comment><AUTHOR> The App Store is full of cooking apps that serve recipes. But we thought why just recipes and why not something that's a bit more diversified, functional and serves more benefits. Do these apps know if the recipes they serve are actually good for a person or their family's health? Do these apps serve to their required nutritional value? Do these apps know what should be their optimal calorie intake? Do they cater to a person's/groups preferences of cooking such as likes, dislikes, choice of cuisine, or allergens and takes care of them if they are on a diet. Do they even know if the user has the items in their pantry to cook an xyz dish or if cooking it is within their days or weeks budget?

We surveyed all the top cooking apps and found out that they only serve recipes and in some cases a note pad to make grocery lists. Shouldn't these apps be a bit more intelligent? After all they are helping to fulfill the most important aspect of our lives; "consumption" To answer this, we made an app that's smart and actually considers the end user as a person/persons by taking all the above factors into consideration. The app is called "eGrocer" and here's what it can do. This cooking app keeps you fit by suggesting recipes in accordance with your BMR, a targeted body weight that you want to cut down to or maintain, your recommended calorie intake & nutritional value, your preferences (veg/non-veg/allergens), choice of cuisine and the items you have in your pantry.

The recipes (which btw will be more than 10,000) are generated also in light of your budget for cooking and you can further use this budget to make entire meal plans from within the app. (We will also be adding chef specific recipes which too can be filtered in light with the above parameters).

But that's not it, the app also lets you manage your pantry by remembering what items were used up, and maintain a list of items you need to buy from stores present in your location.

In short, this is like an "App that lets you cook, stay fit and keep the kitchen clean"! And, it is for FREE! Expected to Launch on April 5th, 2016</comment>


Rising Tides Will Sink Global Order - <AUTHOR> https://foreignpolicy.com/2018/12/20/rising-tides-will-sink-global-order-climate-change/ <comment><USER2> A little balance:

> Identifying a potential human fingerprint on recent sea level rise is > confounded by the large magnitude of natural internal variability associated > with ocean circulation patterns. There is not yet convincing evidence of a > fingerprint on sea level rise associated with human-caused global warming.

[https://judithcurry.com/2018/11/27/special-report-on-sea- lev...](https://judithcurry.com/2018/11/27/special-report-on-sea-level-rise/)</comment>


What the HTTP is CouchApp - <AUTHOR> http://wiki.couchapp.org/page/what-is-couchapp

<comment><USER2> CouchDB is really fun. The rules are very tight, but consistent, and it quickly appears to be a shotgun to cause a lot of damage with. Especially with good with Javascript on the client side. There is a native Javascript driver and the protocol is RESTful (HTTP GET, PUT, DELETE).

Compare the the closest NoSQL alternative, MongoDB. I say close because they are both document stores (fancy key/value) with indexing and map/reduce.

MongoDB is very lean and blazing fast. But there isn't anything close to an HTTP layer in Mongo. It speaks in a binary JSON protocol. The format, commands, and driver, while well done, are a whole new set of rules to learn. Plus a Ruby middleware to talk HTTP.

My conclusions are from writing a simple app with both backends. Punchline: After all this experimentation I realize I need a relational DB for my project.

</comment><comment><USER3> This is really cool, especially with companies now providing CouchDB hosting.

The article says that writes can be validated so only authorised users may write. Does anybody know if its possible to limit read access to certain users? If so, I may revive an abandoned project and try it as a CouchApp.

<comment><USER4> A jchrisa pointed out, you can't get more granular than per-database read restriction using just CouchDB.

However, you can put the database behind a proxy and use lists and shows (that get passed the user info) to restrict the read access.

<comment><USER5> Great to see that feature... I only played with CouchDB in 0.7-days before shows and lists, and found it too everything-is-public for my needs.

Let's suppose I want to build a centralized messaging application where users send each other private messages (and let's say per-user couches aren't available). Users may only see messages directed to them. Messages are contained in documents, one document per message (sounds like a reasonable granularity).

For the JavaScript front-end, I'd like to ask the server for a list of messages for the current user, and later on, for the contents of one particular message.

The list of messages for one user sounds like a simple map-reduce view. In order to only show messages targeted to the current user, my guess is that I should add a list function to the same design document to remove other users' items from the view result. To fetch a message by ID, I'd install a show function which either returns the original message as JSON text or an invalid access message, depending on the current user. Is that how you'd use shows and lists?

<comment><USER4> Yes that would work. You could go a bit further, though:

Set your view to emit keys this way:

      [user,message_id]

you can query the view using:

      msgview?startkey=[user]&endkey=[user,{}]

which will give you all the messages for the given user, or

      msgview?startkey=[user,message_id]&limit=1

for a specific message.

Then your list doesn't have to go through all the messages for all the users -- just the ones that the view returned -- and only check that their user info is correct (i.e. nobody's calling the list using an inapropriate view).

With this scheme you could have the same list + view return a specific message as well.

Oh, and definitely go check CouchDB 1.0 -- it's changed quite a bit since 0.7. You can get a hosted version to play with at <http://www.couch.io/get>.

<comment><USER5> Thank you!

</comment></comment></comment></comment></comment><comment><USER6> _In fact, the bad old days are still with us, as most applications still rely on fragile custom code, running in an application server like Ruby on Rails, Python's Django, or some kinda Java thing._

I'm pretty sure the fragility of the code is as much down to the person writing it as it is to the platform. I don't think it's fair to say that application servers are inherently fragile; run Python or Java apps on App Engine and you're unlikely to ever have a genuine scaling problem...

BTW is that how we quote text here?

<comment><USER7> Last I checked it is still possible to send an email from inside a Rails controller, or to update a bunch of database records in a tight loop. You can't do these sorts of things at scale, which a lot of people are still learning the hard way.

Part of an app server like Django et al being flexible is giving you the ability to shoot yourself in the foot. It is much harder to screw something up royally when you are working within the CouchApp constraints. That's what I meant by fragile.

Google App Engine gets this mostly right by enforcing draconian timeout limits and other constraints, so it is much harder to write an app that is gonna fall over under a big wave of traffic, as the sandbox will complain right away.

CouchApp is even more picky. The programming model doesn't have operations that could block on remote IO, so you can't even go down the bad path. Of course, when you do need to send an email, you've got to rethink how to do it. (Actually in a real app you'd do email from an asynchronous task as well.)

</comment></comment><comment><USER8> If an app can be replicated to a user's machine, can the user then also manipulate the couchapp's view and design documents using futon or otherwise, even though validation functions are in place?

ie, would a user be able to alter the application themselves, and not just their data?

<comment><USER9> Couch's design documents are protected, even though they are replicated, as you say. Unless I'm misunderstanding your question, your application will be safe from modification, as it will be update-able only by the author.

<comment><USER7> Actually, whatever is on the user's machine (or in a Couch in the cloud controlled by the user) is 100% under the control of the user. They are free to alter the application, validations, etc, as they see fit.

However, when the user attempts to replicate changes to another server (maybe the original source server, maybe another server not under their control) it is the validation functions on the target server that control which writes are allowed to proceed.

So if my <http://jchrisa.net> server only allows updates from me (for instance for blog posts), you can still replicate my blog to your machine, and edit posts there, but when you replicate the changes back to my server, they will be rejected by my validation function.

<comment><USER9> Thank you; that is what I meant to explain, but you were much more clear. I guessed that wil was asking about the safety of his own application once replicated by others, because I don't see the concern of having users replicate their own copy, as long as the damage is contained.

<comment><USER8> Right, I was asking about the safety of the application that I write.

So any app written on couchapp can be considered to be modified by the end user if it's replicated to their machine. Then any application where you don't want users fiddling around with your 'source' is out of the question.

That said, there's plenty of applications that you'd want to pass along with the user's own data that you'd want the end users to fiddle with and improve.

With that in mind then, I'm guessing you can have validation functions that allow you to selectively update the design documents that you want from another person's changes, just as I can selectively replicate data from another person's copy of the couchapp.

<comment><USER7> Validation funs give you a lot of control over the update logic. However, they cannot be used to grant anonymous write access to application code. The design document may only be updated by the database or server admin.

</comment></comment></comment></comment></comment></comment><comment><USER10> I've been waiting for this for a long time. Case in point: Feedlooks.com.

I created the entire app logic in jQuery, which is amazing for rapid app development by the way, and all that missing was an http data server.

Of course I had to build my own interface on the server side to mediate the database transfer. It's really an unnecessary layer.

Glad someone had this idea.

<comment><USER7> That's a lot like my last web app before I started using CouchDB. Before I made the switch I was storing JSON in text fields in Postgres. Views are much better than the hoops I had to jump through to query that.

</comment></comment><comment><USER11> What about user input validation? If I understand it correctly, all the application code resides in the browser. This means that there is no server side code to make sure that the data stored in the database is properly sanitized. For example, how would you go about making sure an input doesn't contain HTML code? If the verification is made on the client side, it is easy to circumvent it.

<comment><USER12> If you read the page you will find a section on "Server Side Validations"</comment></comment>


Visual Studio Code October 2019 (1.40) Released - <AUTHOR> https://code.visualstudio.com/updates/v1_40 <comment><USER2> The improved bracket highlight is _so_ nice. It's a very little thing, but it makes your brain have to work that much less to figure out where you're at.

</comment><comment><AUTHOR> editor.fontLigatures has been expanded to allow you to specify stylistic sets, such as "'ss01', 'liga'" (and so on).

I was looking forward to this because I wanted to enable the "ss01" stylistic set for Fira Code, which takes away the downward slope at the end of the "r" character that I don't like, but it doesn't seem to be working for me.

Was anyone else able get this working for Fira Code?

<comment><AUTHOR> EDIT: disregard; it was a problem with my own config. It works as expected

</comment></comment><comment><USER3> It feels like startup got even worse than it was, which is not instantaneous like Sublime Text.

It also uses much more CPU and GPU resources.

It feels like every time some Microsoft app gets updated, it gets worse and slower.

<comment><USER4> Do keep in mind that VSCode is based on Electron (it's basicly running an entire webstack on your system, plus a chromium based renderer), so that means that it does require a good bit of resources to get running...

But on the good side, this means that its much more extensible, and (in theory, more capable) that other code editors, which it has proven itself to be.</comment></comment>


One Size Aggregator Doesn't Fit All. (long tail) - <AUTHOR> http://www.longtail.com/the_long_tail/2007/03/one_size_aggreg.html <comment><USER2> I was thinking a lot about this in relation to Digg last week. Digg succeeds in some categories, but a lot of the stuff that hits the main page is pretty generic. News.yc is an extremely niche community and the content is generally top notch in relation to the general topic (tech startups).

I've been thinking about how you would build a single website that captures these extremely niche communities (similarly to how news.yc captures its demographic) in a way that is better than just having categories (like Digg does).

That would be cool.</comment>


Appcelerator launches Titanium v1.0 - <AUTHOR> http://www.readwriteweb.com/archives/titanium_10_launches_build_native_apps_for_desktop_mobile_ipad.php#comments

<comment><USER2> Grats to Jeff and Nolan. Appcelerator was once an Atlanta based company and they invited me over to hangout in their office a few times. Very nice guys and a great product; always open to chat startups.

</comment><comment><USER3> Anyone with experience with this? Does it work well?

<comment><USER4> I just spent about five hours this weekend experimenting with Titanium Mobile and for someone like me knows Javascript, but not Objective-C or Cocoa, it looks awesome. After spending some time trying to get kick started using Objective-C, Cocoa, Interface Builder and XCode, I would guess that Titanium might reduce the time it would take me to build a substantial iPhone app by maybe 5-10X.

</comment></comment><comment><AUTHOR> ...but RWW get's the pricing/packages wrong, Jeff explains here: [http://support.appcelerator.net/discussions/announcements/28...](http://support.appcelerator.net/discussions/announcements/287-weve- listened-titanium-10-offering- preview/page/3?to=%2Fdiscussions%2Fannouncements%2F287-weve-listened- titanium-10-offering-preview#comment_1154928)

</comment><comment><USER5> They have a ton of videos on their site but not enough info that builds credibility... how effective is their platform? how long will they be around? should I trust them to build my apps on their framework -- what if they disappear?

<comment><USER6> The platform is open source, so there's no reason it can't survive the demise of the company.

</comment></comment><comment><USER7> but why is their 'about us' video such marketing cheese? <http://www.appcelerator.com/showcase/>

i will try their stuff though...</comment>


Porting a NES Emulator from Go to Nim - def- http://hookrace.net/blog/porting-nes-go-nim/ <comment><AUTHOR> > As I really liked fogleman's NES emulator in Go I ended up mostly porting it > to Nim. The source code is so clean that it's often easier to understand the > internals of the NES by reading the source code than by reading > documentation about it.

Win!

<comment><USER2> Went to read your code after that comment, it is truly, very clean code! :+1:

</comment></comment><comment><USER3> Let me get this straight. We have an emulator for 1985 hardware that was written in a pretty new language (Go), ported to a language that isn't even 1.0 (Nim), compiled to C, then compiled to JavaScript? And the damn thing actually _works_? That's kind of amazing.

<comment><USER4> The amazing thing about computer software, relative to every other human endeavour: once you've got one component right, it's _right_ ; you can treat it like a simple little node in an even more complex design, and scale it up 1,000,000x, and it'll keep working every single time.

Once you've built a C-to-JS compiler, and a Nim-to-C compiler, you've got a perfectly-functioning Nim-to-JS compiler. There's no game of telephone gradually confusing things; the fidelity is perfect no matter how deep the pipeline goes.

(This is also what's amazing about layered packet-switched networks, come to think of it. The core switch transferring data from your phone to AWS doesn't need to speak 4G or Xen SDN; it's just coupled to them, eventually, by gateways somewhere else, and it all just keeps working, one quadrillion times per second, all over the world.)

<comment><USER3> It's so funny that you say that, because you are describing the way that I _wish_ the world works, but I have found that in practice it rarely does.

For example, here are a list of ways in which the C-to-JS compiler is far less than "perfect": [http://kripken.github.io/emscripten- site/docs/porting/guidel...](http://kripken.github.io/emscripten- site/docs/porting/guidelines/index.html)

<comment><USER4> That's what I was really trying to get across—the difference between "imperfect" in other engineering, and "imperfect" in software. In other engineering, "imperfect" means "will randomly fail 0.00000001% of the time."

In software, though, "imperfect" means "will work perfectly, 100% of the time, even after a quadrillion tests, within a _well-specified subset_ of all possible inputs; will fail in arbitrary unknown ways outside of that subset."

It's a difference to being "within tolerance"—even within tolerance of a physical system, stresses are still going on. Physical systems have a lifetime, and repair procedures, for a reason.

But in software, you don't have to worry about "stress within tolerance." In fact, even if someone else builds an "imperfect" software system that accepts inputs with undefined results, you can just _wrap_ it with an input validator, and suddenly it's a well-defined-100%-of-the-time system!

(Of course, in implementation, software has to run on hardware, which is the other kind of imperfect system. But, surprisingly, you can write software to compensate even for that, with failover and quorum-agreement &c.)

</comment></comment></comment></comment><comment><USER5> This title covers the essence of hacker news pretty well.

<comment><USER6> Also see: [https://news.ycombinator.com/item?id=7745561](https://news.ycombinator.com/item?id=7745561)

My favorites:

> I decided to re-implement Javascript in Javascript. It failed. Here is my > story

> ReactOS running IE6 in a JavaScript x86 emulator: we put a browser in your > browser so you can browse while you browse

> Introducing js.js: a JIT compiler from JavaScript to JavaScript

</comment></comment><comment><USER7> Did you port from Go to Nim by hand, or was it automated in any way?

I thought that Go would be the last language I'd write by hand. Previously I wrote C++, which was a dead end in that I could never use tools to parse it and translate to a new language. But with Go it should be much easier to do that if/when I ever decide to switch to something else.

The performance of the emulator in browser (compiled via emscrimpten) is very impressive! It felt like solid 60 FPS to me. I wonder how the Go version compiled via GopherJS would compare? Have you tried?

<comment><USER8> There is also a NES emulator written entirely in JavaScript called jsnes[1] that would be interesting to compare to. The "solid 60 FPS" doesn't always translate to mobile. For example, jsnes runs fine on an iPhone 5S (64-bit processor), but stutters on an iPhone 5.

[1] [https://fir.sh/projects/jsnes/](https://fir.sh/projects/jsnes/)

<comment><USER9> Forget about mobile, it runs at like 5 FPS on my Core i3 laptop.

</comment></comment></comment><comment><USER10> Well this is new. I've never seen Nim before. What does it offer that Rust, Haskell, Erlang, etc... do not?

<comment> def- Two of my old posts may answer that question:

\- [http://hookrace.net/blog/what-is-special-about- nim/](http://hookrace.net/blog/what-is-special-about-nim/)

\- [http://hookrace.net/blog/what-makes-nim- practical/](http://hookrace.net/blog/what-makes-nim-practical/)

Summary by benhoyt: [https://news.ycombinator.com/item?id=8822918](https://news.ycombinator.com/item?id=8822918)

      * Run regular code at compile time
      * Extend the language (AST templates and macros);
        this can be used to add a form of list comprehensions to the language!
      * Add your own optimizations to the compiler!
      * Bind (easily) to your favorite C functions and libraries
      * Control when and for how long the garbage collector runs
      * Type safe sets and arrays of enums; this was cool:
        "Internally the set works as an efficient bitvector."
      * Unified Call Syntax, so mystr.len() is equivalent to len(mystr)
      * Good performance -- not placing too much emphasis on this,
        but it's faster than C++ in his benchmark
      * Compile to JavaScript

<comment><USER11> Thanks, that first post is really interesting. Two things stand out to me:

* Run regular code at run time - does this just error if you try to use const on something that depends on a runtime value?

* Add your own optimizations to the compiler - isn't this very dangerous, especially if optimizations from various sources of code get combined? Even if your optimizations are valid (which there seems to be no guarantee of), computer math is notorious for being different from real math. People unaware of the nuances of integers rolling over or floating point seem like they could easily shoot themselves in the foot here.

<comment><USER12> > * Run regular code at run time - does this just error if you try to use > const on something that depends on a runtime value?

Yep. For example `const foo = stdin.readLine()` would result in "Error: cannot evaluate at compile time: stdin".

As for your second point. I haven't used this feature personally but I have heard that the compiler will tell you exactly where these optimisations are applied. You can also disable these optimisations very easily during compilation.

</comment></comment></comment></comment><comment><USER13> The binary size difference is quite striking. Linux distro packagers are going to like Nim, I think.

<comment> vezzy-fnord I couldn't tell if the Nim result was actually statically linked. If it was, then it almost certainly wasn't using glibc, because the binary would certainly be much fatter.

<comment><USER14> If the Nim binary is dynamically linked, comparing the size to a Go binary isn't always valid. There are reasonable trade-offs to consider when selecting dynamic vs static linking. Admittedly, when you're running an NES emulator on your desktop probably isn't one of them, you're not likely to care either way.

The Nim -> C -> emscripten path is very impressive. Kudos.

<comment><USER15> Go also dynamically links glibc by default on linux, for the domain name resolver functions.

I'm not sure what Go does on OS X, but I know that it's not possible to statically link the c library on OS X.

<comment><USER16> I thought gc only statically links and it was gccgo that had the ability to dynamically link.

<comment><USER15> gc only statically links to compiled go objects, and (may have changed recently? or soon?) only dynamically links to c libraries (via cgo).

</comment></comment></comment></comment></comment></comment><comment><USER17> Ubercool.

Question about nim: from looking at [https://github.com/def-/nimes/blob/master/src/nes/cpu.nim](https://github.com/def-/nimes/blob/master/src/nes/cpu.nim) , I wonder: is there way to give the no. of cycles and instruction encoding with the "op" template, so those 256 byte arrays get built automatically?

<comment><USER12> I'm not the author but I don't see why not, you can just have an extra param to the "op" template.

<comment><USER17> But how would you put it in the right place in the table? Can you just have something like

        cycles[opcode] := ncycles

run during compile time in the macro, resulting in a populated 256-byte table of all the opcode cycles and no anything done in runtime?

<comment><USER18> I'm not sure exactly what you're asking, but I can answer at least part of it. You can build lists at compile time in Nim via the `static` statement or `compileTime` pragma. Eg:

      # using the pragma here, but we could use a 'static' block instead
      var cycles {.compileTime.}: int

      # ---

      proc doSomething =
        static:
          # invoked once at compile-time (at this definition)
          cycles += 1

      proc doSomethingGeneric[T] =
        static:
          # invoked once at compile-time (per unique generic call)
          cycles += 1

      macro doSomethingAtCompileTime(n): stmt =
        # invoked at compile-time (per call)
        let ncycles = int n.intVal
        cycles += ncycles

      # ---

      doSomething() # this call doesn't effect 'cycles', it's declaration does (+0)
      doSomething() # ditto (just here to prove a point) (+0)
      doSomethingGeneric[int]() # this call effects 'cycles' (+1)..
      doSomethingGeneric[int]() # ..but only once (+0)
      doSomethingGeneric[float]() # this call also effects 'cycles'  (+1)
      doSomethingAtCompileTime(5) # this call effects 'cycles'  (+5)
      doSomethingAtCompileTime(12) # ditto  (+12)

      static:
        echo cycles # prints '20'

I'm not sure this helps solve anything in NimES, but this can be really useful for meta-programming in general. For instance I'm using it to make an event system which generates efficient dispatch lists based on the types/procs defined. It's designed for game logic, to both minimize boiler-plate and dynamic dispatch. Ie, invocation it's type-specific and usually does not use function pointers per-instance, so smaller 'events' can be inlined. Plus, instances are generic (decoupled from object inheritance), and often don't require any header data. That combination should, in theory (still WIP), give devs a 'universal' way to model a broad range of game objects from heavy single-instance types to lightweight projectiles and particles. Here's an example for a little clarity:

      # note: 'impl', 'spawn', and 'invoke' are macros

      type
        Foo = object
          val: int

        Bar = object
          val: string

      impl Foo:
        proc update = echo "Foo: ", me.val
        proc render = echo "Rendering Foo!"

      impl Bar:
        proc update = echo "Bar: ", me.val

      spawn Foo(val:123)
      spawn Bar(val:"abc")

      invoke update
      invoke render
      invoke blah

      # ouptput:
      #   Foo: 123
      #   Bar: abc
      #   Rendering Foo!
      #   Invoke Error: No event 'blah' defined.

Perhaps that's not the best example to illustrate Nim's meta capabilities, but so far Nim is the only language I've come across that allows me to achieve this short of thing (at least, directly from user-code).

<comment><USER17> Thanks, seems like the thing I'm looking for.

If you look at line 531 of the CPU source code (as of today, anyway), there are multiple 256 byte tables that give instruction encodings, lengths, and cycle counts.

What I was asking is: "Is it possible to put these as a parameter of the 'op' macro so that it builds these tables automatically"

The answer might be "No" if e.g. a single op has multiple instruction encodings. But assume that there is only one encoding per op.

An equivalent question is - can static: sections assign to an array that will be available at runtime? From your example, the answer appears to be yes.

<comment><USER18> > can static: sections assign to an array that will be available at runtime?

The answer is yes, but it's a tad trickier than just accessing the compile- time list from run-time code (which doesn't make sense, and is illegal). Instead, use a macro to generate a bunch of run-time checks against a specific value. Eg:

      var eventNames {.compileTime.} = newSeq[string]()

      proc defineEvent(name:static[string]) =
        static:
          eventNames.add(name)

      macro checkDefined(name): stmt =
        # begin new statement
        result = newStmtList().add quote do:
          echo "Checking for '", `name`, "'"

        # loop over every known event name and
        # build a run-time 'if' check for each one.
        for n in eventNames:
          result.add quote do:
            if `n` == `name`:
              echo "Found it!"

      # add some events to compile-time list
      defineEvent("foo")
      defineEvent("bar")

      # define some runtime values
      let eventName1 = "foo"
      let eventName2 = "blah"

      # check runtime values againts compile-time list
      checkDefined(eventName1)
      checkDefined(eventName2)

      # output:
      #   Checking for 'foo'
      #   Found it!
      #   Checking for 'blah'

Note: This will inject a bunch of 'if' statements for each call to 'checkDefined', which might bloat your code.. it's probably better to make a macro which defines a proc, then just call that to check run-time values.. but I left those kinds of details out of this illustration for the sake of simplicity.

<comment><USER17> Thanks. I'm sure there's a way to promote a compile time seq into a constant runtime one. Might require some more macro trickery, though.

<comment><USER18> Err... what you said just reminded me of something, and I realized all the code I just showed you is really over-complicated and that Nim has much more straight forward options using `const`, like this:

      static:
        # define a compile-time list first
        var names = newSeq[string]()

        # add some values (at compile-time)
        names.add("foo")
        names.add("bar")

      # define the compiler vars as run-time const
      const runtimeNames = names

      # define some run-time variables
      var name1 = "foo"
      var name2 = "blah"

      # check runtime variables against const variable
      if runtimeNames.contains(name1): echo "Has Foo!"
      if runtimeNames.contains(name2): echo "Has Blah!"

Sorry about the rather winded (and bad example) replys :| But thanks for the conversation, it reminded me of this and now I have some cleaning up of my own code to get too. Cheers!

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER19> Any plans to do let people call Nim functions from Python with Python standard objects like strings/dicts/lists as arguments? This would let people write the fast parts in Nim and slow parts in Python.

<comment><USER20> What's the point? Why not write everything in Nim?

If you depend on certain Python libs that's understandable. But it should not be too hard to translate them to Nim since the syntax of Python and Nim are not very different.

<comment><USER21> If a company has a significant amount of existing code in Python, no sensible engineering manager will agree to a complete re-write of the existing code- base. It would divert resources from more-pressing functionality (new features, bugfixes, etc) and almost certainly introduce its own new bugs due to the complete re-write.

(See also this classic Joel Spolsky article, "Things You Should Never Do, Part I": [http://www.joelonsoftware.com/articles/fog0000000069.html](http://www.joelonsoftware.com/articles/fog0000000069.html) )

This would be the case whether you schedule the re-write in a single blocking development effort (in which case, all forward progress would stop during that time) or broken into batches over time (in which case, it will be much longer until the new system is ready, and the old system will be a moving target as it continues to be developed).

Instead, the chances of a Nim-integration being beneficial to the company (and thus, your chances of getting approval from your engineering manager) are MUCH higher if you can simply write NEW functionality in Nim (or occasionally re- write small, self-contained inner loops in Nim) and the new Nim code integrates smoothly into the existing Python as a Python module.

This is the approach I've taken at my company (with my engineering director's approval).

In theory, you could even use skunkworks-Nim in your large Python codebase, as long as your Nim code presents itself as a good-citizen Python module, much like the tales of skunkworks-Scala being used in large Java codebases.

<comment><USER20> I am not talking about a complete rewrite of big business software written in Python. I just had small projects in mind which are typical for Python. Big business usually depends on Java, C# and C++ but not on Python.

[http://www.quora.com/Why-do-large-corporations-use-Java- or-C...](http://www.quora.com/Why-do-large-corporations-use-Java-or-C-over- Python-Ruby-and-PHP)

</comment></comment></comment></comment><comment><USER22> I'm quite impressed about the small amount of code required for a NES emulator. I thought they'd have to do all kinds of special casing for cartridge-specific stuff…

<comment><USER23> The more accurate the emulator is, the less special casing there's a need for: special cases/hacks are necessary when the emulator takes shortcuts and doesn't implement the hardware features the game relied on. If the hardware features are fully implemented all games ought work without hacks. Hence bsnes (as far as I know) not needing game-specific hacks but requiring a hefty config to run.

<comment><USER24> The problem with the NES is that games have all kinds of different hardware inside the cartridges. In order to achieve high compatibility you need to emulate all of these chips. It's not nearly enough to accurately emulate just the NES itself.

<comment> def- Not all games work. Only the most popular mappers are implemented, which covers about 85% of games.

</comment></comment></comment></comment><comment><USER25> For anyone who was wondering what I was: porting from libSDL calls to drawing on an html canvas is done automatically by emscripten</comment>


Implementing Letterpress UI in UIKit - <AUTHOR> http://blog.jazzychad.net/2013/07/30/implementing-letterpress-uikit.html

<comment><USER2> Interesting project. I'm working on something that uses that similar style, but I'm building a lot of it with Pixate. Pixate makes the theming of the app trivial since you can compile your css with LESS.

</comment><comment><USER3> Does anyone have an idea on how to implement the Letterpress swipe-to-delete "shattering effect" on iOS?

<comment><AUTHOR> I want to add that in v2 as well. My current line of thinking involves animating all of the board/piece subview layers using 3d transform animations and moving them individually along paths away from the center of mass as they shatter/explode offscreen.

</comment></comment><comment><USER4> looks interesting, have you any plans to open source the UIKit Components?

</comment><comment><USER5> _Good artists copy. Great artists steal. — Steve Jobs, quoting Pablo Picasso._

Picasso never said that, or most of the things people say he said. The quote is a paraphrase of T.S. Eliot. (Lots of discussion of this previously on HN.)

Another famous wrong quote by Steve Jobs: "Simplicity is the ultimate sophistication", which apparently was popular around Apple in the 80s and which people attribute to Leonardo, but in fact comes from William Gaddis' first novel.

<comment><AUTHOR> I was wondering how long it would take for someone to comment on this. I've updated the post to be more factually correct.

<comment><USER5> Sorry for the off-topic comment. It's a little hobby (tracing quotes, that is, not commenting off topic).</comment></comment></comment>


The Surveillance Industry Markets Spyware to Governments - <AUTHOR> http://arstechnica.com/news/2011/12/gallery-how-the-surveillance-industry-markets-spyware-to-governments.ars

<comment><USER2> Hm. These companies are either not being honest about being able to break encryption, or commonly used encryption techniques are not secure since they are selling solutions to monitor encrypted communications.

<comment><USER3> Secure communication protocols such as SSL assumes the endpoints are secure, but the network between them is not.

It sounds like they work by installing covert software on the subject's devices via unpatched vulnerabilities. It very likely is NOT as easy or reliable as they are making it sound, but that's marketing for ya.</comment></comment>


100 Awesome PR Tools Which Get Press and Exposure for Startups - <AUTHOR> https://justreachout.io/blog/pr-tools-which-get-press-exposure-for-startups/ <comment><USER2> Nice list. Comprehensive list. Obviously, they'll put themselves first, but I don't mind especially considering the transparency:

> Cons: "Free demo" is very limited. You need to pay to get anything done.</comment>


How to make a Python script Pip-installable - <AUTHOR> https://ao.gl/how-to-make-a-python-script-pip-installable/ <comment><USER2> Pybuilder do it for you!

</comment><comment><USER3> I'm surprised this doesn't mention the pyproject.toml ([https://www.python.org/dev/peps/pep-0518/](https://www.python.org/dev/peps/pep-0518/))</comment>


The UK needs to extend its EU transition period - <AUTHOR> https://www.ft.com/content/cf46dec4-9aa1-11ea-adb1-529f96d8a00b <comment><AUTHOR> __If you get a paywall: __

In less than five weeks, the UK and EU must decide whether to extend beyond the end of this year the post-Brexit transition period that grants Britain continued frictionless trade with the bloc. Boris Johnson has been adamant that he will not seek to prolong it. This may still be a tactic. Yet with the July 1 deadline for agreeing an extension almost upon us there is no sign of progress towards a permanent new trade deal. This week's publication of proposed UK texts, and the response, show both sides are still haggling in the bazaar. There is disingenuousness and unreality in the two partners' depictions of their respective positions.

Even before the pandemic, the goal for a new trade deal by the year-end seemed ambitious. But there is a more pressing reason for the prime minister to slow the rush to completion. The UK's stated plan will see significant new regulatory burdens placed upon British exporters and importers. The decision not to enter a customs union and refusal to sign up to legally enforceable common standards will place new costs on UK businesses, just when many are already fighting for survival because of coronavirus. Michael Gove, the cabinet office minister, has said that deal or no, firms will need to hire up to 50,000 new customs agents to manage the extra paperwork.

Arguing in favour of an extension is not an attempt to thwart Brexit. The UK's withdrawal from the EU has already happened. The British public has spoken twice on the issue, in the 2016 in-out referendum and then in the decisive victory it handed to Mr Johnson in the 2019 election. The prime minister has a mandate to deliver in the way his government decides — but not to take steps that would compound the economic damage caused by the pandemic.

Mr Johnson argues that deadlines focus the mind, though this does not mean the deal struck will be any better for the UK. The fundamental power imbalance in the talks remains.

The government has spun a myth around the last months of negotiations prior to exit in which Mr Johnson faced down Brussels. As his constant wriggling to avoid meeting his treaty obligations with regard to Northern Ireland shows, this is not the case. In truth, the prime minister agreed to weaken the integrity of the UK to secure a deal.

The immediate issue for the UK, however, is the extra cost to business and the continued uncertainty. Some Brexit hardliners argue the added costs will be lost in the wider economic malaise caused by Covid-19. This is not a serious argument. For firms struggling to rebuild, any new cost could be one too many.

Delay does carry some costs. Britain would have to make further contributions to the EU budget and be bound for longer by its rules. Extending talks with Brussels might also slow trade deals with others. But this is a price worth paying for a little longer.

A delay need not undermine the UK negotiating position nor arm those who still wish Brexit was not happening. This government has time to complete the job. But with the chancellor Rishi Sunak predicting a "severe recession" the economy must come first. The new rules will hit business and exports. Civil service resources are being diverted to no-deal planning when there are more pressing issues.

The need now, as Mr Johnson has told cabinet colleagues since his election victory, is to show maturity and stop fighting old battles. Though many fear the consequences of Brexit, there are no longer Remainers and Leavers. There is only a British economy facing a dire recession. The government needs to give it a break.</comment>


Show HN: WebEngage Notifications - <AUTHOR> http://blog.webengage.com/2012/06/14/announcement-webengage-notifications-adding-awesomeness-to-user-messaging/

<comment><USER2> I can think of quite a few use cases for use in our products. I especially like the idea of broadcasting a downtime if we intend to go down for maintenance. Also, apart from sending emails to our users about new feature launches, we can use this to make sure our users don't miss out on the new features.

Wish you luck, this seems useful to any website that wants to keep its users informed!

</comment><comment><USER3> Is there any javascript API to use your layout to show simple messages instead of any pre-created notification? Basically I would like to use one messaging UI to show your notification with all targeting specified as well as my custom messages (like error/sucess messages)

<comment> avlesh-singh Yes, there is one. We'll build smart notifications on top of the API. Once we gain some confidence using our own API, we'll make it publicly available.

</comment></comment><comment><USER4> Suggest you fix some of the typos in your screenshots, i.e. discountine = discontinue. Otherwise looks good!

<comment> avlesh-singh Fixed. Thanks.

<comment><USER5> Also "that let's you create notifications" -- should be "lets you".

Also, next screenshot has a title of 'baby cots', but the message below it advertises 'baby cotes'.

<comment> avlesh-singh Fixed both. Thanks :)

</comment></comment></comment></comment><comment> swatantra-kumar How is this (technically) different from tool already running on mashable.com | blogs.hbr.org ??

<comment><USER3> Aren't those simple wordpress plugins giving relevant suggestion from the database? Not sure if they allow us to customize those messages.

<comment> avlesh-singh Yeah, for the blog use-case you can call us similar. But yes, we will let you tweak the snippet (title, description etc) for the notification once generated.

</comment></comment></comment><comment><USER6> Great! how do you plan to price it?

<comment> avlesh-singh To begin with, we'll roll it out for all our customers with restrictions on the number of clickthroughs for each of our plans - <http://webengage.com/pricing> .. later, we plan to roll out each of our products separately with their own pricing as well. The basic paid version of Notifications will be priced in the range of $10/mo.</comment></comment>


Looks Interesting - <AUTHOR> https://www.flamehook.com/

<comment><USER2> what makes this better than firebase?

<comment><AUTHOR> I think they have it for free now, and they have showcased a data filtering capability where you can hook your API's into it. They have no documentation for it, but that's what they are going for. So both JS and Server in your control :) I like the idea.</comment></comment>


Samsung Says the iPhone is for Old Folks. Really? - <AUTHOR> http://www.macobserver.com/tmo/article/samsung-says-the-iphone-is-for-old-folks.-really <comment><USER2> Since when are advertisements based on facts and data. It is a clever marketing move on the part of Samsung to insinuate that the iPhone is for old people, but is the best tactic of the Apple community to respond with boring facts and data about the user base?

This tends to go against the emotional marketing which Apple has been so good at using in the past.

I suspected that as Apple products grew in popularity, the brand would have difficulty maintaining their cool-factor. It is difficult to be the coolest and the most popular, though they have done an admirable job so far.

The challenge is that as the die-hards rely on quoting user stats, stock prices and other non-emotive data which proves to them that their choice of brand is the 'best', they will fail to engage the true tastemakers who care more about being unique and a leader than being one of the herd.

</comment><comment><USER3> I have yet to see it mentioned that every time Samsung fucks with Apple they get massive advertisement.

Apple played right into their hands with that ridiculous court case that went on for months filling up the pages of just about every tech blog and news resource.

Seriously: I've had people who literally know from shit and do not give a shit share their opinion on tech patents with me.

Samsung is playing one ofthe smartest games I have ever seen in this space. Super, super sharp.</comment>


Open source framework for building TV apps - chestnut-tree http://fmtvp.github.com/tal/

<comment> chestnut-tree The framework has been developed by the BBC. Here's a blog post introducing the project [http://www.bbc.co.uk/blogs/internet/posts/Making-the-TV- Appl...](http://www.bbc.co.uk/blogs/internet/posts/Making-the-TV-Application- Layer-Open-Source)</comment>


Eclipse Community Survey 2014 Results - <AUTHOR> http://ianskerrett.wordpress.com/2014/06/23/eclipse-community-survey-2014-results/

<comment><USER2> The Javascript highlight isn't exactly surprising to me; I'd wager 100% of web developers have used Javascript at some point, with the vast majority of them using it frequently. This trend probably isn't tied to the surge in popularity of Node.JS (though that may be a contributing factor), seeing as virtually every web development project is using Javascript in their client side code.

It would be interesting if we could somehow separate front-end JS code from backend JS code to determine the relative popularity of (Node)JS among other backend languages like Java, PHP, C#, etc.</comment>


New urine test can quickly detect whether a person has a healthy diet - <AUTHOR> http://healthsciencemag.org/2017/01/13/new-urine-test-can-quickly-detect-whether-a-person-has-a-healthy-diet/ <comment><USER2> blogspam of

[https://www.aber.ac.uk/en/news/archive/2017/01/title-196132-...](https://www.aber.ac.uk/en/news/archive/2017/01/title-196132-en.html)</comment>